菜单

来源:互联网 发布:知乎 唯一住房 编辑:程序博客网 时间:2024/04/28 16:15

1
菜单消息传递顺序:View类CDoc类 CMainFrame类   CApp类。菜单消息一旦在其中一个类中响应则不再在其它类中查找响应函数。

2
CMenuDoc和CMenuApp都不能接收标准消息

当点击一个菜单项的时候,最先接受到菜单项消息的是CMainFrame框架类,CMainFrame框架类将会把菜单项消息交给它的子窗口View类,由View类首先进行处理;如果View类检测到没对该菜单项消息做响应,则View类把菜单项消息交由文档类Doc类进行处理;如果Doc类检测到Doc类中也没对该菜单项消息做响应,则Doc类又把该菜单项消息交还给View类,由View类再交还给CMainFrame类处理。

 

3
GetMenu 
函数功能:该函数取得分配给指定窗口的菜单的句柄。
函数原型:HMENU GetMenu(HWND hWnd);

4
MFC类成员函数
CMenu::GetSubMenu   
CMenu* GetSubMenu( int nPos ) const;   
返回值:若弹出菜单位于指定的位置,则返回CMenu 对象的指针,其中CMenu对象要包含弹出菜单的句柄;否则为NULL。
如果CMenu 对象不存在,那么将创建临时的CMenu 对象。但返回的CMenu指针不应被存储。

nPos :指定包含在菜单中的弹出菜单的位置。对于第一个菜单项,位置值开始为0。弹出菜单的标识符不能被该函数使用。

5
CheckMenuItem
函数原型:DWORD CheckMenuItem(HMENU hmenu, UINT uIDCheckItem, UINT uCheck); 
函数功能:该函数取得与指定菜单项相联系的菜单标志。如果该菜单项打开了一个子菜单,该函数也返回子菜单里的菜单项数。

hmenu:含有其菜单项的标志将被提取得的菜单的句柄。   
uIDCheckItem:制定要修改的菜单项。   
uCheck:表示标记的状态。此参数可取下列值之一:

MF_BYCOMMAND:表示参数uId给出菜单项的标识符。如果MF_BYCOMMAND 和MF_BYPOSITION都没被指定,则MF_BYCOMMAND是缺省值。   
MF_BYPOSITION:表示参数uId给出菜单项相对于零的位置。 

如果是MF_BYPOSITION,那么就是用索引值来作为第一个参数
如果是MF_BYCOMMAND,那么就是以标示作为第一个参数

用法如下
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED);
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND | MF_CHECKED);


6
SetDefaultItem
例子
GetMenu()->GetSubMenu(0)->SetDefaultItem(5,TRUE);//打印粗体字

7
SetMenu(NULL)
//取消掉菜单栏

menu.LoadMenu(IDR_xxx);
SetMenu(&Menu);
//加载一个菜单栏


8
添加右键弹出

void CMenuView::OnRButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
 
 CMenu menu;
 menu.LoadMenu(IDR_MENU1);
 CMenu *pPopup=menu.GetSubMenu(0);

 ClientToScreen(&point);
    pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,
    this );
 CView::OnRButtonDown(nFlags, point);
}

9
BOOL EnableMenuItem(HMENU hMenu,UINT uIDEnableItem, UINT uEnable);
允许或禁止指定的菜单条目
例子
GetMenu()->GetSubMenu(0)->EnableMenu(1,MF_BYPOSITION|MF_DISABLE|MF_GRAYED)  

 

10
函数原型:BOOL AppendMenu(hMenu hMenu,UINT uFlags,UINT uIDNewltem,LPCTSTR lpNewltem);
函数功能:该函数在指定的菜单条、下拉式菜单、子菜单或快捷菜单的末尾追加一个新菜单项。此函数可指定菜单项的内容、外观和性能。

参数:   
hMenu:将被修改的菜单条、下拉式菜单、子菜单、或快捷菜单的句柄。   
UFlags:控制新菜单项的外观和性能的标志。此参数可以是备注里所列值的组合。  UIDNewltem:指定新菜单项的标识符,或者当uFlags设置为MF_POPUP时,表示下拉式菜单或子菜单的句柄。   
LpNewltem:指定新菜单项的内容。


11
CreatePopupMenu
HMENU CreatePopupMenu(VOID)

函数功能:该函数创建一个下拉式菜单、子菜单或快捷菜单。此菜单最初是空的,但可用函数InsertMenultem来插入或追加菜单项。也可用函数InsertMenu来插人菜单项,用AppendMenu来追加菜单项。


12
函数原型:BOOL DrawMenuBar(HWND hWnd);
函数功能:该函数重画指定菜单的菜单条。如果系统创建窗口以后菜单条被修改,则必须调用此函数来画修改了的菜单条。
在CView类的话要通过  GetParent()获得父类CMainFrame的菜单栏指针
 GetParent()->DrawMenuBar();

hWnd:其菜单条需要被重画的窗口的句柄。

原创粉丝点击