在MFC(Microsoft Foundation Classes)中,CMFCVisualManager 类用于管理应用程序的视觉外观。OnDrawMenuArrowOnCustomizeList 是该类中的一个公共方法,用于绘制自定义菜单列表(Customize List)中的箭头。

以下是一个简单的示例,展示了如何重写 OnDrawMenuArrowOnCustomizeList 方法以自定义自定义菜单列表中的箭头绘制:
class CMyVisualManager : public CMFCVisualManager
{
public:
    virtual void OnDrawMenuArrowOnCustomizeList(CDC* pDC, CRect rect, BOOL bHorz, BOOL bHighlighted, BOOL bPressed, BOOL bEnabled);
};

void CMyVisualManager::OnDrawMenuArrowOnCustomizeList(CDC* pDC, CRect rect, BOOL bHorz, BOOL bHighlighted, BOOL bPressed, BOOL bEnabled)
{
    // 在这里添加你自己的绘制逻辑
    // 使用 pDC 绘制到指定的 rect 区域
    // bHorz 表示箭头的方向,TRUE 表示水平,FALSE 表示垂直
    // bHighlighted 表示箭头是否高亮,bPressed 表示箭头是否被按下,bEnabled 表示箭头是否启用

    // 举例:简单绘制一个箭头
    if (bEnabled)
    {
        pDC->FillSolidRect(rect, bHighlighted ? RGB(200, 200, 255) : RGB(255, 255, 255));

        if (bHorz)
        {
            // 水平箭头
            CPoint ptTop(rect.CenterPoint().x, rect.top + 10);
            CPoint ptRight(rect.right - 10, rect.top + 10);
            CPoint ptLeft(rect.left + 10, rect.top + 10);

            CPen pen(PS_SOLID, 1, RGB(0, 0, 0));
            CPen* pOldPen = pDC->SelectObject(&pen);

            pDC->MoveTo(ptTop);
            pDC->LineTo(ptRight);
            pDC->MoveTo(ptTop);
            pDC->LineTo(ptLeft);

            pDC->SelectObject(pOldPen);
        }
        else
        {
            // 垂直箭头
            CPoint ptTop(rect.CenterPoint().x, rect.top + 5);
            CPoint ptRight(rect.CenterPoint().x, rect.bottom - 5);
            CPoint ptLeft(rect.CenterPoint().x, rect.top + 15);

            CPen pen(PS_SOLID, 1, RGB(0, 0, 0));
            CPen* pOldPen = pDC->SelectObject(&pen);

            pDC->MoveTo(ptTop);
            pDC->LineTo(ptRight);
            pDC->MoveTo(ptTop);
            pDC->LineTo(ptLeft);

            pDC->SelectObject(pOldPen);
        }
    }
    else
    {
        // 绘制禁用状态下的箭头外观
        pDC->FillSolidRect(rect, RGB(240, 240, 240));
        pDC->Draw3dRect(rect, RGB(128, 128, 128), RGB(192, 192, 192));
    }
}

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


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