MFC之Menu

// ID命名
// 菜单资源号以“IDM_”开始;光标资源ID号以“IDC_”开始;而图标资源ID号以“IDI_”开始。

//加载自定义菜单,在CMainFrame类的OnCreate()方法中加上
//由于menu是局部变量,存储内容会被销毁,所以SetMenu()之后,在其他调用
//会报错,用Detach()把控制权从HWIND分离出来交给Windos
CMenu menu;
menu.LoadMenu(IDR_MYMENU);
this->SetMenu(&menu);
menu.Detach();

//在单文档工程中,MFC AppWizard生成的4个类都可以响应同一个菜单的WM_COMMAND消息。如果在
//这4个类里都加了同一个菜单的响应函数,则4个响应函数将只有一个被执行,它们之间有一个优先顺序
//View->Document->MainFrame->App。

//在框架窗口中获得指向菜单栏的指针,通过CWnd的成员函数GetMenu()来实现
CMenu* GetMenu() const;
//获取子菜单
CMenu* GetSubMenu(int nPos) const;

//为菜单命令添加一个标记,在OnCreate()函数中设置
UINT CMenu::CheekMenuItem(UINT nIDCheckItem, UINT nCheck);

//在菜单命令前面添加图形效果,使用CMenu类的SetMenuItemBitmaps()函数
GetMenu()->GetSubMenu(0)->CheckMenuItem(0, MF_BYPOSITION|MF_CHECKED);
GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN, FALSE);
m_bitmap.LoadBitmap(IDB_BITMAP1);
GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0, MF_BYPOSITON, &m_bitmap, &m_bitmap);

//获取图形标记菜单上显示的位图的尺寸
int GetSystemMetrics(int nIndex);

//禁用菜单命令
//在CMainFrame()函数中
m_bAutoMenuEnable = FALSE;
//在OnCreate()函数中
EnableMenuItem(1, MF_BYPOSTION|MF_DISABLED|MF_GRAYED)

/*
如果一个新的菜单命令没有命令处理函数,应用程序会自动禁用它。
要启用这样的菜单命令,只要求用Event Handler Appwizard为该菜单命令添加
一个命令处理函数。要根据条件有选择的启用和禁用一个菜单命令,可以用
Event Handler Appwizard添加一个界面消息处理函数:
1.添加命令处理UPDATE_COMMAND_UI。
2.添加处理代码到新函数
void CWzdView::OnUpdateWzdButton(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bWzd);
}
*/
MFC (Microsoft Foundation Classes) 中,菜单(Menu)通常用于应用程序的用户界面交互,而视图(View)则是窗口中的主要内容区域。如果你想要在MFC中打开一个包含菜单的视图,你可以按照以下步骤操作: 1. 首先,你需要创建一个派生自`CView`的类,这个类将作为你的主视图。在这个类中,你需要重写必要的窗口消息处理函数,如OnCreate(),以便初始化你的菜单。 ```cpp class MyView : public CView { public: // ... 其他成员变量和方法 protected: afx_msg LRESULT OnCreate(LPCREATESTRUCT lpCreateStruct); }; ``` 2. 在`OnCreate()`中,你可以使用`DockControlBar()`函数添加一个菜单栏到视图上。假设你有一个名为`MyMenuBar`的CMenuBar对象,可以这样做: ```cpp afx_msg LRESULT MyView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // 创建并添加菜单栏 if (!m_MyMenuBar.Create(this, RUNTIME_CLASS(CMenuBar))) { AfxMessageBox("Failed to create menu bar."); return -1; } DockControlBar(m_MyMenuBar, AFX_IDW_CONTROLBAR_TOP); // 初始化其他视图内容... return TRUE; } ``` 3. 然后,在你的应用程序的框架类(通常是`CMFCDocument`或`CMFCWnd`的派生类)中,加载视图并显示它,同时附带你的菜单栏: ```cpp void YourFrameClass::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // ... 初始化其他客户端窗口组件... // 创建并显示你的视图,这里假设视图的名字是" IDD_MYVIEW" CView* pView = CreateLocalView(pDX, IDD_MYVIEW, NULL, NULL, CMFCToolBarCtrl::afxtDockNone); if (pView != NULL) { pView->CreateChildWindow(pDX, AFX_IDW_DLGFRAME, WS_OVERLAPPEDWINDOW | WS_VISIBLE); pView->DockControlBar(&m_MyMenuBar, AFX_IDW_CONTROLBAR_TOP); // 控制菜单栏 } // ... 继续其他窗口设置... } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值