Problem bei MoveWindow mit 2 Statics
-
Und wieder mal habe ich eine Frage.
Hier kommt erstmal der Quelltext:LRESULT CALLBACK WndProc (HWND hWnd1, UINT message, WPARAM wParam, LPARAM lParam) { static HANDLE hBitmap; static HWND static_image; static HANDLE hBack; static HWND static_back; int field_x = 50; int field_y = 50; switch (message) { case WM_CREATE: hBack = LoadImage (GetModuleHandle (NULL), "back.ico", IMAGE_ICON, NULL, NULL, LR_DEFAULTCOLOR | LR_LOADFROMFILE); //Hintergrund laden static_back = CreateWindow ("static", NULL, WS_VISIBLE | WS_CHILD | SS_ICON, field_x, field_y, 500, 500, hWnd1, NULL, GetModuleHandle (NULL), NULL); SendMessage (static_back, STM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM)(HANDLE) hBack); hBitmap = LoadImage (GetModuleHandle (NULL), "up.ico", IMAGE_ICON, NULL, NULL, LR_DEFAULTCOLOR | LR_LOADFROMFILE); //Figurbild laden static_image = CreateWindow ("static", NULL, WS_VISIBLE | WS_CHILD | SS_ICON, 125, 125, NULL, NULL, hWnd1, NULL, GetModuleHandle (NULL), NULL); SendMessage (static_image, STM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM)(HANDLE) hBitmap); return 0; case WM_KEYUP: switch (wParam) { case VK_ESCAPE: PostQuitMessage (0); return 0; case VK_UP: if (field_y <= 125) { field_y += 25; MoveWindow (static_back, field_x, field_y, 500, 500, true); MoveWindow (static_image, 125, 125, NULL, NULL, true); } hBitmap = LoadImage (GetModuleHandle (NULL), "up.ico", IMAGE_ICON, NULL, NULL, LR_DEFAULTCOLOR | LR_LOADFROMFILE); SendMessage (static_image, STM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM)(HANDLE) hBitmap); return 0; case VK_DOWN: if (field_y >= 0) { field_y -= 25; MoveWindow (static_back, field_x, field_y, 500, 500, true); ShowWindow (static_image, SW_SHOWNORMAL); } hBitmap = LoadImage (GetModuleHandle (NULL), "down.ico", IMAGE_ICON, NULL, NULL, LR_DEFAULTCOLOR | LR_LOADFROMFILE); SendMessage (static_image, STM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM)(HANDLE) hBitmap); return 0; case VK_LEFT: if (field_x <= 125) { field_x += 25; MoveWindow (static_back, field_x, field_y, 500, 500, true); MoveWindow (static_image, 125, 125, NULL, NULL, true); } hBitmap = LoadImage (GetModuleHandle (NULL), "left.ico", IMAGE_ICON, NULL, NULL, LR_DEFAULTCOLOR | LR_LOADFROMFILE); SendMessage (static_image, STM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM)(HANDLE) hBitmap); return 0; case VK_RIGHT: if (field_x >= 0) { field_x -= 25; MoveWindow (static_back, field_x, field_y, 500, 500, true); MoveWindow (static_image, 125, 125, NULL, NULL, true); } hBitmap = LoadImage (GetModuleHandle (NULL), "right.ico", IMAGE_ICON, NULL, NULL, LR_DEFAULTCOLOR | LR_LOADFROMFILE); SendMessage (static_image, STM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM)(HANDLE) hBitmap); return 0; } return 0; case WM_DESTROY: DeleteObject (hBitmap); DeleteObject (hBack); PostQuitMessage (0); return 0; } return DefWindowProc (hWnd1, message, wParam, lParam); }Folgendes Problem: Wenn ich jetzt z.B. die Linke Pfeiltaste drücke, geht das Feld wie gewünscht weiter. Allerdings bleibt die Figur nicht an ihrem Ursprungsort, sondern sie geht mit dem Hintergrund mit. Außerdem ist sie nur noch in Bruchstücken sichtbar. Zusätzlich zu diesem Problem lässt sich der Hintergrund auch nur einmal in jede Richtung verschieben. Ich vermute, dass das an der Funktion MoveWindow() liegt, aber ich weiß nicht, wie ich das Problen beheben kann. Ich hoffe ihr habt mich einigermaßen verstanden.
Mfg Ominion
-
Ist das eigentlich festgelegt, welches Fenster zuerst gezeichnet wird?
-
Zuerst wird das Fenster mit dem Hintergrund und dann das Fenster mit der Figur geladen.