Schrifthintergrund in Groupbox ändern?



  • ich habe auf einen Tab Control eine Group Box plaziert - leider hat der Text eine andere Hintergrundfarbe als das Tab Control:
    http://turing.fh-landshut.de/~jamann/groupbox.PNG

    wie kann ich die Hintergrund-Text-Farbe der Group Box ändern?



  • Hi,

    Indem du WM_CTLCOLORBTN in der Nachrichten-Prozedur deines Parent-Fensters abfängst (Ich gehe mal davon aus, das es ein Dialog ist):

    Zum Beispiel so:

    case WM_CTLCOLORBTN:
        if(reinterpret_cast<HWND>(lParam) == GetDlgItem(hDlg, GROUPBOX_ID))
        {
            SetBkMode(reinterpret_cast<HDC>(wParam), TRANSPARENT);
            // hbBkgndBrush ist der Brush, mit dem der Hintergrund gefüllt werden soll:
            return (reinterpret_cast<INT_PTR>(hbBkgndBrush));
        }
        return (FALSE);
    


  • ich benutze keinen Dialog sondern nur reine WinAPI

    m_hWnd = CreateWindowEx (0, L"BUTTON", m_Text.c_str(), WS_VISIBLE | WS_CHILD | BS_GROUPBOX,
    this->getX(), getY(), getWidth(), getHeight(), hWnd,
    (HMENU) NULL, (HINSTANCE) GetModuleHandle (NULL), NULL);
    
    HDC hdc = GetDC(m_hWnd);
    
    assert(hdc);
    
    if(hdc)
    {
    	int result = SetBkMode(hdc, OPAQUE/*TRANSPARENT*/); 
    	assert(result != 0);
    	SetBkColor(hdc, RGB(255,0,0));
    	DeleteDC(hdc);
    }
    
    SendMessage(m_hWnd, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0);
    

    Der Schrifthintergrund ist nicht rot - sondern immer noch grau...? Wahrscheinlich liegt das an der DEFAULT_GUI_FONT - die übermalt mir vielleicht meinen roten Hintergrund...?



  • Vertexwahn schrieb:

    ich benutze keinen Dialog sondern nur reine WinAPI

    m_hWnd = CreateWindowEx (0, L"BUTTON", m_Text.c_str(), WS_VISIBLE | WS_CHILD | BS_GROUPBOX,
    this->getX(), getY(), getWidth(), getHeight(), hWnd,
    (HMENU) NULL, (HINSTANCE) GetModuleHandle (NULL), NULL);
    
    HDC hdc = GetDC(m_hWnd);
    
    assert(hdc);
    
    if(hdc)
    {
    	int result = SetBkMode(hdc, OPAQUE/*TRANSPARENT*/); 
    	assert(result != 0);
    	SetBkColor(hdc, RGB(255,0,0));
    	DeleteDC(hdc);
    }
    
    SendMessage(m_hWnd, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0);
    

    Der Schrifthintergrund ist nicht rot - sondern immer noch grau...? Wahrscheinlich liegt das an der DEFAULT_GUI_FONT - die übermalt mir vielleicht meinen roten Hintergrund...?

    Nein so geht das auch nicht! ...Dein Fenster wird von Windows (da es sich um ein Std-Control handelt) immer dann darüber informiert
    (mit WM_CTLCOLORBTN), wenn es gezeichnet werden muss. Da und NUR da kannst du also die Werte ändern. Dein Button den du da oben erstellsts hat doch ein Parent-Fenster 'hWnd', in deren WndProc du doch den Msg-Handler einbauen kannst.



  • @Vertexwahn
    LOL nee ne? Sag mal was lernt ihr da an der Uni? Nichts?!

    Ob man nun einen Dialog benutzt oder reine WinAPI ist doch total egal 😃 Dialoge sind auch Fenster. Ouhm man ey...



  • @##########

    sollen wir mal einen Vergleich ansellen wer mehr drauf hat 😉 - jeder zeigt sein programmierten Projekte her und dann lassen wir die Leute abstimmen wers besser drauf hat 😉 - praktisch so ein Programmierer Battle


Anmelden zum Antworten