IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Часы со стрелками на С++ (https://www.imho.ws/showthread.php?t=95874)

ktulu 14.11.2005 21:21

Часы со стрелками на С++
 
Всем привет! :)

Помогите плз кто-нибудь, надо сделать аналоговые часы на С++ (класс и методы), причем при передвижении стрелок надо, чтобы перерисовывались не все часы, а только стрелки. Думаю, что кто-нибудь (если не многие ;) ) это уже делал, хелп плз! Да, надо чтобы ЭТО откомпилилось в dev c++, почти забыл.
Спасибо заранее!

kot_ 15.11.2005 19:35

Цитата:

Сообщение от ktulu
Всем привет! :)

Помогите плз кто-нибудь, надо сделать аналоговые часы на С++ (класс и методы), причем при передвижении стрелок надо, чтобы перерисовывались не все часы, а только стрелки. Думаю, что кто-нибудь (если не многие ;) ) это уже делал, хелп плз! Да, надо чтобы ЭТО откомпилилось в dev c++, почти забыл.
Спасибо заранее!

Пример заимствован из VC&MFS Мешкова и Тихомирова.
Весь класс приводить не буду - большой. функция которая рисует стрелки выглядит примерно так:
Код:

void CClock::RotatePoint(POINT pt[],int num,double angle){
POINT ptTemp;
 for(int i=0;i<num;i++){
//TWOPI = (2*3.14159)
  ptTemp.x = (int)(pt[i].x *cos(TWOPI*angle/360)+
                  pt[i].y*sin(TWOPI*angle/360));
  ptTemp.y = (int)(pt[i].y *cos(TWOPI*angle/360)+
                  pt[i].x*sin(TWOPI*angle/360));
  pt[i] = ptTemp;

 }
}


void CClock::DrawArrows(CDC *pDC, CTime &tm){
//сразу описываешь массив  - по этим координатам потом будешь
//рисовать
static POINT pt[3][11] = {
 0, -50,-50,  0,-5,  40,-5, 100,-30, 120,0, 600, 30,
120, 5,100, 5,40, 50,0, 0,-50, 0,-40, -40, 0,-5, 30,-5,
90, -20, 110,0,800, 20,110,5,90,5,30,40,0,0,-40,0,-100,-5,
-100,-5,-100,-5,-100,-5,-100,0,850, 5,-100,5,-100,5,-100,0,-100};
double Angle[3];
//Вычисляешь угол поворота
Angle[0] = (tm.GetHour()*30)%360+tm.GetMinute()/2;
Angle[1] = (tm.GetMinute()*60+tm.GetSecond())/10.0;
Angle[2] = (tm.GetSecond()*6);
POINT ptTemp[3][11];
memcpy(ptTemp,pt,sizeof(pt));
 for(int i = 0;i<3;i++){
  RotatePoint(ptTemp[i],11,Angle[i]);
  pDC->Polygon(ptTemp[i],11);
 }
}

Соответственно должна быть функция типа редроу - которая собственно и будет вызывать вышеприведенную. Все остальное дописать в принципе не сложно и самому. Если чего напутал в массиве там или с координатами звини и исправь сам. Писал по памяти - мог ошибится.

SapeR 15.11.2005 21:13

Вложений: 1
вот завалялся рабочий пример часов со стрелками

ktulu 16.11.2005 22:26

Спасибо! Реально помогло :)


Часовой пояс GMT +4, время: 19:47.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.