如何使CMFCButton看起来像标准复选框?

时间:2020-02-29 17:25:00

标签: mfc custom-controls cbutton

彩色背景上的标准MFC CButton复选框如下所示:

color fringing on checkbox enter image description here

我想摆脱灰色边距,但无法消除它。无论我如何设置控件的大小,它仍然会出现。

将其更改为CMFCButton即可:

unchecked checked

哪个好,它会消除边距,但现在没有复选标记。我需要那个复选标记。

有什么方法可以使带有 标记的外观整洁?我曾想过将标准图像集传递给CMFCControl::SetImage(),但是我不知道如何获得它们。我知道我自己可以画所有东西,但是我正努力避免重新发明轮子。

我知道SO上有许多相似问题,但我发现的答案似乎都没有。我发现的最接近的是:Once and for all: how do I get a fully transparent checkbox, button, radio button, etc. in Windows API, and not with a black background?;但是第一个答案是非常神秘的,第二个答案是一大堆似乎过于矫kill过正的代码。

1 个答案:

答案 0 :(得分:0)

我发现了一些可行的简单方法:

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;
}