CMenu::DrawItem 不是 CMenu 类的公共方法。在 MFC 中,CMenu 类通常用于菜单的创建、操作和显示,而 DrawItem 更常用于自定义绘制操作,通常与窗口控件(如列表框、组合框等)中的自绘制相关。

如果你需要在菜单项上进行自定义绘制,通常需要处理菜单的 WM_DRAWITEM 消息,而不是调用 CMenu 类的方法。具体的实现可能需要使用 MeasureItem 方法来设置菜单项的大小,然后在 DrawItem 中执行绘制操作。

以下是一个简单的示例,演示如何在菜单项上进行自定义绘制:
// 假设菜单项的标识符为 ID_MENU_ITEM_TO_DRAW
UINT nIDItemToDraw = ID_MENU_ITEM_TO_DRAW;

// 响应 WM_DRAWITEM 消息
void CYourWndClass::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    if (lpDrawItemStruct->CtlType == ODT_MENU)
    {
        // 判断是否为指定菜单项
        if (lpDrawItemStruct->itemID == nIDItemToDraw)
        {
            // 在这里执行自定义的绘制操作
            CDC dc;
            dc.Attach(lpDrawItemStruct->hDC);

            // 例如,绘制文本
            CString strText = _T("Custom Draw");
            dc.DrawText(strText, &lpDrawItemStruct->rcItem, DT_CENTER | DT_VCENTER);

            dc.Detach();
        }
    }
}

在这个示例中,OnDrawItem 是在响应 WM_DRAWITEM 消息时调用的函数。我们首先检查 lpDrawItemStruct->CtlType 是否为 ODT_MENU,以确保它是菜单项的绘制操作。接着,我们判断菜单项的标识符是否为我们想要自定义绘制的那个菜单项(nIDItemToDraw),如果是的话,就在 DrawItem 方法中执行自定义的绘制操作。

请根据实际需求调整参数和方法的使用。


转载请注明出处:http://www.pingtaimeng.com/article/detail/18978/MFC/CMenu