Ich habe ein Problem mit der Erzeugung eines transparenten Overlays
für ein Fenster einer Applikation. Ich programmiere übrigens in C++...
Ich suche ein Fenster, z.B. Notepad und erzeuge ein Fenster
(transparent) mit einigen Controls und lege es als Overlay darüber.
Der Code dazu:
<code>
// set this window to transparent
void COverlayContainer::MakeTransparent()
{
#ifdef __WXMSW__
::SetWindowLong(GetHwnd(), GWL_EXSTYLE, GetWindowLong(GetHwnd(),
GWL_EXSTYLE) | WS_EX_LAYERED);
::SetLayeredWindowAttributes(GetHwnd(), RGB(255,0,255), wxGetApp
().alpha, LWA_COLORKEY | LWA_ALPHA);
::SetWindowLongPtr(GetHwnd(),GWLP_HWNDPARENT,(long)GetParentHWND());
m_EasyDataPopup->SetTransparent((wxByte) wxGetApp().alpha);
FitToParent(true);
#endif
}
</code>
GetHwnd() = Mein transparentes Fenster, GetParentHWND() = fremdes
Fenster
Unter XP ist das kein Problem, unter Vista jedoch werden die
ChildWindows des Fensters welches ich unter mein Overlay sortiere
nicht mehr angezeitgt, bzw. erst dann wenn ich das fremde Fenster
etwas bewege. Erscheint z.B. eine MessageBox in dem fremden Fenster
(GetParentHWND) und mein Overlay ist darüber, muß ich einfach die
Titelleiste anklicken, dann erscheinen Teile der MessageBox, z.B. nur
der OK-Button. Nach nochmaligem anklicken mit bewegen ist dann die
komplette MessageBox zu sehen.
Gibt es einen Weg dieses zu unterbinden?
Wäre sehr nett wenn mir jemand helfen könnte.
Vielen Dank!
Jens S.