Как получить изображения по умолчанию для флажков?

Я пытаюсь создать флажок, нарисованный владельцем, используя CButton, но, поскольку я хочу изменить только цвет текста, я бы хотел, чтобы флажки флажка оставались прежними.

Есть ли команда, которая позволяет мне получать растровые изображения флажка по умолчанию для платформы, на которой работает программа?

(альтернативно: как я могу изменить только цвет текста, сохранив флажки флажков?)

4 ответа

Решение

Я использую UxTheme.dll, чтобы нарисовать свой флажок.

Сначала я рисую флажки с помощью: DrawThemeBackground, передавая ему измененный прямоугольник (checkboxRect.right = pCustomDraw->rc.left + 15;)

А потом я рисую текст самостоятельно, используя::DrawText.

Я надеюсь, что это помогает.

Ваша лучшая стратегия - переопределить обработчик OnCtlColor:

BEGIN_MESSAGE_MAP(CBaseDialog, CDialog)
{
    ON_WM_CTLCOLOR()
}

HBRUSH CXXX:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hBkgrBrush= CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    pDC->SetTextColor(RGB(255,0,0)); // red
    pDC->SetBkMode   (TRANSPARENT );
    return hBkgrBrush;
}

См. http://msdn.microsoft.com/en-us/library/0wwk06hc(VS.80).aspx

Если вы хотите изменить только цвет текста, реализуйте обработчик для OnCtlColor в вашем диалоге. Как это:

HBRUSH CDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    if(pWnd->GetDlgCtrlID() == IDC_CHECK_BOX) //check for your check box control ID
    {
        pDC->SetTextColor(RGB(255,0,0));
    }
    return hbr;
}

Помните, что это работает не для обычных кнопок, но для флажков не должно быть проблем. Нет необходимости реализовывать управление, нарисованное владельцем.

РЕДАКТИРОВАТЬ:

Вы должны убедиться, что ваш флажок использует BS_AUTOCHECKBOX стиль. Также убедитесь, что BS_OWNERDRAW стиль не установлен.

РЕДАКТИРОВАТЬ # 2: DrawFrameControl () с DFCS_BUTTONCHECK позволит вам рисовать растровые изображения флажка по умолчанию.

Чтобы получить изображения флажка системы Windows (который я думаю, что спросили):

LoadBitmap(0,OBM_CHECKBOXES);

вернет дескриптор растрового изображения к растровому изображению 4x3 всех флажков (включает переключатели, а также включен и отключен)

Другие вопросы по тегам