2013-03-25 45 views
0

我是MFCMenuButton控件的新手;这里是我在OnInitiDialog(代码):带编程构造菜单的CMFCMenuButton?

// Load application list into menu button 
m_ApplicationMenu = CreateMenu(); 
m_MenuInfoSize = 2; 
m_MenuInfo = new MENUITEMINFO[m_MenuInfoSize]; 
memset(m_MenuInfo, 0, sizeof(MENUITEMINFO) * m_MenuInfoSize); 
UINT menuIndex = 0; 
BOOL b; 
// 1st menu item 
memset(m_MenuInfo + menuIndex, 0, sizeof(MENUITEMINFO)); 
m_MenuInfo[menuIndex].cbSize = sizeof(MENUITEMINFO); 
m_MenuInfo[menuIndex].fMask = MIIM_ID | MIIM_STRING | MIIM_DATA; 
m_MenuInfo[menuIndex].wID = menuIndex; 
m_MenuInfo[menuIndex].dwTypeData = new WCHAR[10]; 
swprintf_s(m_MenuInfo[menuIndex].dwTypeData, 10, L"%s", L"A1"); 
m_MenuInfo[menuIndex].cch = wcslen(m_MenuInfo[menuIndex].dwTypeData) + 1; 
b = InsertMenuItem(m_ApplicationMenu, menuIndex, TRUE, &(m_MenuInfo[menuIndex])); 
menuIndex++; 
// 2nd menu item 
memset(&m_MenuInfo[menuIndex], 0, sizeof(MENUITEMINFO)); 
m_MenuInfo[menuIndex].cbSize = sizeof(MENUITEMINFO); 
m_MenuInfo[menuIndex].fMask = MIIM_ID | MIIM_STRING | MIIM_DATA; 
m_MenuInfo[menuIndex].wID = menuIndex; 
m_MenuInfo[menuIndex].dwTypeData = new WCHAR[10]; 
swprintf_s(m_MenuInfo[menuIndex].dwTypeData, 10, L"%s", L"B2"); 
m_MenuInfo[menuIndex].cch = wcslen(m_MenuInfo[menuIndex].dwTypeData) + 1; 
b = InsertMenuItem(m_ApplicationMenu, menuIndex, TRUE, &(m_MenuInfo[menuIndex])); 
menuIndex++; 
// Attach menu to CMFCMenuButton 
m_ApplicationList.m_bOSMenu = TRUE; 
m_ApplicationList.m_bRightArrow = FALSE; 
m_ApplicationList.m_bStayPressed = TRUE; 
m_ApplicationList.m_bDefaultClick = FALSE; 
m_ApplicationList.m_hMenu = m_ApplicationMenu; 
    // Testing the constructed menu with the dialog's menu bar 
::SetMenu(this->m_hWnd, m_ApplicationMenu); 

当我运行应用程序时,CMFCMenuButton显示一个下拉菜单,当我点击它...但是这两个项目是空的,没有文字,没有图片。

我添加了最后一行来测试我构建的菜单;并且这两个项目正确显示在菜单栏中。

我也尝试使用从资源编辑器创建的菜单。它在菜单栏中显示得很好,但在CMFCMenuButton中,又有空的空格。

我错过了什么?

回答

1

尝试

m_ApplicationMenu = CreatePopupMenu(); 

另外,如果你想获得CMFCMenuButton的m_nMenuResult在点击事件你最好使用1作为第一menuInde​​x。这是因为:

CMFCMenuButton :: m_nMenuResult

一个整数,指示用户从弹出式菜单中选择哪个项目。

如果用户取消菜单 而不进行选择或发生错误,则此成员变量的值为零。

+0

非常感谢!这就是我做错了,CreateMenu()与CreatePopupMenu()[http://blogs.msdn.com/b/oldnewthing/archive/2003/12/30/46594.aspx]。您对菜单索引的评论也是正确的;我的菜单的第一个项目,使用索引0,没有触发事件。 – 2013-03-27 01:47:13