ShowWindow & MoveWindow
-
Servus!
Folgendes: Kadha_Controls ist ein Singleton, und hat Methoden zum Erstellen und Resizen der Controls, die in meinem Programm benötigt werden, das funktioniert auch alles bestens. Da ich nicht alle Controls auf einmal anzeigen will, verstecke ich sie anfangs mit ShowWindow(hControl,SW_HIDE), und per Button lass ich sie dann anzeigen, mit ShowWindow(hControl,SW_SHOW). Ich lasse das Fenster am Anfang maximiert darstellen, wenn ich jetzt aber die Größe verändere, dann wird eins meiner Controls nicht mehr angezeigt.
Hier ein paar Code-Ausschnitte:
// main.cpp // ... case WM_SIZE: { // Controls der neuen Fenstergröße anpassen Kadha_Controls::Exemplar()->ResizeControls(hWnd); return 0; } break; case WM_CREATE: { // Controls erstellen Kadha_Controls::Exemplar()->CreateControls(hInst,hWnd); return 0; } break; // ... // kadha_controls.cpp // ... void Kadha_Controls::CreateControls(HINSTANCE hInst,HWND hParent) { // Toolbar erstellen TBBUTTON tbButtons[] = { {0,MENU_KADHA_CONNECT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0}, {1,MENU_KADHA_DISCONNECT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0}, {0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0}, {2,MENU_HOME,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0}, {3,MENU_SEARCH,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0}, {4,MENU_TRAFFIC,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0} }; m_hToolbar = CreateToolbarEx(hParent,WS_CHILD | WS_BORDER | WS_VISIBLE,KADHA_TOOLBAR_ID,5,hInst,KADHA_TOOLBAR,tbButtons,sizeof(tbButtons) / sizeof(TBBUTTON),32,32,32,32,sizeof(TBBUTTON)); // Statusbar erstellen m_hStatusbar = CreateWindowEx(0,STATUSCLASSNAME,TEXT("Welcome to Kadha!"),WS_CHILD | WS_BORDER | WS_VISIBLE | SBS_SIZEGRIP,0,0,0,0,hParent,(HMENU) KADHA_STATUSBAR_ID,hInst,0); // Browser-Control erstellen und verstecken m_hBrowser = CreateWindowEx(0,TEXT("AtlAxWin"),TEXT("{8856F961-340A-11D0-A96B-00C04FD705A2}"),WS_CHILD | WS_BORDER | WS_VISIBLE,0,0,0,0,hParent,(HMENU) KADHA_BROWSER_ID,hInst,0); ShowWindow(m_hBrowser,SW_HIDE); // Gleich auf die Startseite navigieren IUnknown *pUnk = 0; AtlAxGetControl(m_hBrowser,&pUnk); VARIANTARG var; VariantInit(&var); var.vt = VT_BSTR; var.bstrVal = SysAllocString(TEXT("http://www.esel.de/frameset.html")); CComDispatchDriver pDisp(pUnk); pDisp.Invoke1(TEXT("Navigate"),&var); VariantClear(&var); pUnk->Release(); // Controls der Fenstergröße anpassen Kadha_Controls::Exemplar()->ResizeControls(hParent); // Home anzeigen Kadha_Controls::Exemplar()->ShowPage(SHOW_HOME); } // ------------------------------------------------------------------------------------------- // void Kadha_Controls::ResizeControls(HWND hParent) { // Größe des Clientfensters ermitteln RECT rcClient; GetClientRect(hParent,&rcClient); // Größe der Toolbar ermitteln RECT rcToolbar; GetWindowRect(m_hToolbar,&rcToolbar); // Größe der Statusbar ermitteln RECT rcStatusbar; GetWindowRect(m_hStatusbar,&rcStatusbar); // Controls anpassen SendMessage(m_hToolbar,TB_AUTOSIZE,0,0); // Toolbar MoveWindow(m_hStatusbar,0,rcClient.bottom - rcClient.bottom - 10,rcClient.right - rcClient.left,16,TRUE); // Statusbar MoveWindow(m_hBrowser,5,rcToolbar.bottom - rcToolbar.top + 5,rcClient.right - rcClient.left - 10,rcClient.bottom - rcClient.top - 20 - rcStatusbar.bottom - rcStatusbar.top,TRUE); // Browser-Control } // ------------------------------------------------------------------------------------------- // // ShowPage versteckt die Controls, die nicht angezeigt werden sollen void Kadha_Controls::ShowPage(UINT uPageID) { switch(uPageID) // Welche Seite? { case SHOW_HOME: // Home { ShowWindow(m_hBrowser,SW_SHOW); // Browser anzeigen } break; case SHOW_SEARCH: // Search { ShowWindow(m_hBrowser,SW_HIDE); // Browser verstecken } break; case SHOW_TRAFFIC: // Traffic { ShowWindow(m_hBrowser,SW_HIDE); // Browser verstecken } break; } } // ...
Also, es wird am Anfang alles richtig angezeigt, nur wenn ich die Größe des Fensters verändere, dann wird m_hBrowser nicht mehr angezeigt. Könnt ihr mit helfen?
In der Hoffnung, dass ich das Problem verständlich erklärt habe...
thx & cu
-
Wisst ihr wirklich nicht, was da falsch ist?
cu
-
Kannst du das nicht einfacher erklären oder veranschaulichen?
-
Ich versuch's, also:
Zuerst zur Klasse Kadha:
1. 'CreateControls' erstellt die Controls
2. 'ResizeControls' passt die Controls an die Fenstergröße an
3. 'ShowPage' regelt die Anzeige der Controls, also welche Controls angezeigt werden, und welche versteckt werden'CreateControls' wird in WM_CREATE aufgerufen, 'ResizeControls' in WM_SIZE und 'ShowPage', wenn der User auf einen dafür vorgesehen Button klickt.
Nun zum Problem:
Das Programm funktioniert bestens, wenn man das Fenster maximiert lässt. Wenn man aber die Größe des Fensters ändert, dann verschwindet das Browser-Control (m_hBrowser).Ich hoffe ich hab's jetzt einigermaßen gut erklärt.
thx & cu
-
Kann man den Sourcecode dazubekommen? Stell den doch mal auf deine Homepage. Und finde mal heraus woran es liegt! Kommt das nur beim Browsercontrol? Wenn du stattdessen z.B. einen Button nimmst, verschwindet der auch? Versuche alles unnütze aus dem Code rauszunehmen und gib uns ein Testprojekt was nur Code erhält der zum Zeigen des Fehlers nötig ist. :p
-
OK, ich schau mal...
thx & cu
-
*freu* jetzt funzt es! Es lag an meiner Berechnung der Größe von dem Control.
thx & cu