MFC学习笔记5 单文档菜单

一。消息分类

  • 命令消息:WM_COMMOND 菜单处理函数
  • 标准消息:view->属性->消息
  • 通告消息:控件处理函数

 

二。菜单操作

在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中进行菜单操作

 1     //标志
 2     //获取菜单
 3     //或者主菜单
 4     CMenu* menu = GetMenu(); 
 5     //获取第一个子菜单
 6     CMenu* fileMenu = menu->GetSubMenu(0); 
 7     //标记“新建”,第一个若下标,则MF_BYPOSITION
 8     fileMenu->CheckMenuItem(0, MF_BYPOSITION | MF_CHECKED);
 9     //标记“打开”,第一个若ID,则MF_BYCOMMAND
10     fileMenu->CheckMenuItem(ID_FILE_OPEN, MF_BYCOMMAND | MF_CHECKED);
11 
12     //设置默认项,加粗,一个菜单只有一个默认项
13     //FALSE:ID
14     //TRUE:位置
15     fileMenu->SetDefaultItem(ID_FILE_SAVE, FALSE);
16     //变灰
17     //需要CFrameWnd::m_bAutoMenuEnable = FALSE;
18     fileMenu->EnableMenuItem(5, MF_BYPOSITION | MF_DISABLED);
19     
20     //移除菜单
21     SetMenu(NULL);
22 
23     //加载菜单
24     CMenu menu2;
25     menu2.LoadMenuW(IDR_MENU1);
26     SetMenu(&menu2);
27     //分离
28     menu2.Detach();    

 

点击B,更新A是否高亮显示

1.为A添加事件处理函数

//菜单更新是自动更新的,通过标志位
void CMainFrame::OnUpdateA(CCmdUI* pCmdUI)
{
    // TODO: 在此添加命令更新用户界面处理程序代码
    if (m_isUpdate == TRUE)
    {
        pCmdUI->Enable(TRUE);
    }
    else {
        pCmdUI->Enable(FALSE);
    }
}

2.B添加事件处理函数

1 void CMainFrame::OnB()
2 {
3     // TODO: 在此添加命令处理程序代码
4     m_isUpdate = !m_isUpdate;  //点击更新标志位
5 }

 

三。左键弹出菜单

 1 void CMenuView::OnLButtonDown(UINT nFlags, CPoint point)
 2 {
 3     // TODO: 在此添加消息处理程序代码和/或调用默认值
 4 
 5     //创建菜单项
 6     CMenu menu;
 7     menu.LoadMenuW(IDR_MENU1);
 8     //获取第一个子菜单
 9     CMenu* subMenu = menu.GetSubMenu(0);
10 
11     //坐标转换
12     ClientToScreen(&point); 
13     //子菜单作为快捷菜单,右击菜单
14     subMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,
15         point.x, point.y, this);
16     
17     CView::OnLButtonDown(nFlags, point);
18 }

 

四。动态更新窗口图标

1.首先在资源中导入图标ico,在class CMainFrame : public CFrameWnd中添加图标数组

 

2.在OnCreate中创建定时器,并生成处理函数

 

 1 void CMainFrame::OnTimer(UINT_PTR nIDEvent)
 2 {
 3     // TODO: 在此添加消息处理程序代码和/或调用默认值
 4     static int i = 0;
 5     //修改标题
 6     SetClassLong(m_hWnd, GCL_HICON, (LONG)icon[i]);
 7     i++;
 8     if (i == 4)
 9         i = 0;
10     CFrameWnd::OnTimer(nIDEvent);
11 }

 

转载于:https://www.cnblogs.com/sclu/p/11571469.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值