Показать сообщение отдельно
Старый 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_ вне форума