MFC菜单(1)

资源ID命名规则:ID+类型+名字

比如:在菜单栏上加一项TestID IDM_Test     光标(cursor)资源以IDC_ 开头,图标(icon)资源以 IDI_开头,菜单 IDM_开头

 

响应菜单项命令的顺序依次是:视类、文档类、框架类、应用程序类;<标记1>

 

菜单命令的消息:

1.WM_COMMAND之外,所有以WM_开头的消息都是标准消息,从CWnd派生的类,都可以接受这类消息

2.来自菜单、加速键或工具栏按钮的消息。这类消息以WM_COMMAND形式呈现,在MFC中,通过ID来区分不同的命令消息。

# 凡是从CWnd派生的类,他们既可以接收标准消息,也可以接收命令消息和通告消息;从CCmdTarget派生的类,则只能接收命令消息和通告消息,不能接受标准消息。

 

.cpp中,ON_COMMAND(IDM_TEST,&CMainFrame::OnTest)   将菜单ID和响应函数关联在一起;

菜单命令消息路由的具体过程:

        当点击某个菜单项时,最先接收到这个菜单命令消息的是框架类。框架类将把接收到的这个消息交给视类。视类根据命令消息映射机制查找自身是否对此消息进行了响应,如果响应了,就调用响应函数对这个消息进行处理,消息路由过程结束;如果视类没有对此命令消息做出响应,就交由文档类,文档类根据命令消息映射机制,查找自身…..,文档类将该消息还给视觉类,视觉类再还给框架类……,框架类交给应用程序类。<遵循上述顺序规则><标记1>

 

Cmenu 菜单类:Cmenu* GetMenu() const        指向菜单栏的指针

                         Cmenu*GetSubMenuint nPos const         获取指向子菜单栏的指针

                         UINTCheckMenuItem(UINT nIDCheckItem,UINT nCheck)                获取指定菜单

                         SetDefaultItem(1, TRUE);                                        设置默认菜单项

修改菜单(在框架类中)项的一些属性,在菜单创建函数 OnCreate() 中完成

GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_CHECKED | MF_BYPOSITION);    将(0,0)项菜单项设置为标记菜单     0可以用ID替换

  

CString str;

str.Format(_T("x=%d,y=%d"), GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK));

MessageBox(str);                                                获取位图尺寸

m_bitmap.LoadBitmapW(IDB_BITMAP1);

GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0, MF_BYPOSITION, &m_bitmap, &m_bitmap);         菜单项设置位图图标

GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);                      设置默认菜单项

 

注意:分隔栏在子菜单中是占据索引位置;一个子菜单只能有一个默认菜单项

 

CString::Format

void Format( LPCTSTRlpszFormat, ... );

void Format( UINTnFormatID, ... );

 

参数:

lpszFormat

一个格式控制字符串。

nFormatID

包含格式控制字符串的字符串资源标识符。

说明:

此成员函数用来将格式化数据写入一个CString中,其方法就像sprintf函数向一个C-风格的字符数组中格式化输出数据一样。这个成员函数在CString中格式化并存储一系列字符和值。根据lpszFormat中指定的格式或nFormatID标识的字符串资源,函数中的每一个可选参数(如果有)都被转换并输出。

如果此字符串对象本身是作为Format的一个参数,则调用将失败。例如象下面的代码:

CString str ="Some Data";

str.Format("%s%d",str,123); //注意:在参数列表中也使用了str将导致不可预期的结果。

 

 

 函数功能:该函数将指定的位图与一个菜单项相联系。无论该菜单项是否被选取,系统都将适当的位图显示在菜单项旁边。

 函数原型:BOOL SetMenultemBitmaPsHMENUhMenuUINT uPosition,UINT uFlagsHBITMAPhBitmapUnchecked,HBITMAP hBitmspChecked);

 

    参数:

    hMenu:其菜单项将接受新选取标记位图的菜单的句柄。

    uPosition:指定将被修改的菜单项。其含义由参数uFlags决定。

    UFlags:指定参数uPosition将如何解释。此参数必须是下列值之一:

    MF_BYCOMMAND:表示参数uPosition给出菜单项的标识符。如果MF_BYCOMMANDMF_POSITION都没被指定,则MF_BYCOMMAND是缺省标志。

    MF_BYPOSITION:表示参数uPosition给出菜单项相对于零的位置。

    hBitmapUnchecked:当菜单项没被选取时显示的位图的句柄。

    hBitmapChecked:当菜单项被选取时显示的位图的句柄。

    返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。

 

    备注:如果参数hBitmapUncheckedhBitmapChecked的值为NULL,系统将不为相应选取状态显示任何位图到菜单项旁边。如果两参数值均为NULL,系统在菜单项被选取时显示缺省的选取标志位图,菜单项未被选取时删除位图。当菜单项被销毁时,位图并没被销毁,需要应用程序来将其销毁。

 


注:内容总结来自《VC++ 深入详解》 孙鑫  和 CSDN文档上

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值