我这里有一个自绘菜单,如果菜单的所有项全是popup菜单的话,菜单显示时只有12个像素的宽度,根本不能显示上面的文字。我查看MFC代码// Measure item implementation relies on unique control/menu IDs
void CWnd::OnMeasureItem(int /*nIDCtl*/, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
if (lpMeasureItemStruct->CtlType == ODT_MENU)
{
ASSERT(lpMeasureItemStruct->CtlID == 0);
CMenu* pMenu; _AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
if (pThreadState->m_hTrackingWindow == m_hWnd)
{
// start from popup
pMenu = CMenu::FromHandle(pThreadState->m_hTrackingMenu);
}
else
{
// start from menubar
pMenu = GetMenu();
} pMenu = _AfxFindPopupMenuFromID(pMenu, lpMeasureItemStruct->itemID);
if (pMenu != NULL)
pMenu->MeasureItem(lpMeasureItemStruct);// 注意这里
else
TRACE1("Warning: unknown WM_MEASUREITEM for menu item 0x%04X.\n",
lpMeasureItemStruct->itemID);
}
else
{
CWnd* pChild = GetDescendantWindow(lpMeasureItemStruct->CtlID, TRUE);
if (pChild != NULL && pChild->SendChildNotifyLastMsg())
return;     // eaten by child
}
// not handled - do default
Default();
}pMenu = _AfxFindPopupMenuFromID(pMenu, lpMeasureItemStruct->itemID);只有pMenu有效才会调用
pMenu->MeasureItem(lpMeasureItemStruct);
但由于Popup菜单根本没有ID,所以pMenu->MeasureItem(lpMeasureItemStruct);
不可能执行,这样菜单的高度和宽度就没法设置,怎么解决呀?