1.菜单栏和工具栏创建
手动创建:资源视图->menu 文件新建菜单;
在主菜单里面单击新建菜单和ID
菜单名称快捷键:(1)画图(&L)\tCtrl+L;
(2)在Accelator文件添加快捷键操作。
(3)注意如果建的项目是菜单栏和工具栏的项目快捷键和工具栏可能显示不出来,解决办法:在view类里面插入方法ExitInstance插入代码AfxOleTerm(false);
this->CleanState(); //清空注册表,运行两次
如果项目使用经典菜单再可以显示。
菜单栏的方法:
void Cm4View::OnDrawEllipse()
{
// TODO: 在此添加命令处理程序代码
m_DrawType = DT_ELLIPSE; //成员变量记录子菜单是画椭圆
}
两个消息:
void Cm4View::OnUpdateDrawPen(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_DrawType == DT_PEN); //1.当子菜单是画笔时,设置子菜单打钩
pCmdUI->Enable(false); //2.禁用子菜单
// TODO: 在此添加命令更新用户界面处理程序代码
}
其他代码创建:(1)MFC四个基类:APP类(对应用程序管理)、Cview类(客户界面类)、Cdocument(数据存储)、CFrameWnd -menu类(标题栏、菜单栏、工具栏管理);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point); //afx_msg代表是一个消息,无实意
ON_COMMAND(ID_DRAW_RECT, &Cm4View::OnDrawRect) //ON_COMMAND是消息映射,前面编号的消息映调用函数
enum ID_MSG {
ID_MSG_DRAW_LINE = WM_USER + 1, //定义子菜单的名称编号,WM_USER是系统保留的消息id
ID_MSG_DEAW_RECT,
ID_MSG_DRAW_ELLIPSE,
ID_MSG_DRAW_PEN
};
2.新建命令行菜单、工具栏
(1)命令行菜单:①新建菜单文件,
② 添加私有成员privvate Menu m_Menu对象,m_Menu.LoadMenu(IDR_MENU2);//加载进来BOOL Cm4View::PreCreateWindow(CREATESTRUCT& cs)
{
m_Menu.LoadMenu(IDR_MENU2);//初始化窗口,加载进来
//按右键响应消息
return CView::PreCreateWindow(cs);
}
③添加右键点击时的消息
void Cm4View::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CMenu* mu = m_Menu.GetSubMenu(0); //获得定义菜单的子菜单,还是个一级菜单
ClientToScreen(&point); //屏幕坐标系转换应用程序坐标系
mu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
CView::OnRButtonUp(nFlags, point);
}
(2)工具栏创建:①在Toolbars文件创建用bit文件画出快捷键,将快捷键ID和菜单栏的ID对应;