Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/43: Рейтинг темы: голосов - 43, средняя оценка - 4.51
 Аватар для Stysha
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 14

Как создать механические часы (с циферблатом и стрелками)

17.08.2012, 09:51. Показов 8280. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет)
Мне в универе задали написать мех. часы, но как я поняла, они создаются при помощи классов...
Меня это удивило, потому что нам говорили, что мы только на след. год будем работать с классами...
Скажите, можно ли их создать без классов?)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.08.2012, 09:51
Ответы с готовыми решениями:

Механические часы со стрелками в java!
Помогите решить задачу!!! Реализовать приложение, которое рисует на экране механические часы с секундной, минутной и часовой...

Делаю часы с циферблатом,как синхронизировать время с ПК
Ну короче,хочу написать часы себе для общего развития.Какбэ они работают,но не могу представить как синхронизировать время с ПК? Там...

Часы с электронным циферблатом
Нужно реализовать простую анимацию электронных часов. Помогите пожалуйста.

23
 Аватар для Пaтрик
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 976
17.08.2012, 10:15
Можно. Процедурное программирование никто не отменял.
1
 Аватар для Stysha
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 14
17.08.2012, 10:32  [ТС]
а случайно не у кого не залежался код часиков?)
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.08.2012, 12:23
Цитата Сообщение от Stysha Посмотреть сообщение
Мне в универе задали написать мех. часы
Программа должна быть консольной или можно использовать графический интерфейс?
0
 Аватар для Stysha
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 14
17.08.2012, 12:31  [ТС]
консольной)
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.08.2012, 12:42
пример рабочий
http://kachkarvv.ru/faq/src-cplus/analog-clock.php
1
 Аватар для Stysha
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 14
17.08.2012, 13:07  [ТС]
спасибо)
я скопировала этот код в vs 2010 и у меня появились вот такие ошибки:


1>c:\users\dns\documents\visual studio 2010\projects\окрн\окрн\лотл.cpp(39): error C2440: =: невозможно преобразовать "char [11]" в "LPCWSTR"
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c:\users\dns\documents\visual studio 2010\projects\окрн\окрн\лотл.cpp(43): error C2664: LoadIconW: невозможно преобразовать параметр 2 из "const char [5]" в "LPCWSTR"
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c:\users\dns\documents\visual studio 2010\projects\окрн\окрн\лотл.cpp(47): error C2664: CreateWindowExW: невозможно преобразовать параметр 2 из "char [11]" в "LPCWSTR"
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c:\users\dns\documents\visual studio 2010\projects\окрн\окрн\лотл.cpp(89): warning C4244: =: преобразование "double" в "float", возможна потеря данных
1>c:\users\dns\documents\visual studio 2010\projects\окрн\окрн\лотл.cpp(90): warning C4244: =: преобразование "double" в "float", возможна потеря данных
1>c:\users\dns\documents\visual studio 2010\projects\окрн\окрн\лотл.cpp(91): warning C4244: =: преобразование "double" в "float", возможна потеря данных
1>c:\users\dns\documents\visual studio 2010\projects\окрн\окрн\лотл.cpp(153): warning C4244: =: преобразование "double" в "float", возможна потеря данных
1>c:\users\dns\documents\visual studio 2010\projects\окрн\окрн\лотл.cpp(167): warning C4244: =: преобразование "double" в "float", возможна потеря данных
1>c:\users\dns\documents\visual studio 2010\projects\окрн\окрн\лотл.cpp(183): error C2664: lstrcpyW: невозможно преобразовать параметр 1 из "LPSTR" в "LPWSTR"
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c:\users\dns\documents\visual studio 2010\projects\окрн\окрн\лотл.cpp(192): warning C4244: =: преобразование "double" в "float", возможна потеря данных
1>c:\users\dns\documents\visual studio 2010\projects\окрн\окрн\лотл.cpp(195): error C2664: wsprintfW: невозможно преобразовать параметр 1 из "char [2]" в "LPWSTR"
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c:\users\dns\documents\visual studio 2010\projects\окрн\окрн\лотл.cpp(196): error C2664: TextOutW: невозможно преобразовать параметр 4 из "char [2]" в "LPCWSTR"
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
17.08.2012, 13:33
а чем они должны быть механические?
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.08.2012, 13:48
я скопировала этот код в vs 2010 и у меня появились вот такие ошибки:
предлагаю простой вариант компиляции:

C++
1
g++ -static -lgdi32
компилятор, естессно, g++
1
 Аватар для Stysha
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 14
17.08.2012, 14:14  [ТС]
извините, но я не поняла как это сделать)
0
 Аватар для Thirteen
32 / 32 / 8
Регистрация: 04.07.2012
Сообщений: 50
17.08.2012, 14:29
Stysha,
Ставим компилятор
http://completepascal.blogspot... ndows.html
Пишем в командной строке
"g++ -static -lgdi32"
Но не надо так делать.
Давайте ошибки разберём:
1. невозможно преобразовать "char [11]" в "LPCWSTR"
Находим строчку, которая выбрасывает ошибку и пишем там явное преобразование (LPCWSTR)
2. warning C4244: =: преобразование "double" в "float", возможна потеря данных
Это не ошибка. С этим можно компилировать.
3. Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
Тоже преобразование типов должно быть. Точнее, преобразование указателей. Тут код нужно смотреть.
1
 Аватар для insolent
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
17.08.2012, 14:49
Цитата Сообщение от Stysha Посмотреть сообщение
error C2440: =: невозможно преобразовать "char [11]" в "LPCWSTR"
Project -> Properties -> Configuration Properties -> General -> Character Set и выбираем вместо "Use Unicode Character Set" пункт "Use Multi-Byte Character Set"
1
 Аватар для Stysha
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 14
17.08.2012, 16:30  [ТС]
где нужно исправить, чтоб работал в vs 2010?

вот код:

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
/* analog-clock.cpp */  
#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
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.08.2012, 16:35
Stysha, этот код НЕ консольной программы.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.08.2012, 16:40
Если компилить g++ (последним) могуть быть косяки, сделать так:
C++
1
2
3
4
5
6
7
8
   //закомментить, ибо gcc 4.6.2 не хавает 
//   wsprintf(ttt1,"%d",jj);
//   TextOut(hdcMem0,iXc ,iYc, ttt1, strlen(ttt1));
 
   //вставить
   char t [3];
   itoa (jj, t, 10);
   TextOut(hdcMem0,iXc ,iYc, t, strlen(t));
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
17.08.2012, 16:46
Цитата Сообщение от novi4ok Посмотреть сообщение
а чем они должны быть механические?
механические (аналоговые) -> со стрелками
цифровые (электронные) -> с цифрами
еще есть бинарные (в двоичной системе) и комбинированные

Ябы решал задачу так - сделал бы 2 массива координат из 60 и 24 элементов, в которых бы описал все положения стрелки.
После каждую секунду надо очищать экран, секунды и минуты - индекс в первом массиве, час - индекс во втором массиве.
Остается поставить любой символ по всем координатам для всех трех стрелок.
После чего, спустя секунду, всё очистить и опять по новой.

Приведенный код слишком большой для такой задачи...
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.08.2012, 16:48
Пусть берёт что дают или стрелки в консоли рисует
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
17.08.2012, 16:53
Если дали задание в универе,

Не по теме:

на лето что-ли?

- то готовые часы не сама цель. Надо учиться соображать самой...
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.08.2012, 17:30
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
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
// ch.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
 
 
/* analog-clock.cpp */  
# 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]="";   
 
 
HINSTANCE hInst= GetModuleHandle (NULL);;
 
//int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int)
int main ()
 {
  char szClassName[]="MainWind";
  char* szTitle="CLOC";
  MSG msg;
  WNDCLASS wc;
  ZeroMemory (&wc, sizeof (wc) );
  wc.lpszClassName= (LPWSTR)szClassName;
  wc.hInstance= hInst;
  wc.lpfnWndProc=WndProc ;
  wc.hCursor=LoadCursor(NULL,IDC_ARROW) ;
  wc.hIcon=LoadIcon(hInst, (LPCWSTR)"icon") ;
  wc.hbrBackground=GetStockBrush(GRAY_BRUSH);
  RegisterClass(&wc);
  hwnd=CreateWindow((LPCWSTR)szClassName, (LPCWSTR)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(&lf.lfFaceName, (LPWSTR)"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));
 
   //А это я вставил
   char t [3];
   if (jj>= 10) {
    t[0]= '1';
    t[2]= 0;
    t[1]= jj%10+ 48;
   }
   else
   _itoa_s (jj, t, 10);
   TextOutA(hdcMem0,iXc ,iYc, (LPCSTR)t, strlen(t));
 
 
   }
  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
вот консольный вариант для MSVS 2010, только он всё равно у ТС не заработает ну да тут уж ничего не поделать я закалебался уже код править и вообще кто выдумал такую IDE у коотрой по умолчанию TextOut== TextOutW ???
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.08.2012, 17:48
Цитата Сообщение от kravam Посмотреть сообщение
вот консольный вариант для MSVS 2010
Вы шутите? Заменили WinMain() на main()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.08.2012, 17:48
Помогаю со студенческими работами здесь

Нужно сделать часы со стрелками. Помогите пожалуйста убрать следы, оставляемые стрелками после изменения положения
Всем привет. Нужно сделать часы со стрелками. Помогите пожалуйста убрать следы, оставляемые стрелками после изменения положения. program...

Механические часы
Ребят,помогите часы написанные на паскале,перекинуть в с++ builder unit Unit1; interface uses Windows, Messages, SysUtils,...

Механические часы с будильником
Ребят, нужна помощь, нужны механические часы с будильником на С++ Builder, часы должны тикать когда работают, время будильника выбирать...

Механические часы в java
Доброе время суток. Прошу вас помочь разобраться с программой. Здесь осталось секундную стрелку сделать по аналогии с минутной и таймер...

Механические часы с будильником
Добрый день всем нужно сделать программу &quot;Механических часов с таймером&quot; написать нужно на С++ Билдере , спасибо за внимание.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru