Как я могу заставить CMFCButton выглядеть как стандартный флажок? - PullRequest
0 голосов
/ 29 февраля 2020

Стандартный флажок MF C CButton на цветном фоне выглядит следующим образом:

color fringing on checkbox enter image description here

Я хочу избавиться от серого поля, но не могу получить его до go. Независимо от того, как я установил размер элемента управления, он все равно появляется.

Изменение его на CMFCButton дает следующее:

unchecked checked

Что хорошо, он избавляется от поля, за исключением того, что теперь нет галочки. Мне нужна эта галочка.

Есть ли способ получить чистый вид с галочкой? У меня была мысль передать стандартный набор изображений CMFCControl::SetImage(), но я не понимаю, как их получить. Я знаю, что могу нарисовать все сам, но я стараюсь не изобретать велосипед.

Я знаю, что на SO так много похожих вопросов, но ни один из найденных ответов не кажется применять. Самое близкое, что я нашел, было это: раз и навсегда: как мне получить полностью прозрачный флажок, кнопку, переключатель и т. Д. c. в Windows API, а не на черном фоне? ; но первый ответ очень криптит c, а второй - большой кусок кода, который кажется излишним.

1 Ответ

0 голосов
/ 06 марта 2020

Я нашел что-то простое, что сработало:

После добавления ON_WM_CTLCOLOR() к диалоговому окну MESSAGE_MAP я добавил это к классу диалога:

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

    if (myCheckbox.m_hWnd == pWnd->m_hWnd) // myCheckbox is the problem control
    {
        pDC->SetBkMode(TRANSPARENT);
        hbr = reinterpret_cast<HBRUSH>(::GetStockObject(NULL_BRUSH));
    }

    return hbr;
}
...