CMenu类使用例子
时间: 2023-02-06 08:24:08 浏览: 74
下面是一个使用 CMenu 类的例子:
```cpp
#include <afxwin.h>
class CMyFrameWnd : public CFrameWnd
{
// ...
protected:
CMenu m_menu;
public:
CMyFrameWnd()
{
// 加载菜单资源
m_menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&m_menu);
}
};
int main()
{
// 创建窗口
CMyFrameWnd* pFrame = new CMyFrameWnd;
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
// 开始消息循环
return AfxGetApp()->Run();
}
```
在这个例子中,我们创建了一个名为 CMyFrameWnd 的窗口类,并在其构造函数中加载了菜单资源。然后我们使用 SetMenu 函数将菜单设置到窗口中。最后,我们调用 AfxGetApp()->Run() 函数开始消息循环,这样窗口就会显示出来并可以响应用户的输入了。
相关问题
动态创建CMenu
动态创建CMenu可以使用CMenu类中的CreatePopupMenu方法。下面是一个简单的例子:
```
CMenu popupMenu;
VERIFY(popupMenu.CreatePopupMenu());
// 添加菜单项
popupMenu.AppendMenu(MF_STRING, IDM_MENU_ITEM_1, _T("菜单项1"));
popupMenu.AppendMenu(MF_STRING, IDM_MENU_ITEM_2, _T("菜单项2"));
// 在指定位置显示菜单
CPoint point; // 假设point表示鼠标点击位置
ClientToScreen(&point);
popupMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
```
在上述例子中,首先使用CreatePopupMenu方法创建了一个弹出菜单对象popupMenu。然后使用AppendMenu方法添加了两个菜单项。最后使用TrackPopupMenu方法在指定位置显示了菜单。其中,TPM_LEFTALIGN和TPM_RIGHTBUTTON参数分别表示菜单左对齐和右键触发。这里的this参数表示当前窗口对象。
MFC CMenu 更新
以下是MFC CMenu更新的示例代码:
假设我们有一个菜单项ID为ID_MENUITEM,我们可以使用以下代码来更新该菜单项的状态:
```cpp
// 获取菜单对象
CMenu* pMenu = GetMenu();
if (pMenu != NULL)
{
// 获取菜单项
CMenu* pSubMenu = pMenu->GetSubMenu(0);
if (pSubMenu != NULL)
{
// 更新菜单项状态
pSubMenu->EnableMenuItem(ID_MENUITEM, MF_BYCOMMAND | MF_ENABLED);
pSubMenu->CheckMenuItem(ID_MENUITEM, MF_BYCOMMAND | MF_CHECKED);
}
}
```
在上面的代码中,我们首先获取了主菜单对象,然后获取了第一个子菜单对象。接下来,我们使用EnableMenuItem()函数启用了菜单项,并使用CheckMenuItem()函数选中了菜单项。