imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 14.11.2005, 21:21     # 1
ktulu
Junior Member
 
Аватар для ktulu
 
Регистрация: 21.04.2005
Сообщения: 117

ktulu Путь к славе только начался
Question Часы со стрелками на С++

Всем привет!

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

Последний раз редактировалось ktulu; 14.11.2005 в 22:15.
ktulu вне форума  
Старый 15.11.2005, 19:35     # 2
kot_
Junior Member
 
Аватар для kot_
 
Регистрация: 19.11.2004
Адрес: Dnepropetrovsk
Пол: Male
Сообщения: 67

kot_ Путь к славе только начался
Цитата:
Сообщение от 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);
 }
}
Соответственно должна быть функция типа редроу - которая собственно и будет вызывать вышеприведенную. Все остальное дописать в принципе не сложно и самому. Если чего напутал в массиве там или с координатами звини и исправь сам. Писал по памяти - мог ошибится.
__________________
kot_ вне форума  
Старый 15.11.2005, 21:13     # 3
SapeR
::VIP::
 
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310

SapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царстве
вот завалялся рабочий пример часов со стрелками
Вложения
Тип файла: zip PQ_Clock.zip (18.3 Кбайт, 95 просмотров - Кто скачивал? )
SapeR вне форума  
Старый 16.11.2005, 22:26     # 4
ktulu
Junior Member
 
Аватар для ktulu
 
Регистрация: 21.04.2005
Сообщения: 117

ktulu Путь к славе только начался
Спасибо! Реально помогло
ktulu вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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