Zum Inhalt springen

Angeli

Mitglieder
  • Gesamte Inhalte

    15
  • Benutzer seit

  • Letzter Besuch

  1. mir ist nicht ganz klar wie du das meinst. Ich kann in meinem WM_TIMER bspw. pruefer = 1 ; reinschreiben. Und vor dem bild_zeichnen und uhr_zeichnen prüfe ich ob diese Bedingung erfüllt ist? Leider funktioniert das nicht das nicht...
  2. Hallo Leute, momentan werden alle meine Unterprogramme bild_zeichnen(hwnd, bildname); uhr_zeichnen(hwnd); zeiger_zeichnen(hwnd, zeitverschiebung); digitale_zeitanzeige(hwnd,staedtename); jede Sekunde gezeichnet. Gibt es auch die Möglichkeit, dass bild_zeichnen(hwnd, bildname) und uhr_zeichnen(hwnd) nur einmal ausgeführt und die anderen beiden Funktionen jede Sekunde aktualisiert werden? LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch (msg) { case WM_PAINT: if (Schalter == 0)hintergrundbild_zeichnen(hwnd); else { hdc=BeginPaint(hwnd,&ps); bild_zeichnen(hwnd, bildname); uhr_zeichnen(hwnd); zeiger_zeichnen(hwnd, zeitverschiebung); digitale_zeitanzeige(hwnd,staedtename); EndPaint(hwnd,&ps); } break; case WM_SIZE: cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); if (Schalter == 0)hintergrundbild_zeichnen(hwnd); SendMessage(hWndStatusbar,msg,wParam,lParam); InitializeStatusBar(hWndStatusbar,1); break; case WM_MENUSELECT: return MsgMenuSelect(hwnd,msg,wParam,lParam); case WM_COMMAND: HANDLE_WM_COMMAND(hwnd,wParam,lParam,MainWndProc_OnCommand); break; case WM_DESTROY: PostQuitMessage(0); KillTimer(hwnd, TIMER_1); break; case WM_TIMER: InvalidateRect(hwnd, NULL, TRUE); break; default: return DefWindowProc(hwnd,msg,wParam,lParam); } return 0; } SetTimer wird mithilfe eines Buttons in einer Maske aktiviert. Wäre super wenn mir jemand weiterhelfen könnte:)
  3. Hat sich erledigt! Habe es gerade eben selber hinbekommen
  4. BOOL APIENTRY zeitauswahlmaske (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { int x = 0; switch(msg) { case WM_INITDIALOG: //Dieser Teil wird durchlaufen, wenn die Maske das 1. Mal geoeffnet wird printf("\nDie Maske wurde aufdemacht"); break; case WM_COMMAND: //Dieser Teil wird durchlaufen, wenn in der Maske etwas ausgefuehrt werden soll. switch(LOWORD(wParam)) { case KNOPF_BERLIN: printf("\nEs wurde der Knopf_BERLIN gedrueckt"); uhr_zeichnen(hwndMain); SetTimer (hwndMain, TIMER_1, 1000, NULL); zeiger_zeichnen(hwndMain); break; case KNOPF_NY: printf("\nEs wurde der KNOPF_NY gedrueckt"); break; case KNOPF_LONDON: printf("\nEs wurde der KNOPF_LONDON gedrueckt"); break; case KNOPF_SYDNEY: printf("\nEs wurde der KNOPF_SYDNEY gedrueckt"); } break; } return(HandleDefaultMessages(hwnd, msg, wParam, lParam)); } Hallo nochmal, leider wechseln die Funktionen sich ab... ich kann die Zeiger nicht auf die Uhr zeichnen lassen! Wäre super wenn jemand eine Möglichkeit kennt, wie es doch funktioniert:) oder muss ich keine Funtionen zu einer zusammenfassen??
  5. Hallo, jetzt funktioniert folgendes nicht: wenn ich auf den KNOPF_BERLIN klicke, dann wird die Uhr gezeichnet aber sie läuft leider nicht... Ich kann auch nicht erkennen an was das liegt! Wäre super wenn mir da jemand weiter helfen könnte BOOL APIENTRY zeitauswahlmaske (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { int x = 0; switch(msg) { case WM_INITDIALOG: //Dieser Teil wird durchlaufen, wenn die Maske das 1. Mal geoeffnet wird printf("\nDie Maske wurde aufdemacht"); break; case WM_COMMAND: //Dieser Teil wird durchlaufen, wenn in der Maske etwas ausgefuehrt werden soll. switch(LOWORD(wParam)) { case KNOPF_BERLIN: printf("\nEs wurde der Knopf_BERLIN gedrueckt"); SetTimer (hwnd, TIMER, 1000, NULL); case WM_TIMER: uhr_zeichnen(hwndMain); break; break; case KNOPF_NY: printf("\nEs wurde der KNOPF_NY gedrueckt"); break; case KNOPF_LONDON: printf("\nEs wurde der KNOPF_LONDON gedrueckt"); break; case KNOPF_SYDNEY: printf("\nEs wurde der KNOPF_SYDNEY gedrueckt"); } break; } return(HandleDefaultMessages(hwnd, msg, wParam, lParam)); }
  6. mir ist leider nicht ganz klar wie ich das richtige Fensterhandle übergeben kann.. kannst du mir da keinen Tipp geben?
  7. Ich habe sein Wissen auch nicht angezweifelt;) also ich habs jetzt bisschen umgeändert... #include <windows.h> #include <windowsx.h> #include <commctrl.h> #include <string.h> #include "uhrprogrammres.h" #include "prototypen.h" #include <stdio.h> BOOL APIENTRY mein_maskenprogramm (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: //Dieser Teil wird durchlaufen, wenn die Maske das 1. Mal geoeffnet wird printf("\nDie Maske wurde aufdemacht"); break; case WM_COMMAND: //Dieser Teil wird durchlaufen, wenn in der Maske etwas ausgefuehrt werden soll. switch(LOWORD(wParam)) { case KNOPF_BERLIN: printf("\nEs wurde der Knopf_BERLIN gedrückt"); ellipse_zeichnen(hwnd); break; case KNOPF_NY: printf("\nEs wurde der KNOPF_NY gedrückt"); break; } break; } return(HandleDefaultMessages(hwnd, msg, wParam, lParam)); } BOOL ellipse_zeichnen(HWND hwnd) { HDC hdc; PAINTSTRUCT ps; int farbmischung; int r, g, b; HBRUSH pinsel; InvalidateRect (hwnd, NULL, TRUE); hdc = BeginPaint(hwnd, &ps); farbmischung = RGB(0, 100, 100); pinsel = CreateSolidBrush(farbmischung); SelectBrush(hdc, pinsel); Ellipse(hdc, 250, 80, 300, 130); DeleteObject(pinsel); EndPaint(hwnd, &ps); UpdateWindow(hwnd); return 0; } die Ellipse wird jetzt leider auf die Maske gezeichnet.. Wie kann ich sie auch dem Hauptfenster zeichnen lassen??
  8. das unterprogramm, welches auf das Hauptfenster eine Ellipse zeichnen soll heißt: ellipse_zeichenen (HDC hdc) hdc ist ein Handle für ein Gerätekontext
  9. Hallo ich hab folgendes Problem: wenn ich einen Button drücke passiert nichts... Ich will dass mein Programm mir beispielsweise eine Ellipse auf mein Hauptfenster zeichnet! aber leider bekomme ich das nicht hin.. Hier mein Unterprogramm: BOOL APIENTRY mein_maskenprogramm (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: //Dieser Teil wird durchlaufen, wenn die Maske das 1. Mal geoeffnet wird printf("\nDie Maske wurde aufdemacht"); break; case WM_COMMAND: switch(LOWORD(wParam)) { case KNOPF_BERLIN: printf("\nEs wurde der Knopf_BERLIN gedrückt"); Ellipse_zeichnen (hdc); break; case KNOPF_NY: printf("\nEs wurde der KNOPF_NY gedrückt"); break; } break; } return(HandleDefaultMessages(hwnd, msg, wParam, lParam)); } Die Übergabe an die Konsole funktioniert! Nur die Ellipse zeichnet er nicht.. Wie bekomme ich das hin? Ich hoffe jemand kann mir da helfen:) Ich hoffe jemand kann mir da weiterhelfen. Angeli
  10. Die Zeiger laufen mittlerweile wie die Zeit im Computer... Doch leider laufen Sie nur schlagartig mit (z.B. von 12 sofort auf die 1 ). Sie laufen nicht langsam mit, wie die analoge Uhren die man eigentlich kennt! Hat jemand eine Idee an was das liegen könnte?? void seczeiger_zeichnen (HDC hdc) { time_t tnow; time (&tnow); tmnow= localtime (&tnow); double pi = 3.1415926535; // Variablen für den Sekundenzeiger double xsec, ysec; double radsec = 100; double sekunde; sekunde =(double) tmnow->tm_sec; double winkel = (2.0*pi* sekunde/60.0); //Variablen für den Minutenzeiger double xmin, ymin; double radmin = 100; double minute = tmnow->tm_min; double winkelmin = (2.0*pi*minute/60); // Variablen für den Stundenzeiger double xhour, yhour; double radhour = 60; double hour = tmnow->tm_hour; double winkelhour; // (2.0*pi*hour/12); // Bewegung des Sekundenzeigers xsec = radsec * sin (winkel); ysec = -1* radsec * cos (winkel); // Bewegung des Minuternzeigers xmin = radmin * sin (winkelmin); ymin =-1* radmin * cos (winkelmin); // Bewegung des Stundenzeigers winkelhour = (2.0*pi*hour/12); xhour = radhour * sin (winkelhour); yhour = -1*radhour * cos (winkelhour); // Nullpunkt setzten SetViewportOrgEx(hdc, 350, 180, NULL); // Befehle für Sekundenzeiger MoveToEx (hdc, 0, 0, NULL); LineTo (hdc, xsec, ysec); // Befehle für Minutenzeiger MoveToEx (hdc, 0, 0, NULL); LineTo (hdc, xmin, ymin); // Befehle für Stundenzeiger MoveToEx (hdc, 0, 0, NULL); LineTo (hdc, xhour, yhour); }
  11. Danke es bewegt sich:) ich hab jetzt insgesamt 3 Zeiger und 3 TIMER für die Sekunden, Minuten und Stunden eingefügt. Wie kann ich dem Programm die jeweiligen TIMER zuweisen??
  12. Okay vielen Dank, jetzt kann ich zumindest beides gleichzeitig zeichnen:) Bewegen tut sich leider noch nichts.. was soll ich in WM-TIMER reinschreiben? Ich dachte er sorgt dafür dass eine Funktion ständig neu gezeichnet wird in bestimmten Zeitabständen. kann ich die Bewegung der Zeiger auch durch sin-Funktionen in Excel einlesen und damit dann Zeichnen??
  13. Hallo, ich soll eine Uhr programmieren. Leider habe ich nicht sehr viel Erfahrung und daher klappt es leider nicht so wie ich es will. So sieht es in meinem Hauptprogramm aus: LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { SYSTEMTIME st; //static SYSTEMTIME st_fest; switch (msg) { case WM_CREATE: SetTimer (hwnd, TIMER_1, 1000, NULL); //GetLocalTime (&st); break; case WM_PAINT: uhr_zeichnen(hwnd); break; case WM_SIZE: SendMessage(hWndStatusbar,msg,wParam,lParam); InitializeStatusBar(hWndStatusbar,1); break; case WM_MENUSELECT: return MsgMenuSelect(hwnd,msg,wParam,lParam); case WM_COMMAND: HANDLE_WM_COMMAND(hwnd,wParam,lParam,MainWndProc_OnCommand); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_TIMER: zeiger_zeichnen (hwnd); default: return DefWindowProc(hwnd,msg,wParam,lParam); } return 0; } mein Unterprogramm: #include <windowsx.h> #include <commctrl.h> #include <string.h> #include "uhrzeitenvergleichres.h" #include "prototypen.h" #include <stdio.h> #include <math.h> int uhr_zeichnen (HWND hwnd) { HDC hdc; PAINTSTRUCT ps; int farbe; int r,g,b; HBRUSH pinsel; InvalidateRect (hwnd, NULL, TRUE); hdc = BeginPaint (hwnd, &ps); farbe = RGB(220, 100, 50); pinsel = CreateSolidBrush (farbe); SelectBrush (hdc, pinsel); Ellipse (hdc, 250, 80, 450, 280); DeleteObject(pinsel); EndPaint (hwnd, &ps); UpdateWindow(hwnd); return 0; } int zeiger_zeichnen (HWND hwnd) { HDC hdc; PAINTSTRUCT ps; int x, y; int radius = 100; static double winkel = 0; double delta_winkel = 0.1047198; x = radius * cos (winkel); y = radius * sin (winkel); winkel = winkel + delta_winkel; InvalidateRect (hwnd, NULL, TRUE); hdc = BeginPaint (hwnd, &ps); SetViewportOrgEx(hdc, 350, 100, NULL); MoveToEx (hdc, 0, 0, NULL); LineTo (hdc, x, y); EndPaint (hwnd, &ps); UpdateWindow(hwnd); return 0; } Mein Problem ist jetzt, dass das Programm erst den Kreis zeichnet und dann beginnt der Zeiger zu laufen und der Kreis verschwindet. Wie kann ich beides gleichzeitig laufen lassen? Wäre sehr dankbar wenn mir jemand weiterhelfen könnte

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...