0

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

复选框上的色边 在此处输入图像描述

我想摆脱灰色边缘,但不能让它消失。无论我如何设置控件的大小,它仍然会出现。

将其更改为 anCMFCButton给出了这个:

未经检查 检查

这很好,它摆脱了边距,除了现在没有复选标记。我需要那个复选标记。

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

我知道这里有很多类似的问题,但我找到的答案似乎都不适用。我发现的最接近的是:一劳永逸:如何在 Windows API 中获得完全透明的复选框、按钮、单选按钮等,而不是黑色背景?; 但是第一个答案非常神秘,第二个答案是一大段代码,看起来有点矫枉过正。

4

1 回答 1

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;
}
于 2020-03-05T21:50:13.150 回答