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.


Anmelden zum Antworten