O Are değil sahibi çizilmiş düğmelerini kullanma

Bu bölümde aşağıdaki çizimde gösterilen iletişim kutusunu pencere yordamı örnektir.

Onay kutuları ve radyo düğmeleri düğmeler iletişim kutusunda otomatik. Üç durumlu onay kutularıdır. Açık renkler düğmesi varsayılan düğme olduğunu. Onay kutuları, radyo düğmeleri ve Basma düğmelerini kullanma, üstbilgi dosyasında aşağıdaki gibi tanımlanır.

# define IDC_BOX1 101 / / ilk onay kutusu # IDC_BOX2 102 tanımlamak / / saniye onay kutusunu # define IDC_BOX3 103 / / üçüncü onay kutusu # IDC_REDBACK 104 tanımlamak / / en iyi radyo düğmesini # define IDC_BLUEBACK 105 / / alt radyo düğmesini # define IDC_CLEARBOXES 107 / / üst düğme # define IDC_CLEARBACK 108 / / alt basma düğmesi 

 

Bu denetimlerden herhangi birini tıklatarak bir değişiklik kutularına 1, 2 ve 3 olur. İlan ve boya kutuları 1, 2 ve 3 için aşağıdaki işlev tanımlamak gerekir.

void BoxPainter (hwnd hDlg, / / pencere kolu UINT uBox, / / lresult lState boya kutusu);  / / kutu devlet

 

Pencere aşağıdaki yordamda, wm_ctlcolordlg ileti iletişim kutusunda yaklaşık çekilecek olan uygulamanın bildirir. Kullanıcı (fClearColor bayrağıyla miktarlara) Açık renk düğmesine basarsa, yordamı uncheck onay kutuları ve radyo düğmeleri için SendDlgItemMessage işlevini kullanır. BN_CLICKED bildirim iletisi tıklayan düğmeyi tanımlayıcılarını içerir.

HBRUSH hbrRed, hbrBlue, hbrWhite; 
BOOL fRedBack, fBlueBack, fClearColor;  // background-state flags 

BOOL CALLBACK ButtonProc(HWND hDlg, UINT message, WPARAM wParam, 
                         LPARAM lParam) 
{ 
    LRESULT lState; 
 
    switch (message) 
    { 
        case WM_INITDIALOG: 
            hbrRed = CreateSolidBrush(RGB(255, 0, 0)); 
            hbrBlue = CreateSolidBrush(RGB(0, 0, 255)); 
            hbrWhite = GetStockObject(WHITE_BRUSH); 
            return TRUE; 
 
        case WM_CTLCOLORDLG: 
            if (fRedBack) 
            { 
                fRedBack = FALSE; 
                return (LRESULT) hbrRed; 
            } 
            else if (fBlueBack) 
            { 
                fBlueBack = FALSE; 
                return (LRESULT) hbrBlue; 
            } 
            else if (fClearColor) 
            { 
                fClearColor = FALSE; 
 
                // Uncheck all check boxes and radio buttons. 
                SendDlgItemMessage(hDlg,  // window handle 
                    IDC_BOX1,             // button identifier 
                    BM_SETCHECK,          // message 
                    0,                    // check state unchecked) 
                   0);                   // must be zero 
                SendDlgItemMessage(hDlg, IDC_BOX2, BM_SETCHECK, 0, 0); 
                SendDlgItemMessage(hDlg, IDC_BOX3, BM_SETCHECK, 0, 0); 
                SendDlgItemMessage(hDlg,IDC_REDBACK,BM_SETCHECK,0,0);
                SendDlgItemMessage(hDlg,IDC_BLUEBACK,BM_SETCHECK,0,0);
            } 
            return (LRESULT) hbrWhite; 
 
        case WM_COMMAND: 
                if (wParam == IDOK) 
                { 
                    EndDialog(hDlg, TRUE); 
                    return TRUE; 
                } 
 
                if (HIWORD(wParam) == BN_CLICKED) 
                { 
                    switch (LOWORD(wParam)) 
                    { 
                        case IDC_BOX1: 
 
                            // Retrieve the state of the check box. 
                            lState = SendDlgItemMessage( 
                                hDlg, IDC_BOX1, BM_GETSTATE, 
                                0, 0); 
 
                            BoxPainter(hDlg, 1, lState); 
                            break; 
 
                        case IDC_BOX2: 
                            lState = SendDlgItemMessage( 
                                hDlg, IDC_BOX2, BM_GETSTATE, 0, 0); 
                            BoxPainter(hDlg, 2, lState); 
                            break; 
 
                        case IDC_BOX3: 
                            lState = SendDlgItemMessage( 
                                hDlg, IDC_BOX3, BM_GETSTATE, 0, 0); 
                            BoxPainter(hDlg, 3, lState); 
                            break; 
 
                        case IDC_REDBACK: 
                            fRedBack = TRUE; 
                            InvalidateRect(hDlg, NULL, TRUE); 
                            break; 
 
                        case IDC_BLUEBACK: 
                            fBlueBack = TRUE; 
                            InvalidateRect(hDlg, NULL, TRUE); 
                            break; 
 
                        case IDC_CLEARBACK: 
                            fClearColor = TRUE; 
                            InvalidateRect(hDlg, NULL, TRUE); 
                            break; 
 
                        case IDC_CLEARBOXES: 
                            BoxPainter(hDlg, 4, (LRESULT) 0); 
                            break; 
                    } 
                } 
 
        case WM_DESTROY: 
            DeleteObject(hbrRed); 
            DeleteObject(hbrBlue); 
 
            // Do not delete hbrWhite, because it is a stock object.
 
            break; 
 
    } 
    return FALSE;       // did not process a message 
        UNREFERENCED_PARAMETER(lParam); 
} 
 

Index