ShowWindow()
-
Hallo,
ich habe in meinem Programm 2 Fenster. Ein Hauptfenster und ein Nebenfenster. auf dem Hauptfenster gibt es verschiedene Bereiche, wenn man auf die klickt wird das Nebenfenster geöffnet.
Ich habe mal einen bisschen mit rumgespielt, und festgestellt, dass wenn ich auf einen der Bereiche klicke, geht das Fenster auf, ich schließe es wieder, klicke wieder auf einen der Bereiche und es passiert nichts. Hier der Code:Hauptfenster:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; static HDC hdc; int x, y; .... .... .... .... switch (message) { case WM_LBUTTONDOWN: x = LOWORD( lParam ); y = HIWORD( lParam ); if(x>=10 && x <= 160 && y>=10 && y<=110) { fieldClicked(1); } else if(x>=10 && x <= 160 && y>=110 && y<=220) { fieldClicked(2 ); } else if(x>=10 && x <= 160 && y>=220 && y<=330) { fieldClicked(3 ); } else if(x>=10 && x <= 160 && y>=330 && y<=440) { fieldClicked(4 ); } else if(x>=10 && x <= 160 && y>=440 && y<=550) { fieldClicked(5 ); } else if(x>=160 && x <= 310 && y>=10 && y<=110) { fieldClicked(6 ); } else if(x>=160 && x <= 310 && y>=110 && y<=220) { fieldClicked(7 ); } else if(x>=160 && x <= 310 && y>=220 && y<=330) { fieldClicked(8 ); } else if(x>=160 && x <= 310 && y>=330 && y<=440) { fieldClicked(9 ); } else if(x>=160 && x <= 310 && y>=440 && y<=550) { fieldClicked(10 ); } else if(x>=310 && x <= 460 && y>=10 && y<=110) { fieldClicked(11 ); } else if(x>=310 && x <= 460 && y>=110 && y<=220) { fieldClicked(12 ); } else if(x>=310 && x <= 460 && y>=220 && y<=330) { fieldClicked(13 ); } else if(x>=310 && x <= 460 && y>=330 && y<=440) { fieldClicked(14 ); } else if(x>=310 && x <= 460 && y>=440 && y<=550) { fieldClicked(15 ); } else if(x>=460 && x <= 610 && y>=10 && y<=110) { fieldClicked(16 ); } else if(x>=460 && x <= 610 && y>=110 && y<=220) { fieldClicked(17 ); } else if(x>=460 && x <= 610 && y>=220 && y<=330) { fieldClicked(18 ); } else if(x>=460 && x <= 610 && y>=330 && y<=440) { fieldClicked(19 ); } else if(x>=460 && x <= 610 && y>=440 && y<=550) { fieldClicked(20 ); } else if(x>=610 && x <= 760 && y>=10 && y<=110) { fieldClicked(21 ); } else if(x>=610 && x <= 760 && y>=110 && y<=220) { fieldClicked(22 ); } else if(x>=610 && x <= 760 && y>=220 && y<=330) { fieldClicked(23); } else if(x>=610 && x <= 760 && y>=330 && y<=440) { fieldClicked(24); } else if(x>=610 && x <= 760 && y>=440 && y<=550) { fieldClicked(25); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; } return 0; }
Nebenfenster:
LRESULT CALLBACK ChangeProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; static HDC hdc; std::ostringstream oss; std::string Feld("leer"); static int iFeld = 0; switch (message) { case WM_CREATE: break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); oss << iFeld; Feld = oss.str(); TextOutA(hdc, 10, 10, Feld.c_str(), Feld.length()); EndPaint(hWnd, &ps); break; case WM_DESTROY: ShowWindow(hWnd, SW_HIDE); UpdateWindow(hWnd); break; case WM_USER+1: iFeld = LOWORD(wParam); UpdateWindow(hWnd); SendMessage(hWnd, WM_PAINT, NULL, NULL); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; } return 0; }
fieldClicked():
void fieldClicked(int Field) { ShowWindow(hWndChange, SW_SHOW); SendMessage(hWndChange, WM_USER+1, Field, NULL); }
Kann mir jemand weiterhelfen?
Danke schonmal!!
-
Bitte ich brauche eine Antwort! Wenn ihr das Problem nicht genau versteht dann sagt es, ich versuche es dann genauer zu erklären.
-
Ersetz mal:
case WM_DESTROY: ShowWindow(hWnd, SW_HIDE); UpdateWindow(hWnd); break;
durch:
case WM_CLOSE: ShowWindow(hWnd, SW_HIDE); UpdateWindow(hWnd); break;
-
Danke, funktioniert!
-
Dacht ichs doch
-
Ich will jetzt nicht gleich nen neuen Thread aufmachen:
Kennst du auch ne Funktion mit der ich ein Fenster einfriere? (So wie bei einer MessageBox).
-
Keine Ahnung, was Du meinst, was ist bei einer MB eingefroren?
-
Wenn man beim Handle, also beim ersten Parameter was eingibt (Parent), dann wird das Fenster solange "eingefroren", bis die MB weg ist. (OK oder was auch immer)
-
Stichwort modaler Dialog (Fkt DialogBox/DialogBoxParam).
-
Danke für die Hilfe, aber habe eben EnableWindow() gefunden, das tuts auch
-
Hast du bei deinen Nebenfenstern das Hauptfenster als Parent angegeben ?
Dann sollte das Hauptfenster nämlich automatisch deaktiviert werden wenn das Nebenfenster offen ist ..