Button-Farbe ändern



  • Hallo!

    Wüsste gerne, ob und wenn ja, wie ich die Farbe eines Buttons in MFC ändern
    kann...
    Ich kenne nur die Möglichkeit, die Hintergrundfarbe des Dialogs zu ändern.

    😃 Gruss & Merci



  • Den hintergrund kannst über die WM_CTLCOLORBTN bemhalen, wenn du mehr willst als nur den hintergrund, fange die WM_DRAWITEM ab und las deiner künstlerischen Ader freien lauf 😃



  • Ich bin im Klassenassistenten auf meinen Button und hab ihm WM_DRAWITEM hinzugefügt.
    Das schaut bei mir so aus:

    void Cclass_2_login::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemstruct)
    {
    //TODO
    CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
    
    }
    

    War das richtig? (Anmerkung: Ich hab leider keine Ahnung...)

    Was muss ich weiter tun?

    😡 thanks chaos.sb



  • Wie wars mit MSDN aufschlagen 😉
    Ist fast immer auch ein nettes Beispiel dabei wie z.B:

    BOOL CALLBACK OwnDrawProc(HWND hDlg, UINT message, WPARAM wParam, 
                              LPARAM lParam) 
    { 
        HDC hdcMem; 
        LPDRAWITEMSTRUCT lpdis; 
    
        switch (message) 
        { 
            case WM_INITDIALOG: 
    
                // hinst, hbm1 and hbm2 are defined globally. 
                hbm1 = LoadBitmap((HANDLE) hinst, "OwnBit1"); 
                hbm2 = LoadBitmap((HANDLE) hinst, "OwnBit2"); 
                return TRUE; 
    
            case WM_DRAWITEM: 
                lpdis = (LPDRAWITEMSTRUCT) lParam; 
                hdcMem = CreateCompatibleDC(lpdis->hDC); 
    
                if (lpdis->itemState & ODS_SELECTED)  // if selected 
                    SelectObject(hdcMem, hbm2); 
                else 
                    SelectObject(hdcMem, hbm1); 
    
                // Destination 
                StretchBlt( 
                    lpdis->hDC,         // destination DC 
                    lpdis->rcItem.left, // x upper left 
                    lpdis->rcItem.top,  // y upper left 
    
                    // The next two lines specify the width and 
                    // height. 
                    lpdis->rcItem.right - lpdis->rcItem.left, 
                    lpdis->rcItem.bottom - lpdis->rcItem.top, 
                    hdcMem,    // source device context 
                    0, 0,      // x and y upper left 
                    32,        // source bitmap width 
                    32,        // source bitmap height 
                    SRCCOPY);  // raster operation 
    
                DeleteDC(hdcMem); 
                return TRUE; 
    
            case WM_COMMAND: 
                if (wParam == IDOK 
                    || wParam == IDCANCEL) 
                { 
                    EndDialog(hDlg, TRUE); 
                    return TRUE; 
                } 
                if (HIWORD(wParam) == BN_CLICKED) 
                { 
                    switch (LOWORD(wParam)) 
                    { 
                        case IDC_OWNERDRAW: 
    
                            // application-defined processing 
    
                            break; 
                    } 
                } 
                break; 
    
            case WM_DESTROY: 
                DeleteObject(hbm1);  // delete bitmaps 
                DeleteObject(hbm2); 
    
                break; 
    
        } 
        return FALSE; 
            UNREFERENCED_PARAMETER(lParam); 
    }
    

    ^^ Das verbaust du dann natlich MFC gerecht 😉


Anmelden zum Antworten