在MFC(Microsoft Foundation Classes)中,CMFCVisualManager 类用于管理应用程序的视觉外观。OnDrawMenuItemButton 是该类中的一个公共方法,用于绘制菜单项按钮的外观。

以下是一个简单的示例,展示如何重写 OnDrawMenuItemButton 方法以自定义菜单项按钮的绘制:
class CMyVisualManager : public CMFCVisualManager
{
public:
    virtual void OnDrawMenuItemButton(CDC* pDC, CMFCToolBarButton* pButton, CRect rect, BOOL bHighlight, BOOL bDisabled);
};

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

    // 举例:简单绘制一个按钮外观
    if (bDisabled)
    {
        // 绘制禁用状态下的按钮外观
        pDC->FillSolidRect(rect, RGB(240, 240, 240));
        pDC->Draw3dRect(rect, RGB(128, 128, 128), RGB(192, 192, 192));
    }
    else
    {
        // 绘制正常状态下的按钮外观
        pDC->FillSolidRect(rect, bHighlight ? RGB(200, 200, 255) : RGB(255, 255, 255));
        pDC->Draw3dRect(rect, RGB(0, 0, 0), RGB(192, 192, 192));
    }

    // 在按钮中心绘制按钮图标(如果有)
    if (pButton->m_bImage && pButton->m_pImage != NULL)
    {
        CRect rectImage = rect;
        rectImage.DeflateRect(3, 3);  // 调整图标区域

        // 你可以使用pDC->DrawIcon或其他图标绘制方法绘制图标
        // 示例中假设按钮使用位图图标
        if (pButton->m_pImage->IsKindOf(RUNTIME_CLASS(CMFCToolBarBitmap)))
        {
            CMFCToolBarBitmap* pToolBarBmp = (CMFCToolBarBitmap*)pButton->m_pImage;
            pToolBarBmp->Draw(pDC, rectImage.TopLeft(), pButton->m_nIndex, bDisabled ? CMFCToolBarImage::ImageGray : CMFCToolBarImage::ImageBlack);
        }
    }
}

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


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