// // Zet een windowtje met een analoge klok op het scherm, in C++ // // Siegfried Nijssen, Walter Kosters // Informatica, Universiteit Leiden // kosters@liacs.nl // 30.1.2004 // // Verander zelf de gedeeltes tussen TODObegin en TODOeind // #include #include // unistd zorgt ervoor dat later sleep ( ) gebruikt kan worden. #include // voor de tijd #include // voor pi: M_PI, en sinus en cosinus #include "Xsowl.h" using namespace std; const int okclick = 1; // teken wijzer van zekere lengte in zekere kleur void tekenwijzer (TWindow & venster, int xmidden, int ymidden, int lengte, double hoek, unsigned long kleur) { venster.SetDrawForeground (kleur); venster.DrawLine ( xmidden, ymidden, xmidden + (int) ( lengte * cos (hoek * M_PI / 180 - M_PI / 2) ), ymidden + (int) ( lengte * sin (hoek * M_PI / 180 - M_PI / 2) ) ); } // tekenwijzer int Xmain ( ) { tm* pointer; // pointer naar struct tm time_t t; // aantal seconden sinds ... int nummer = 0; // wat is er geklikt? int xcentrumklok = 200; // coordinaten centrum klok int ycentrumklok = 200; int langewijzer = 93; // lengte wijzers int kortewijzer = 50; int uur; // de tijd ... int min; int sec; // maak een venster van 400 bij 600 pixels en toon het TWindow venster (400,600); // knop met "boodschap" op (100,500); 200 breed, 50 hoog. // CheckForEvent geeft '1' (= okclick) terug als erop gedrukt wordt TButton ok (100,500,200,50,(char*)"Gezien hoe laat het is?",okclick,&venster); // lijnen worden getekend als ononderbroken lijn met dikte 3 venster.SetDrawLineStyle (LineStyleSolid,3); // nummer is 0 zolang er nog niet op de knop geklikt is while ( nummer == 0 ) { t = time(NULL); // seconden sinds ... pointer = localtime(&t); uur = pointer->tm_hour; min = pointer->tm_min; sec = pointer->tm_sec; tekenwijzer (venster,xcentrumklok,ycentrumklok, kortewijzer,(uur+min/60.0) * 30,black); tekenwijzer (venster,xcentrumklok,ycentrumklok, langewijzer,min * 6,black); //TODObegin// // secondewijzer //TODOeind// // cirkel: venster.SetDrawForeground (black); venster.DrawArc(xcentrumklok-100,ycentrumklok-100,200,200,0,360); // kijk of er op een knop geklikt is nummer = venster.CheckForEvent ( ); if ( nummer == okclick ) cout << "Dat was de klok ..." << endl; else { sleep (1); // wacht ongeveer een seconde //TODObegin// // lopende secondewijzer? //TODOeind// } // else } // while return 0; } // Xmain