孙鑫老师教学视频学习笔记——单文档中菜单操作
2009-06-22 14:00
429 查看
////////////////////////静态实现菜单操作
创建和删除一个标记菜单:
在框架类CMainFrame中的OnCreate消息响应函数中添加:
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_CHECKED | MF_BYPOSITION);//创建
或者GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,
MF_UNCHECKED | MF_BYCOMMAND);//删除
创建缺省菜单项:
在框架类CMainFrame中的OnCreate消息响应函数中添加:
GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);//以索引方式
GetMenu()->GetSubMenu(0)->SetDefaultItem (ID_FILE_OPEN,FALSE);//以ID方式
注意:下拉菜单中的分隔栏也占用一个索引号;一个下拉菜单中只能有一个缺省菜单。
创建图形标记菜单:
在框架类CMainFrame中的OnCreate消息响应函数中添加:
bitmap.LoadBitmap(IDB_BITMAP1);
GetMenu()->GetSubMenu(0)->
SetMenuItemBitmaps(0,MF_BYPOSITION,&bitmap,&bitmap);
注意:先通过函数GetSystemMetrics(SM_CXMAXTRACK)和GetSystemMetrics(SM_CYMAXTRACK)来
获知系统图标的大小。
创建菜单屏蔽使用:
在框架类CMainFrame中的OnCreate消息响应函数中添加:
GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION |
MF_DISABLED | MF_GRAYED);
注意:必须在CMainFrame类的构造函数中m_bAutoMenuEnable = FALSE;才会使上述有效。
如何操作整个菜单:
在框架类CMainFrame中的OnCreate消息响应函数中添加:
SetMenu(NULL); //取消整个菜单栏
//重新加载整个菜单栏
CMenu menu; // 创建的是局部的menu,程序运行完要析构
menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&menu);
menu.Detach(); //注意此语句必须加,可防止局部变量析构造成的错误
补充:菜单项状态的维护时依赖于CN_UPDATE_COMMAND_UI消息,谁捕获CN_UPDATE_COMMAND_UI
消息,MFC就在其中创建一个CCmdUI对象。我们可以通过手工或利用ClassWizard在消息映射中
添加CN_UPDATE_COMMAND_UI宏来捕获CN_UPDATE_COMMAND_UI消息。只用于弹出式菜单的菜单项
。依据该消息更新,可以实现某一菜单项的各种操作。
void CMainFrame::OnUpdateEditCut(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(); //使某菜单项可以使用
pCmdUI->>Enable(FALSE); //使某菜单项不能使用
}
或者 if(0==pCmdUI->m_nID); //通过ID判断是否为该菜单项
pCmdUI->>Enable(FALSE);
或者 if(0==pCmdUI->m_nIndex); //通过索引判断是否为该菜单项
pCmdUI->>Enable(FALSE);
注意:当通过索引进行判断时,只能改变菜单项的状态,不能改变工具栏中的状态
实现右键弹出菜单:
一种方式可以在工程菜单中选择添加到工程中的components and controls选项,添加一个
Pop-up Menu。此时右键弹出菜单就已经有了。注意在View类中添加该组件,此时View类中多
了一个函数OnContextMenu(CWnd*, CPoint point),并在此函数的基础上进行修改。
另一种方式是仿造OnContextMenu(CWnd*, CPoint point)函数内的操作,对右键消息响应函数
进行编写。
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);
}
之后在ClassWizard中添加右键中菜单的消息相应函数。
////////////////////////////动态添加菜单
pop菜单的动态操作:
在框架类CMainFrame中的OnCreate消息响应函数中添加:
CMenu menu;
menu.CreatePopupMenu();
//添加一个popup菜单
//GetMenu)->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,"Jazka");
//插入到某一位置的popup菜单
GetMenu()->InsertMenu(2,MF_BYPOSITION | MF_POPUP,(UINT)
menu.m_hMenu,"Jazka");
//为popup菜单添加菜单项
menu.AppendMenu(MF_STRING,111,"Hello");
menu.AppendMenu(MF_STRING,112,"Well");
menu.Detach();
//在pop菜单的某一位置插入一个菜单项
//菜单项加到了最后一栏
GetMenu()->GetSubMenu(0)->AppendMenu(MF_STRING,113,"Welcome");
//菜单项加载到某一指定位置
GetMenu()->GetSubMenu(0)->InsertMenu(ID_FILE_OPEN,
MF_BYCOMMAND | MF_STRING,114,"飞雪");
//删除某一pop菜单
GetMenu()->DeleteMenu(1,MF_BYPOSITION);
//删除某一pop菜单的某一个菜单项
GetMenu()->GetSubMenu(0)->DeleteMenu(2,MF_BYPOSITION);
重绘菜单栏:DrawMenuBar();
CString中选择某一部分的内容:m_strLine.Left(m_strLine.Find(' '));为寻找m_strLine的
空格字符左边的字符串。
当存储一些CString的对象时,用集合类CStringArray,可以动态增加。用ADD(LPCTSTR
newElement)可以增加一个字符串。m_strArray.GetAt(3)来取出一个成员。用m_strArray.GetSize()可以获得集合类的大小。
用CFrameWnd::GetActiveView CView *GetActiveView() const;获取当前视类的指针。
创建和删除一个标记菜单:
在框架类CMainFrame中的OnCreate消息响应函数中添加:
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_CHECKED | MF_BYPOSITION);//创建
或者GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,
MF_UNCHECKED | MF_BYCOMMAND);//删除
创建缺省菜单项:
在框架类CMainFrame中的OnCreate消息响应函数中添加:
GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);//以索引方式
GetMenu()->GetSubMenu(0)->SetDefaultItem (ID_FILE_OPEN,FALSE);//以ID方式
注意:下拉菜单中的分隔栏也占用一个索引号;一个下拉菜单中只能有一个缺省菜单。
创建图形标记菜单:
在框架类CMainFrame中的OnCreate消息响应函数中添加:
bitmap.LoadBitmap(IDB_BITMAP1);
GetMenu()->GetSubMenu(0)->
SetMenuItemBitmaps(0,MF_BYPOSITION,&bitmap,&bitmap);
注意:先通过函数GetSystemMetrics(SM_CXMAXTRACK)和GetSystemMetrics(SM_CYMAXTRACK)来
获知系统图标的大小。
创建菜单屏蔽使用:
在框架类CMainFrame中的OnCreate消息响应函数中添加:
GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION |
MF_DISABLED | MF_GRAYED);
注意:必须在CMainFrame类的构造函数中m_bAutoMenuEnable = FALSE;才会使上述有效。
如何操作整个菜单:
在框架类CMainFrame中的OnCreate消息响应函数中添加:
SetMenu(NULL); //取消整个菜单栏
//重新加载整个菜单栏
CMenu menu; // 创建的是局部的menu,程序运行完要析构
menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&menu);
menu.Detach(); //注意此语句必须加,可防止局部变量析构造成的错误
补充:菜单项状态的维护时依赖于CN_UPDATE_COMMAND_UI消息,谁捕获CN_UPDATE_COMMAND_UI
消息,MFC就在其中创建一个CCmdUI对象。我们可以通过手工或利用ClassWizard在消息映射中
添加CN_UPDATE_COMMAND_UI宏来捕获CN_UPDATE_COMMAND_UI消息。只用于弹出式菜单的菜单项
。依据该消息更新,可以实现某一菜单项的各种操作。
void CMainFrame::OnUpdateEditCut(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(); //使某菜单项可以使用
pCmdUI->>Enable(FALSE); //使某菜单项不能使用
}
或者 if(0==pCmdUI->m_nID); //通过ID判断是否为该菜单项
pCmdUI->>Enable(FALSE);
或者 if(0==pCmdUI->m_nIndex); //通过索引判断是否为该菜单项
pCmdUI->>Enable(FALSE);
注意:当通过索引进行判断时,只能改变菜单项的状态,不能改变工具栏中的状态
实现右键弹出菜单:
一种方式可以在工程菜单中选择添加到工程中的components and controls选项,添加一个
Pop-up Menu。此时右键弹出菜单就已经有了。注意在View类中添加该组件,此时View类中多
了一个函数OnContextMenu(CWnd*, CPoint point),并在此函数的基础上进行修改。
另一种方式是仿造OnContextMenu(CWnd*, CPoint point)函数内的操作,对右键消息响应函数
进行编写。
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);
}
之后在ClassWizard中添加右键中菜单的消息相应函数。
////////////////////////////动态添加菜单
pop菜单的动态操作:
在框架类CMainFrame中的OnCreate消息响应函数中添加:
CMenu menu;
menu.CreatePopupMenu();
//添加一个popup菜单
//GetMenu)->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,"Jazka");
//插入到某一位置的popup菜单
GetMenu()->InsertMenu(2,MF_BYPOSITION | MF_POPUP,(UINT)
menu.m_hMenu,"Jazka");
//为popup菜单添加菜单项
menu.AppendMenu(MF_STRING,111,"Hello");
menu.AppendMenu(MF_STRING,112,"Well");
menu.Detach();
//在pop菜单的某一位置插入一个菜单项
//菜单项加到了最后一栏
GetMenu()->GetSubMenu(0)->AppendMenu(MF_STRING,113,"Welcome");
//菜单项加载到某一指定位置
GetMenu()->GetSubMenu(0)->InsertMenu(ID_FILE_OPEN,
MF_BYCOMMAND | MF_STRING,114,"飞雪");
//删除某一pop菜单
GetMenu()->DeleteMenu(1,MF_BYPOSITION);
//删除某一pop菜单的某一个菜单项
GetMenu()->GetSubMenu(0)->DeleteMenu(2,MF_BYPOSITION);
重绘菜单栏:DrawMenuBar();
CString中选择某一部分的内容:m_strLine.Left(m_strLine.Find(' '));为寻找m_strLine的
空格字符左边的字符串。
当存储一些CString的对象时,用集合类CStringArray,可以动态增加。用ADD(LPCTSTR
newElement)可以增加一个字符串。m_strArray.GetAt(3)来取出一个成员。用m_strArray.GetSize()可以获得集合类的大小。
用CFrameWnd::GetActiveView CView *GetActiveView() const;获取当前视类的指针。
相关文章推荐
- 孙鑫老师教学视频学习笔记――单文档中实现画笔及画刷
- 孙鑫老师教学视频学习笔记——网络套接字
- 孙鑫老师教学视频学习笔记――文字处理
- 孙鑫老师VC++教学视频学习笔记
- 孙鑫老师教学视频学习笔记——对话框
- 看了孙鑫老师的vc视频,今天又在大侠的blog里,即http://blog.csdn.net/hbyufan/ 中发现有相关笔记,转贴学习
- 孙鑫VC++视频学习笔记之5: VC菜单相关编程
- 孙鑫VC++视频学习笔记之5: VC菜单相关编程
- VC++中属性页(向导)的实现 (学习孙鑫老师视频笔记)
- 【C++学习笔记】简单的多线程程序(摘自孙鑫C++教学视频)
- 学习笔记001之[Android开发视频教学].01_06_Android当中的常见控件
- 播布客教学视频_C学习笔记_3_计算手指个数
- 孙鑫教学视频笔记(18)ActiveX 控件
- 郭霖老师androidpn教学视频笔记
- java孙鑫老师视频教程笔记
- 韩顺平_php从入门到精通_视频教程_第20讲_仿sohu首页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理
- 韩顺平PHP学习视频笔记整理004html基本操作续--课后作业
- mars老师[Android开发视频教学]01_23 WIFI网络操作
- 看郭克华老师的视频教学笔记(一)
- 看郭克华老师的视频教学笔记(四)