Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
#1

Стрелочные часы. - C++

18.02.2012, 22:06. Просмотров 1994. Ответов 8
Метки нет (Все метки)

Всем доброго время суток. Нашел в интернете код (DEV C++ WINAPI ANALOG CLOCK) программы исполнение которого запускает стрелочные часы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#include <windows.h>
#include <windowsx.h>
#include <math.h>//sin,cos
 
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
BOOL OnCreate(HWND,CREATESTRUCT FAR*);
void OnPaint(HWND);
void CYFERBL(HWND);
void OnDestroy(HWND);
void OnTimer(HWND,UINT);
void STRELKA (COLORREF,int,int,float);
 
/*Глобалъные переменные*/
int nFunsterStil;
int iwinX=400, iwinY=40, iwinXC=iwinX-150, iwinYC=iwinY;
int iDia=130,iHeight=iDia+34, iWidth=iDia+8, iRad=iDia/2,
      sizFont=int(iDia/6.7);
int iKorp=8,iMetM=3,iMetH=5;  
int iRadMet=iRad-iKorp, iRadCFR=iRadMet-sizFont/2-iMetH;
int penwKorp=2, penwCfrbl=2, penwmM=2,penwmH=3;
COLORREF colKorp=RGB(150,150,150), colCfrbl=RGB(0,0,0),
 colStrMH=colKorp, colStrS=RGB(255,0,0), colmM=colKorp,
 colmH=colKorp, colCfr=colKorp;
HWND hwnd; HDC hdcMem0, hdcMem,hdc; 
HBITMAP hBitmap,hOldBitmap; BITMAP bm; PAINTSTRUCT ps;
HBRUSH br; HPEN pen; HFONT hFontO, hOldFont; 
MSG mMsg; 
char szClassName[ ] = "WindowsApp";
char szCurrentTime[3],tstr[1000]="",str[1000]="";   
 
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int)
 {
  char szClassName[]="MainWindow";
  char szTitle[]="CLOCK";
  MSG msg;
  WNDCLASS wc;
  ZeroMemory (&wc, sizeof (wc) );
  wc.lpszClassName=szClassName;
  wc.hInstance=hInst;
  wc.lpfnWndProc=WndProc ;
  wc.hCursor=LoadCursor(NULL,IDC_ARROW) ;
  wc.hIcon=LoadIcon(hInst,"icon") ;
  wc.hbrBackground=GetStockBrush(GRAY_BRUSH);
  RegisterClass(&wc);
  hwnd=CreateWindow(szClassName, szTitle, WS_OVERLAPPEDWINDOW,
      iwinX,iwinY,iWidth,iHeight,HWND_DESKTOP,NULL,hInst,NULL);
  ShowWindow(hwnd,SW_SHOWNORMAL);
  while(GetMessage(&msg,NULL,0,0)) DispatchMessage(&msg);
  DeleteObject(hwnd);
  return 0; 
 }
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
                          WPARAM wParam,LPARAM lParam)
 {
 switch(msg)
  {
  HANDLE_MSG (hwnd, WM_CREATE, OnCreate) ;
  HANDLE_MSG(hwnd,WM_TIMER,OnTimer);
  HANDLE_MSG(hwnd,WM_PAINT,OnPaint);
  HANDLE_MSG (hwnd, WM_DESTROY, OnDestroy);
  default:
  return(DefWindowProc(hwnd,msg,wParam,lParam));
  }
 }  
 
BOOL OnCreate(HWND hwnd,LPCREATESTRUCT)
 {
  SetWindowPos(hwnd,NULL,iwinX,iwinY,iWidth,iHeight,SWP_NOSIZE);     
  hdc=GetDC(hwnd);hdcMem=CreateCompatibleDC(hdc); 
  hdcMem0=CreateCompatibleDC(hdc); 
  hBitmap=CreateCompatibleBitmap(hdc,iDia,iDia);
  GetObject(hBitmap,sizeof(BITMAP),&bm);
  hOldBitmap=SelectBitmap(hdcMem0,hBitmap) ; 
  CYFERBL(hwnd);  // risovanie cyferblata
 SetTimer(hwnd,1,1000,NULL);
 return TRUE;
 }// OnCreate
 
void OnPaint(HWND hwnd)
 {
  float strUgolS,strUgolM,strUgolH;   
  hdcMem=BeginPaint(hwnd,&ps);
  BitBlt (hdcMem,0,0,bm.bmWidth,bm.bmHeight,hdcMem0,0,0,SRCCOPY);
  SYSTEMTIME chas ;
  GetLocalTime(&chas);              
  //UGLY
  strUgolS= -0.017453292*6*chas.wSecond;
  strUgolM= -0.017453292*6*chas.wMinute+strUgolS/60;
  strUgolH= -0.017453292*30*chas.wHour+strUgolM/12;
  //STRELKI 
  STRELKA (colStrMH,iRadMet-4*iMetH-iMetM,2,strUgolH);//CHAS
  STRELKA (colStrMH,iRadMet-iMetH-iMetM,2,strUgolM);//MIN
  STRELKA (colStrS,iRadMet-iMetH-iMetM,1,strUgolS);//SEC
  //CENTR TO4KA
  pen = CreatePen(PS_SOLID, 1,colStrMH);
  br = CreateSolidBrush(colStrMH);
  SelectBrush(hdcMem, br);     
  Ellipse(hdcMem, iRad-3, iRad-3,iRad+3,iRad+3);  
  DeleteObject(br);
  DeleteObject(pen);
  BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,hdcMem,0,0,SRCCOPY) ;
  ReleaseDC(hwnd,hdc);
  ReleaseDC(hwnd,hdcMem);
  ReleaseDC(hwnd,hdcMem0);
  DeleteObject(hBitmap);
  EndPaint(hwnd,&ps);
 }
 
void OnDestroy(HWND hwnd)
 {
  KillTimer(hwnd,1);     
  DeleteBitmap(hBitmap);
  SelectBitmap (hdcMem,hOldBitmap);
  DeleteDC(hdcMem);
  DeleteDC(hdcMem0);
  PostQuitMessage(0);
 }//OnDestroy
 
void OnTimer(HWND hwnd,UINT)
 {
  //Перерисовка окна.Если FALSE - не мигает
  InvalidateRect(hwnd,NULL,FALSE);
 } //OnTimer
void CYFERBL(HWND hwnd)
 {
  int ii,jj,iX,iY,iXc,iYc,t=0;   
  float fUgol,fUgolc;   
      // risovanie cyferblata
  BeginPaint(hwnd, &ps);
      // zalivka korpusa
  br = CreateSolidBrush(RGB(64,64,64));
  SelectObject(hdcMem0, br);
  Rectangle(hdcMem0, 0, 0, iDia, iDia);
  DeleteObject(br);
  pen = CreatePen(PS_SOLID, 1,colKorp);
   SelectObject(hdcMem0, pen);
  br = CreateSolidBrush(colKorp);
  SelectObject(hdcMem0, br);     
  Ellipse(hdcMem0, 0, 0,iDia,iDia);
  DeleteObject(br);DeleteObject(pen);
      // zalivka cyferblata
  br = CreateSolidBrush(colCfrbl);
  SelectObject(hdcMem0, br);     
  Ellipse(hdcMem0,iKorp, iKorp,iDia-iKorp,iDia-iKorp);
  DeleteObject(br);
       //metki minut  
  pen = CreatePen(PS_SOLID, penwmM,colmM);
  SelectObject(hdcMem0, pen);
  for (ii = 1; ii <= 60; ii++)
   {                          
   fUgol = - 0.017453292*6*ii;
   iX=iRad-int(iRadMet*sin(fUgol));
   iY=iRad-int(iRadMet*cos(fUgol));
   MoveToEx(hdcMem0, iX,iY, NULL);
   iX=iRad-int((iRadMet-iMetM)*sin(fUgol));
   iY=iRad-int((iRadMet-iMetM)*cos(fUgol));
   LineTo(hdcMem0, iX,iY);
   }
  DeleteObject(pen);
      //metki chasov
  pen = CreatePen(PS_SOLID, penwmH,colmH);
  SelectObject(hdcMem0, pen);
  for (ii = 1; ii <= 12; ii++)
   {                          
   fUgol =  - 0.017453292*30*ii;
   iX=iRad-int(iRadMet*sin(fUgol));
   iY=iRad-int(iRadMet*cos(fUgol));
   MoveToEx(hdcMem0, iX,iY, NULL);
   iX=iRad-int((iRadMet-iMetH)*sin(fUgol));
   iY=iRad-int((iRadMet-iMetH)*cos(fUgol));
   LineTo(hdcMem0, iX,  iY);
   }
  DeleteObject(pen);
     //SHRIFT CYFR
  static LOGFONT lf; 
  lf.lfPitchAndFamily = FIXED_PITCH | FF_MODERN; 
  lf.lfItalic = FALSE;
  lf.lfWeight = FW_BOLD;
  lf.lfHeight = sizFont; 
  lf.lfCharSet = DEFAULT_CHARSET; 
  lstrcpy( (LPSTR)&lf.lfFaceName, "Impact" );
  hFontO = CreateFontIndirect(&lf); 
  hOldFont = (HFONT)SelectObject(hdcMem0, hFontO); 
  SetBkMode(hdcMem0,TRANSPARENT);//CVET FONA CYFR = CV.BRUSH
  SetTextColor(hdcMem0,colCfr);//CVET CYFR
       //VYVOD CYFR 
  char ttt1[2];    
  for (jj = 1; jj <= 12; jj++)
   {
   fUgolc =  - 0.017453292*30*jj;
   iXc=iRad-int(iRadCFR*sin(fUgolc))-sizFont/4;
   iYc=iRad-int(iRadCFR*cos(fUgolc))-sizFont/2;
   wsprintf(ttt1,"%d",jj);
   TextOut(hdcMem0,iXc ,iYc, ttt1, strlen(ttt1));
   }
  EndPaint(hwnd, &ps);
 } //CYFERBL 
void STRELKA (COLORREF colStr,int radSTR,int shirSTR,float strUgol)
 {
  int okrR=3*shirSTR;     
  int penwSTR=2;     
  int strX1=iRad+int(0.3*radSTR * sin(strUgol)-shirSTR*cos(strUgol)); 
  int strY1=iRad+int(0.3*radSTR * cos(strUgol)+shirSTR*sin(strUgol));
  int strX2=iRad+int(0.3*radSTR * sin(strUgol)+shirSTR*cos(strUgol)); 
  int strY2=iRad+int(0.3*radSTR * cos(strUgol)-shirSTR*sin(strUgol));
  int strX=iRad-int(radSTR * sin(strUgol));
  int strY=iRad-int(radSTR * cos(strUgol));
  POINT pt[3]={{strX1, strY1}, {strX2, strY2}, {strX, strY}};
  pen = CreatePen(PS_SOLID, penwSTR,colStr);
  SelectObject(hdcMem, pen); 
  br = CreateSolidBrush(colStr);
  SelectObject(hdcMem, br);  
  Polygon(hdcMem,pt,3);
  Ellipse(hdcMem, iRad-okrR, iRad-okrR,iRad+okrR,iRad+okrR);
  DeleteObject(br);
  DeleteObject(pen);
 }//STRELKA
Это проект вида Empty Project консольного приложения. У меня Visual Studio 2010 и компилятор выдает предупреждения:

Warning 1 warning C4244: '=' : conversion from 'double' to 'float', possible loss of data c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1575\analog clock\analog clock\analog clock.cpp 88 1 Analog clock
Warning 2 warning C4244: '=' : conversion from 'double' to 'float', possible loss of data c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1575\analog clock\analog clock\analog clock.cpp 89 1 Analog clock
Warning 3 warning C4244: '=' : conversion from 'double' to 'float', possible loss of data c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1575\analog clock\analog clock\analog clock.cpp 90 1 Analog clock
Warning 4 warning C4244: '=' : conversion from 'double' to 'float', possible loss of data c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1575\analog clock\analog clock\analog clock.cpp 152 1 Analog clock
Warning 5 warning C4244: '=' : conversion from 'double' to 'float', possible loss of data c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1575\analog clock\analog clock\analog clock.cpp 166 1 Analog clock
Warning 6 warning C4244: '=' : conversion from 'double' to 'float', possible loss of data c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1575\analog clock\analog clock\analog clock.cpp 191 1 Analog clock

И программа не работает. Подскажите пожалуйста как исправить ошибку. Заранее огромное спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2012, 22:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стрелочные часы. (C++):

Стрелочные часы - C++
Разработать приложение, отображающее движение часовой, минутной и секундной стрелок часов. Циферблат в виде окружности снабжен метками...

Программа, которая переводит часы и минуты в минуты или минуты – в часы и минуты - C++
Составьте программу, которая в зависимости от входных данных переводит часы и минуты в минуты или минуты – в часы и ...

Часы - C++
помогите плиз вот такую задачку решить: Даны целые числа M и N (0&lt;M&lt;=12, 0&lt;=N&lt;=60), указывающие момент времени: «M часов, N минут»....

Часы - C++
int main() { int sek,min,chas; chas=0; min=0; while(chas!=24) // Цикл подсчета часов { while(min!=60) // Цикл...

Часы C++ - C++
Помогите с решением, так как вообще не шарю в плюсах...

Часы - C++
Нужно реализовать программу выполняющую перевод часов и минут в минуты и вычисляющую угол между минутной и часовой стрелкой. Вопрос: где...

8
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
18.02.2012, 23:26 #2
Цитата Сообщение от isaak Посмотреть сообщение
conversion from 'double' to 'float'
компилятор указывает на то, что значение с типом данных double будет записанно в область с меньшим размером, т.е. будут потеряны данные. В таких случаях, если программист знает что делает, то делается явное приведение типа
C++
1
float f = (float)valueOfDouble
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.02.2012, 23:32 #3
проблема явно не в потери данных.
попробуйте проект Win32 приложения а не консльный вариант.
А еще лучше описать, как именно не работает. Не работать может по всякому.


Создал в VS8 не пустой win32 проект. закоментарил сгенеренный код. скопировал то, что вы тут выложили. В свойствах проекта Character Set поставил в Not Set.
строка 189 - нужно увеличить размер буффера. 2 не достаточно. двузначное число не помещается. нужен хотябы еще один байт на нуль в конце. Запустил. Часы тикают
0
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
19.02.2012, 13:12  [ТС] #4
Чето ни чего не понимаю. DU вы в Win32 Application какой тип проекта выбирали: Windows Application, DLL, Console Application или Static library?
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.02.2012, 14:34 #5
Чето ни чего не понимаю. DU вы в Win32 Application какой тип проекта выбирали: Windows Application, DLL, Console Application или Static library?
Windows Application
1
-=ЮрА=-
Заблокирован
Автор FAQ
19.02.2012, 16:08 #6
Цитата Сообщение от isaak Посмотреть сообщение
Это проект вида Empty Project консольного приложения. У меня Visual Studio 2010 и компилятор выдает предупреждения:
- isaak,
Цитата Сообщение от isaak Посмотреть сообщение
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int)
- это сразу говорит что необходим тип проекта Win32 Application
1
-=ЮрА=-
Заблокирован
Автор FAQ
19.02.2012, 16:10 #7
isaak, вот скрин на котором отмечен нужный вам тип приложения
1
Миниатюры
Стрелочные часы.  
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
19.02.2012, 17:28  [ТС] #8
Всем спасибо за ответы -=ЮрА=-, DU, Xind сделал как вы сказали: тип проекта Win32 Application -> Windows Application -> В свойствах проекта Character Set поставил в Not Set. Программа компилируется без ошибок, но при запуске вылетает ошибка на скрине внизу. Какое значение нужно присвоить размеру буфера???????
Вот что у меня получилось посмотрите пожалуйста на правильном ли я пути??????
Analog clock.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
#include "stdafx.h"
#include "Analog clock.h"
#include <windows.h>
#include <windowsx.h>
#include <math.h>//sin,cos
#define MAX_LOADSTRING 100
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
BOOL OnCreate(HWND,CREATESTRUCT FAR*);
void OnPaint(HWND);
void CYFERBL(HWND);
void OnDestroy(HWND);
void OnTimer(HWND,UINT);
void STRELKA (COLORREF,int,int,float);
 
/*Глобалъные переменные*/
int nFunsterStil;
int iwinX=400, iwinY=40, iwinXC=iwinX-150, iwinYC=iwinY;
int iDia=130,iHeight=iDia+34, iWidth=iDia+8, iRad=iDia/2,
      sizFont=int(iDia/6.7);
int iKorp=8,iMetM=3,iMetH=5;  
int iRadMet=iRad-iKorp, iRadCFR=iRadMet-sizFont/2-iMetH;
int penwKorp=2, penwCfrbl=2, penwmM=2,penwmH=3;
COLORREF colKorp=RGB(150,150,150), colCfrbl=RGB(0,0,0),
 colStrMH=colKorp, colStrS=RGB(255,0,0), colmM=colKorp,
 colmH=colKorp, colCfr=colKorp;
HWND hwnd; HDC hdcMem0, hdcMem,hdc; 
HBITMAP hBitmap,hOldBitmap; BITMAP bm; PAINTSTRUCT ps;
HBRUSH br; HPEN pen; HFONT hFontO, hOldFont; 
MSG mMsg; 
char szClassName[ ] = "WindowsApp";
char szCurrentTime[3],tstr[1000]="",str[1000]="";       
 
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int)
 {
  char szClassName[]="MainWindow";
  char szTitle[]="CLOCK";
  MSG msg;
  WNDCLASS wc;
  ZeroMemory (&wc, sizeof (wc) );
  wc.lpszClassName=szClassName;
  wc.hInstance=hInst;
  wc.lpfnWndProc=WndProc ;
  wc.hCursor=LoadCursor(NULL,IDC_ARROW) ;
  wc.hIcon=LoadIcon(hInst,"icon") ;
  wc.hbrBackground=GetStockBrush(GRAY_BRUSH);
  RegisterClass(&wc);
  hwnd=CreateWindow(szClassName, szTitle, WS_OVERLAPPEDWINDOW,
      iwinX,iwinY,iWidth,iHeight,HWND_DESKTOP,NULL,hInst,NULL);
  ShowWindow(hwnd,SW_SHOWNORMAL);
  while(GetMessage(&msg,NULL,0,0)) DispatchMessage(&msg);
  DeleteObject(hwnd);
  return 0; 
 }
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
                          WPARAM wParam,LPARAM lParam)
 {
 switch(msg)
  {
  HANDLE_MSG (hwnd, WM_CREATE, OnCreate) ;
  HANDLE_MSG(hwnd,WM_TIMER,OnTimer);
  HANDLE_MSG(hwnd,WM_PAINT,OnPaint);
  HANDLE_MSG (hwnd, WM_DESTROY, OnDestroy);
  default:
  return(DefWindowProc(hwnd,msg,wParam,lParam));
  }
 }  
 
BOOL OnCreate(HWND hwnd,LPCREATESTRUCT)
 {
  SetWindowPos(hwnd,NULL,iwinX,iwinY,iWidth,iHeight,SWP_NOSIZE);     
  hdc=GetDC(hwnd);hdcMem=CreateCompatibleDC(hdc); 
  hdcMem0=CreateCompatibleDC(hdc); 
  hBitmap=CreateCompatibleBitmap(hdc,iDia,iDia);
  GetObject(hBitmap,sizeof(BITMAP),&bm);
  hOldBitmap=SelectBitmap(hdcMem0,hBitmap) ; 
  CYFERBL(hwnd);  // risovanie cyferblata
 SetTimer(hwnd,1,1000,NULL);
 return TRUE;
 }// OnCreate
 
void OnPaint(HWND hwnd)
 {
  float strUgolS,strUgolM,strUgolH;   
  hdcMem=BeginPaint(hwnd,&ps);
  BitBlt (hdcMem,0,0,bm.bmWidth,bm.bmHeight,hdcMem0,0,0,SRCCOPY);
  SYSTEMTIME chas ;
  GetLocalTime(&chas);              
  //UGLY
  strUgolS= -0.017453292*6*chas.wSecond;
  strUgolM= -0.017453292*6*chas.wMinute+strUgolS/60;
  strUgolH= -0.017453292*30*chas.wHour+strUgolM/12;
  //STRELKI 
  STRELKA (colStrMH,iRadMet-4*iMetH-iMetM,2,strUgolH);//CHAS
  STRELKA (colStrMH,iRadMet-iMetH-iMetM,2,strUgolM);//MIN
  STRELKA (colStrS,iRadMet-iMetH-iMetM,1,strUgolS);//SEC
  //CENTR TO4KA
  pen = CreatePen(PS_SOLID, 1,colStrMH);
  br = CreateSolidBrush(colStrMH);
  SelectBrush(hdcMem, br);     
  Ellipse(hdcMem, iRad-3, iRad-3,iRad+3,iRad+3);  
  DeleteObject(br);
  DeleteObject(pen);
  BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,hdcMem,0,0,SRCCOPY) ;
  ReleaseDC(hwnd,hdc);
  ReleaseDC(hwnd,hdcMem);
  ReleaseDC(hwnd,hdcMem0);
  DeleteObject(hBitmap);
  EndPaint(hwnd,&ps);
 }
 
void OnDestroy(HWND hwnd)
 {
  KillTimer(hwnd,1);     
  DeleteBitmap(hBitmap);
  SelectBitmap (hdcMem,hOldBitmap);
  DeleteDC(hdcMem);
  DeleteDC(hdcMem0);
  PostQuitMessage(0);
 }//OnDestroy
 
void OnTimer(HWND hwnd,UINT)
 {
  //Перерисовка окна.Если FALSE - не мигает
  InvalidateRect(hwnd,NULL,FALSE);
 } //OnTimer
void CYFERBL(HWND hwnd)
 {
  int ii,jj,iX,iY,iXc,iYc,t=0;   
  float fUgol,fUgolc;   
      // risovanie cyferblata
  BeginPaint(hwnd, &ps);
      // zalivka korpusa
  br = CreateSolidBrush(RGB(64,64,64));
  SelectObject(hdcMem0, br);
  Rectangle(hdcMem0, 0, 0, iDia, iDia);
  DeleteObject(br);
  pen = CreatePen(PS_SOLID, 1,colKorp);
   SelectObject(hdcMem0, pen);
  br = CreateSolidBrush(colKorp);
  SelectObject(hdcMem0, br);     
  Ellipse(hdcMem0, 0, 0,iDia,iDia);
  DeleteObject(br);DeleteObject(pen);
      // zalivka cyferblata
  br = CreateSolidBrush(colCfrbl);
  SelectObject(hdcMem0, br);     
  Ellipse(hdcMem0,iKorp, iKorp,iDia-iKorp,iDia-iKorp);
  DeleteObject(br);
       //metki minut  
  pen = CreatePen(PS_SOLID, penwmM,colmM);
  SelectObject(hdcMem0, pen);
  for (ii = 1; ii <= 60; ii++)
   {                          
   fUgol = - 0.017453292*6*ii;
   iX=iRad-int(iRadMet*sin(fUgol));
   iY=iRad-int(iRadMet*cos(fUgol));
   MoveToEx(hdcMem0, iX,iY, NULL);
   iX=iRad-int((iRadMet-iMetM)*sin(fUgol));
   iY=iRad-int((iRadMet-iMetM)*cos(fUgol));
   LineTo(hdcMem0, iX,iY);
   }
  DeleteObject(pen);
      //metki chasov
  pen = CreatePen(PS_SOLID, penwmH,colmH);
  SelectObject(hdcMem0, pen);
  for (ii = 1; ii <= 12; ii++)
   {                          
   fUgol =  - 0.017453292*30*ii;
   iX=iRad-int(iRadMet*sin(fUgol));
   iY=iRad-int(iRadMet*cos(fUgol));
   MoveToEx(hdcMem0, iX,iY, NULL);
   iX=iRad-int((iRadMet-iMetH)*sin(fUgol));
   iY=iRad-int((iRadMet-iMetH)*cos(fUgol));
   LineTo(hdcMem0, iX,  iY);
   }
  DeleteObject(pen);
     //SHRIFT CYFR
  static LOGFONT lf; 
  lf.lfPitchAndFamily = FIXED_PITCH | FF_MODERN; 
  lf.lfItalic = FALSE;
  lf.lfWeight = FW_BOLD;
  lf.lfHeight = sizFont; 
  lf.lfCharSet = DEFAULT_CHARSET; 
  lstrcpy( (LPSTR)&lf.lfFaceName, "Impact" );
  hFontO = CreateFontIndirect(&lf); 
  hOldFont = (HFONT)SelectObject(hdcMem0, hFontO); 
  SetBkMode(hdcMem0,TRANSPARENT);//CVET FONA CYFR = CV.BRUSH
  SetTextColor(hdcMem0,colCfr);//CVET CYFR
       //VYVOD CYFR 
  char ttt1[2];    
  for (jj = 1; jj <= 12; jj++)
   {
   fUgolc =  - 0.017453292*30*jj;
   iXc=iRad-int(iRadCFR*sin(fUgolc))-sizFont/4;
   iYc=iRad-int(iRadCFR*cos(fUgolc))-sizFont/2;
   wsprintf(ttt1,"%d",jj);
   TextOut(hdcMem0,iXc ,iYc, ttt1, strlen(ttt1));
   }
  EndPaint(hwnd, &ps);
 } //CYFERBL 
void STRELKA (COLORREF colStr,int radSTR,int shirSTR,float strUgol)
 {
  int okrR=3*shirSTR;     
  int penwSTR=2;     
  int strX1=iRad+int(0.3*radSTR * sin(strUgol)-shirSTR*cos(strUgol)); 
  int strY1=iRad+int(0.3*radSTR * cos(strUgol)+shirSTR*sin(strUgol));
  int strX2=iRad+int(0.3*radSTR * sin(strUgol)+shirSTR*cos(strUgol)); 
  int strY2=iRad+int(0.3*radSTR * cos(strUgol)-shirSTR*sin(strUgol));
  int strX=iRad-int(radSTR * sin(strUgol));
  int strY=iRad-int(radSTR * cos(strUgol));
  POINT pt[3]={{strX1, strY1}, {strX2, strY2}, {strX, strY}};
  pen = CreatePen(PS_SOLID, penwSTR,colStr);
  SelectObject(hdcMem, pen); 
  br = CreateSolidBrush(colStr);
  SelectObject(hdcMem, br);  
  Polygon(hdcMem,pt,3);
  Ellipse(hdcMem, iRad-okrR, iRad-okrR,iRad+okrR,iRad+okrR);
  DeleteObject(br);
  DeleteObject(pen);
 }//STRELKA
Заранее огромное спасибо.
0
Миниатюры
Стрелочные часы.  
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
19.02.2012, 17:34  [ТС] #9
Все спасибо разобрался:
C++
1
char ttt1[8];
0
19.02.2012, 17:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2012, 17:34
Привет! Вот еще темы с ответами:

Часы C++ - C++
Здравствуйте. Вот программа, реализующая работу часов. Подскажите пожалуйста, что нужно добавить, чтобы был выбор часового пояса. Заранее...

Часы - C++
Правильный ли код? #include &lt;iostream&gt; using namespace std; int main () { int k, h, m; cin &gt;&gt; k; h = k / 30; m = k*2...

Электронные часы - C++
Электронные часы показывают время в формате h:mm:ss, то есть сначала записывается количество часов, потом обязательно двузначное количество...

Электронные часы - C++
В общем, над задачей я мучаюсь больше недели уже, новичок, вроде и понимаю все, но на этой - ступор. В прикрепленном пике сама задача и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru