引出
VC++学习(6)——菜单编程,消息捕获机制和顺序;创建标记、缺省、图形、不可用等菜单;命令更新模式;右键的弹出菜单
第6讲 菜单编程
在CMainFrame中捕获
消息响应捕获顺序
插曲:删除函数的方法
消息捕获顺序
消息分类
CWnd派生的类既可以接收命令消息,也可以接收标准消息
菜单的结构
文件下的整个部分是一个子菜单
创建标记菜单
比如在文件下面加一个标记菜单
指向整个菜单的指针
指向子菜单的指针
// 获取指向CMenu对象的指针
// 1.按照索引访问
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED);
// 2.按照id号访问 ID_FILE_NEW
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND | MF_CHECKED);
创建缺省菜单
加粗显示
// setDefaultItem
// 通过索引设置粗体
GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN);
// 通过 id号 设置粗体
GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);
创建图形菜单
// 定义一个位图菜单
m_bitmap.LoadBitmap(IDB_BITMAP1);
GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);
图形标记的尺寸,17x17
CString str;
str.Format("x= %d, y= %d", GetSystemMetrics(SM_CXMENUCHECK), GetSystemMetrics(SM_CYMENUCHECK));
MessageBox(str);
// 定义一个位图菜单
m_bitmap.LoadBitmap(IDB_BITMAP1);
GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);
菜单项不允许使用
没有生效
表示自己决定
这时所有菜单项是否可以使用,都要由自己来决定
/
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
// 设置enable
m_bAutoMenuEnable = FALSE;
}
GetMenu()->GetSubMenu(0)->EnableMenuItem(3,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);