CButton farbiger Hintergrund wird nich ausgeführt



  • Hallo Leute,

    folgender Code wird nicht ausgeführt:

    HBRUSH CDL_mobileDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    { 
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
    
        // Button rot machen
        if(pWnd->GetDlgCtrlID() == IDC_BUTTON_DELETE) 
        { 
            hbr = CreateSolidBrush(RGB(0,255,255));
            pDC->SetBkMode(TRANSPARENT);
    		return hbr; 
        }
        // Button gelb machen 
        if(pWnd->GetDlgCtrlID() == IDC_BUTTON_CLEAR) 
        { 
            hbr = CreateSolidBrush(RGB(255,0,0));//Button soll dunkelrot werden 
            pDC->SetBkMode(TRANSPARENT);
            return hbr; 
        } 
        else 
        return hbr; 
    }
    

    In der Header Datei steht:

    HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    

    Der Code wird nie erreicht. Der Debugger hält am gesetzten Haltepunkt nicht an. Hat jemand nen Tipp für mich, was da falsch läuft?

    Vielen Dank schonmal

    Ranger



  • ON_WM_CTLCOLOR()
    Hast du auch?



  • Danke!

    Es müsste einen Apperat geben, der einem eine vor die Stirn Klatscht bei sowas!
    *Klatsch*

    Viele Grüße und vielen Dank,

    Ranger



  • Glasgow_Ranger schrieb:

    HBRUSH CDL_mobileDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    { 
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
        
        // Button rot machen
        if(pWnd->GetDlgCtrlID() == IDC_BUTTON_DELETE) 
        { 
            hbr = CreateSolidBrush(RGB(0,255,255));
            pDC->SetBkMode(TRANSPARENT);
    		return hbr; 
        }
        // Button gelb machen 
        if(pWnd->GetDlgCtrlID() == IDC_BUTTON_CLEAR) 
        { 
            hbr = CreateSolidBrush(RGB(255,0,0));//Button soll dunkelrot werden 
            pDC->SetBkMode(TRANSPARENT);
            return hbr; 
        } 
        else 
        return hbr; 
    }
    

    Entferne das CreateSolidBrush aus der OnCtlColor Sonnst wird dein Programm nicht lange laufen. Jedesmal wenn die OnCtlColor durchlaufen wird und einer der beiden Button betroffen ist, erstellt er eine neuen Brush und vergibt ein Handle, welches aber nicht mehr freigegeben wird. Erstell also beim Konstruieren des Windows/Dialog die beiden Brush und gib in der OnCtlColor nur das Handle des jeweiligen zurück. Beachte Handle sind begrenzt und um das aufräumen muß du dich selbst kümmern.

    Gruß Matthias


Anmelden zum Antworten