CMFCVisualManager 类的 OnDrawMenuCheck 方法用于绘制菜单中的选中标记。以下是一个简单的示例,展示如何重写这个方法以自定义菜单选中标记的外观:
class CMyVisualManager : public CMFCVisualManager
{
public:
    virtual void OnDrawMenuCheck(CDC* pDC, CRect rect, BOOL bHighlight, BOOL bIsRadio);
};

void CMyVisualManager::OnDrawMenuCheck(CDC* pDC, CRect rect, BOOL bHighlight, BOOL bIsRadio)
{
    // 在这里添加你自己的绘制逻辑
    // 使用 pDC 绘制到指定的 rect 区域
    // bHighlight 表示菜单项是否高亮,bIsRadio 表示是否是单选菜单项

    // 举例:简单绘制一个选中标记
    if (bIsRadio)
    {
        // 单选菜单项
        CPoint ptCenter = rect.CenterPoint();
        int nRadius = min(rect.Width(), rect.Height()) / 2;

        if (bHighlight)
        {
            pDC->FillSolidRect(rect, RGB(200, 200, 255));
            pDC->Draw3dRect(rect, RGB(0, 0, 255), RGB(0, 0, 192));
        }
        else
        {
            pDC->Draw3dRect(rect, RGB(128, 128, 128), RGB(192, 192, 192));
        }

        pDC->Ellipse(ptCenter.x - nRadius, ptCenter.y - nRadius, ptCenter.x + nRadius, ptCenter.y + nRadius);
    }
    else
    {
        // 多选菜单项
        if (bHighlight)
        {
            pDC->FillSolidRect(rect, RGB(200, 200, 255));
            pDC->Draw3dRect(rect, RGB(0, 0, 255), RGB(0, 0, 192));
        }
        else
        {
            pDC->Draw3dRect(rect, RGB(128, 128, 128), RGB(192, 192, 192));
        }

        rect.DeflateRect(3, 3);
        pDC->FillRect(rect, &GetDlgBackBrush(NULL));
    }
}

在上述示例中,CMyVisualManager 是自定义的 CMFCVisualManager 派生类,通过重写 OnDrawMenuCheck 方法,可以实现自定义的菜单选中标记绘制逻辑。具体的绘制效果和样式会根据你的需求而变化。


转载请注明出处:http://www.zyzy.cn/article/detail/20522/MFC/CMFCVisualManager