Beliebiges positionieren von Message-Boxen ist schon möglich. Du musst lediglich in die Windows-Prozedur einhaken:
// Hook setzen
hhookOld = SetWindowsHookEx(WH_CBT, my_CBTHook, 0, GetCurrentThreadId());
MessageBox( 0,"Bestehende Verbidnung",0,MB_OK|MB_ICONEXCLAMATION|MB_SYSTEMMODAL );
// wieder auf alten Hook zurücksetzen
UnhookWindowsHookEx(hhookOld);
my_CBTHook muss dabei folgender Konvension entsprechen:
LRESULT CALLBACK CBTProc(
int nCode,
WPARAM wParam,
LPARAM lParam
);
In der Hookfunktion musst dann lediglich auf die Nachricht HCBT_CREATEWND reagieren. Diese wird gesendet nachdem das Fenster erzeugt wurde, aber noch vor deren eigentlichen Create-Message. Lässt sich alles in der MSDN nachlesen.
code: HCBT_CREATEWND
wParam: Handle auf das neue Fenster
lParam: Long-Pointer auf eine CBT_CREATEWND-Struktur, die alle Informationen für das zu erstellende Fenster enthält. Durch das Ändern der Daten in der enthaltenen CREATESTRUCT kann dann z. B. die Position geändert werden.
Zum erkennen, dass eine MessageBox angezeigt werden soll können die Style-Bits auf WS_DLGFRAME und WS_POPUP überprüft werden.
Viele Grüße
Thomas
geschrieben von
MrTommek
,
15.12.2005, 16:27 Uhr
, 34 mal gelesen