Windows窗口大多有菜单,而菜单的作用在程序运行中有着至关重要的作用。
前面学习了绘图和键盘鼠标事件。今天就学习菜单。
菜单在MFC中是CMenu类。
在Windows中,HMENU表示菜单的句柄,CMenu类封装的便是HMENU。
构造方法:CMenu::CMenu ,构造 CMenu 对象。
CMenu有一个公共的对象(对外公开)
CMenu::m_hMenu,指定的句柄附加到的 Windows 菜单CMenu对象。
CMenu也有以下函数:
(1)CMenu::AppendMenu 将新项追加到此菜单的末尾。
(2)CMenu::Attach 将附加的 Windows 菜单句柄CMenu对象。
(3)CMenu::CheckMenuItem 旁边放置一个复选标记,或者从弹出菜单中的菜单项移除复选标记。
(4)CMenu::CheckMenuRadioItem 将菜单项旁边的单选按钮,并从所有组中的其他菜单项中移除的单选按钮。
(5)CMenu::CreateMenu 创建空菜单,并将其附加到CMenu对象。
(6)CMenu::CreatePopupMenu 创建空的弹出菜单,并将其附加到CMenu对象。
(7)CMenu::DeleteMenu 从菜单中删除指定的项。 如果菜单项具有相关联的弹出菜单,销毁弹出菜单的句柄并释放其占用的内存。
(8)CMenu::DeleteTempMap 删除任何临时CMenu创建的对象FromHandle成员函数。
(9)CMenu::DestroyMenu 销毁附加到的菜单CMenu对象并释放任何菜单所占用的内存。
(10)CMenu::Detach 从 Windows 菜单句柄中分离CMenu对象并返回句柄。
(11)CMenu::DrawItem 由框架在所有者描述菜单更改的可视方面时调用。
(12)CMenu::EnableMenuItem 启用、 禁用,或变暗 (灰色) 菜单项。
(13)CMenu::FromHandle 返回一个指向CMenu给定 Windows 菜单句柄的对象。
(14)CMenu::GetDefaultItem 确定指定的菜单上的默认菜单项。
(15)CMenu::GetMenuContextHelpId 检索与菜单关联的帮助上下文 ID。
(16)CMenu::GetMenuInfo 检索特定菜单上的信息。
(17)CMenu::GetMenuItemCount 确定弹出窗口或顶级菜单中项的数量。
(18)CMenu::GetMenuItemID 获取位于指定位置的菜单项的菜单项标识符。
(19)CMenu::GetMenuItemInfo 检索菜单项有关的信息。
(20)CMenu::GetMenuState 在弹出菜单中返回指定的菜单项或项的数目的状态。
(21)CMenu::GetMenuString 检索指定的菜单项的标签。
(22)CMenu::GetSafeHmenu 返回m_hMenu包装此CMenu对象。
(23)CMenu::GetSubMenu 检索指向一个弹出菜单。
(24)CMenu::InsertMenu 向菜单下移动其他项中指定位置处插入新菜单项。
(25)CMenu::InsertMenuItem 在菜单中的指定位置处插入新菜单项。
(26)CMenu::LoadMenu 从可执行文件加载菜单资源,并将其附加到CMenu对象。
(27)CMenu::LoadMenuIndirect 从内存中的菜单模板加载一个菜单,并将其附加到CMenu对象。
(28)CMenu::MeasureItem 由框架调用以创建一个所有者描述菜单时确定菜单维度。
(29)CMenu::ModifyMenu 更改现有菜单项中指定的位置。
(30)CMenu::RemoveMenu 从指定的菜单中删除具有相关联的弹出菜单的菜单项。
(31)CMenu::SetDefaultItem 设置指定的菜单的默认菜单项。
(32)CMenu::SetMenuContextHelpId 设置要与菜单相关联的帮助上下文 ID。
(33)CMenu::SetMenuInfo 设置特定菜单上的信息。
(34)CMenu::SetMenuItemBitmaps 将指定的选中标记位图的菜单项与相关联。
(35)CMenu::SetMenuItemInfo 更改菜单项有关的信息。
(36)CMenu::TrackPopupMenu 在指定位置显示一个浮动的弹出菜单,并在弹出菜单上跟踪选定的项。
(37)CMenu::TrackPopupMenuEx 在指定位置显示一个浮动的弹出菜单,并在弹出菜单上跟踪选定的项。
菜单包含了一般的菜单(特别代指通常标题栏下的菜单)和弹出菜单(指右键弹出的菜单)。
两种菜单一样。
而且菜单具有一定的标识,用于菜单被点击后运行过程的识别绑定。
在开发时,菜单属于一种资源。
我们用以下方法实现菜单。
我们在项目中选择添加资源:
添加资源的窗口
菜单的编辑窗口
编辑菜单过程中,要为每个菜单项分配ID。这个ID就是菜单操作的识别号,要根据这个ID来绑定菜单操作的方法或者函数。
使用ON_COMMAND宏来绑定
绑定的方法是ON_COMMAND(ID号,函数)
绑定使用的位置是MESSAGE_MAP()
同样的,右键菜单和一般的菜单栏菜单是一样的,唯一的区别便是,右键菜单(又称快捷菜单)只有在右键点击时弹出。所以我们一般会为右键添加如下的代码:
void MyWnd::OnRButtonDown(UINT nFlags, Cpoint point) {
CMenu cm1;
cm1.LoadMenuA(IDR_MENU2);//IDR_MENU2是菜单的ID号
CMenu* cm2 = cm1.GetSubMenu(0);
cm2->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, point.x, point.y, AfxGetMainWnd());
}