Static transparent machen
-
Moin moin,
ich habe in meinem kleinen Programm dem Hintergrund ein Bitmap zugewiesen.
HBITMAP hBitmap; HBRUSH hBrush; hBitmap=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_ARKROYAL)); hBrush=CreatePatternBrush(hBitmap); DeleteObject(hBitmap); wnd.hbrBackground=hBrush;(WHITE_BRUSH);nun wollte ich die Statics transparent machen, aber die Lösungen, die ich hier im Forum gefunden habe funktionieren nicht.
case WM_CTLCOLORSTATIC: //Message abfangen SetTextColor((HDC)wParam,RGB(255,255,255));//weiß SetBkMode((HDC)wParam,TRANSPARENT);//farblos return (LRESULT)GetStockObject(NULL_BRUSH);//kein HBRUSH zurückgeben(habe ich aus dem FAQ)
Die Statics sind zwar jetzt Transparent, aber wenn ich den Text ändere überschreibt er nur den alten Text.
Danke im voraus
-
Update mal das darunterliegende Fenster
-
Thx das funktioniert.
-
ich habe bei einem ähnlichen problem den obigen code benutzt um die textfarbe des statics zu ändern. da der code in der switch-funktion zum abfangen der WM_CTLCOLORSTATIC vorkommt und diese funktion boolische rückgabewerte erwartet, gibt der compiler häßliche warnungen aus. wie kann man dieses unschöne problem lösen?
-
Welche Funktion erwartet einen boolschen Rückgabewert?!

-
Diesen Code meine ich in etwa. Da meckert der compiler, dass
return (LRESULT)GetStockObject(NULL_BRUSH);mist wäre...
BOOL CALLBACK DlgMainProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_CTLCOLORSTATIC: switch(GetDlgCtrlID((HWND)lParam)) { case IDC_LBLINFO: SetBkMode((HDC)wParam,TRANSPARENT); // Texthintergrund auf transparent setzen SetTextColor((HDC)wParam,RGB(0,0,255)); // Textfarbe auf Weiss setzen return (LRESULT)GetStockObject(NULL_BRUSH); //kein HBRUSH zurückgeben break; default: return false; } break; } }Wie kann man diesen Abschnitt "schöner" schreiben? Oder kann man sogar verhindern, dass ich in der zweiten switch-funktion nicht so übelviele case-blöcke für jedes static habe?
so long
eagle2k
-
Bekommst du in der DlgMainProc überhaupt WM_CTLCOLORSTATIC - evtl. bekommst du das auch nur bei "normalen" Fenstern

-
also funktionieren tut es ganz gut. bis auf die warnings
-
Evtl. kümmert er sich auch gar nich um GetStockObject - funktionierts denn acuh nur mit SetBkMode?!

Ansonten einfach (LRESULT) durch (BOOL) ersetzen
-
funktioniert auch, aber dann nervt er mit Zeigerverkuerzung von 'HGDIOBJ' zu 'BOOL', was irgendwie nicht besser is

-
Vielleicht kannst du die Warnung durch ein reinterpret_cast<BOOL> wegbekommen - ansonsten ignorieren oder das Warnungs-Level des Compilers/IDE erhöhen

If a dialog box procedure handles this message, it should cast the desired return value to a BOOL and return the value directly.