Alle Fenster von Windows passend positionieren lassen?
-
Hi Leute, entschuldigt den konfusen Titel aber mir ist nichts bessres eingefalln
also ich komm gleich zur Sache:Ich brauche eine Funktion die Windows veranlasst alle geöffneten Fenster richtig zu positionieren(besser: ihre größe zu verändern) wenn sich der Anwendungsbereich verändert hat (also zum Beispiel die taskleiste höher geworden ist oder eine neue Symbolleiste irgendwo gedockt worden ist...).
UpdateWindow() klappt nicht, aber wenn ich alle Fenster minimiere und wieder maximiere hat windows die veränderung bemerkt (nur JEDES fenster zu minimieren und widerherzustellen ist ein ganz schöner aufwand und es flackert auch ungut)
pfuu, ich hoffe mich hat jetzt IRGENDWER verstanden...
thx schonmal für eure hilfe
-
Versuch 'mal eine
WM_SETTINGCHANGE zu senden.Greetz, Swordfish
-
Jo also wenn du es so wie Swordfish machst, würd ich bei Send -bzw. PostMessage den Handle-Parameter auf HWND_BROADCAST setzen, damit bekommen alle Fenster ne Message.
Oder du machst ne Fenster-Enumeration mit:
- EnumWindows
bzw.
- EnumWindowsProc
-
thx, ich werds gleich mal probieren
-
hmm, klappt nicht. Allerdings war mir auch nicht ganz klar, was ich als wParam(SPI_GETWORKAREA oder SPI_SETWORKAREA?) und lParam("intl" oder "environment") übergeben soll.
Ich schreib einfach mal den derzeitigen aufruf hin:
SystemParametersInfo( SPI_SETWORKAREA, 0, &nwork, 0 ); SendMessageTimeout( HWND_BROADCAST, WM_SETTINGCHANGE, 0, //?? NULL, //?? SMTO_NORMAL, 500, &dwres);dwres ist nach dem aufruf übrigens 0, markiert also das das Senden gutgegangen ist.
-
Nicht getestet aber probier mal (
nur
) das:RECT rcNewWorkArea; rcNewWorkArea.left = ...; // rcNewWorkArea initialisieren // ... SystemParametersInfo(SPI_SETWORKAREA, 0, &rcNewWorkArea, SPIF_SENDCHANGE);
-
hmm obwohl SPIF_SENDCHANGE und auch die broadcast message mit WM_SETTINGCHANGE laut msdn genau das machen sollten was ich brauche und die entsprechenden Funktionen auch problemlos ablaufen(=> liefern allesamt 0), funktionierts nicht...
Die Fenster bleiben so wie sie sind, erst wenn ich sie minimiere und wieder maximiere macht sich der veränderte anwendungsbereich bemerkbar...

-
DeX3 schrieb:
[...]die entsprechenden Funktionen auch problemlos ablaufen(=> liefern allesamt 0), funktionierts nicht...
MSDN schrieb:
Return Values
If the function succeeds, the return value is nonzero.Kurz: Der Aufruf geht also schief...hol dir mal n Info-String über GetLastError und FormatMessage.
siehe:
LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); // Process any inserts in lpMsgBuf. // ... // Display the string. MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION ); // Free the buffer. LocalFree( lpMsgBuf );
-
DeX3 schrieb:
[...] und die entsprechenden Funktionen auch problemlos ablaufen(=> liefern allesamt 0)
*lol*

*scnr*
Greetz, Swordfish
-
rofl, manchmal wundere ich mich über meine eigene blödheit. sry für den fehler. ich meinte, sie liefern alle 1 und nicht 0
hatte das ganze in ner if stehen, das hat mich wohl etwas verwirrt lol 
sry...