QQ登录

只需一步,快速开始

40上位机VC MFC最大最小化及关闭按钮使用与禁用

[ 复制链接 ]

40上位机VC MFC最大最小化及关闭按钮使用与禁用

40上位机VC MFC最大最小化及关闭按钮使用与禁用

40上位机VC MFC最大最小化及关闭按钮使用与禁用



功能展示

窗口默认创建都会有最大最小化及关闭按钮,如果想让程序在处理某一功能时,禁止使用这三种按钮时,我们就得实现对三个按钮的屏蔽及恢复,我们当前例程就实现了这一功能,效果如图


要点提示
我们例程是通过 API函数GETWINDOWLONG和SETWINDOWLONG来改变窗口风格,设置最大化和最小化按钮的禁用及恢复的;至于关闭按钮我们通过系统菜单对菜单项的操作来实现;GetSystemMenu(); EnableMenuItem()函数的语法我们查阅MSDN获得
LONG GetWindowLong( HWND hWnd, // handle of window int nIndex // offset of value to retrieve );
hWnd窗口句柄 ; nIndex 大于0的偏移量;
LONG SetWindowLong( HWND hWnd, // handle of window int nIndex, // offset of value to set LONG dwNewLong // new value ); dwNewLong 指定的新的值
实现功能
1.新建基于单文档的应用程序,建立六个菜单项关联六个函数用来设置三个按钮的六种状态;六个函数的函数体为
  1. void CMainFrame::OnMenuablemin() //使用最小化按钮
  2. {
  3.         LONG Style;
  4.         //获得窗口风格
  5.         Style = ::GetWindowLong(m_hWnd,GWL_STYLE);
  6.         //设置新的风格
  7.         Style |= WS_MINIMIZEBOX;
  8.         ::SetWindowLong(m_hWnd,GWL_STYLE,Style);

  9. /*        //重画窗口边框
  10.         CRect Rect;
  11.         GetWindowRect(&Rect);        
  12.         ::SetWindowPos(m_hWnd,HWND_TOP,Rect.left,Rect.top,Rect.Width(),Rect.Height(),SWP_DRAWFRAME);
  13. */
  14. }
  15. void CMainFrame::OnMenuablemax() //使用最大化按钮
  16. {
  17.         LONG Style;
  18.         //获得窗口风格
  19.         Style = ::GetWindowLong(m_hWnd,GWL_STYLE);
  20.         //设置新的风格
  21.         Style |= WS_MAXIMIZEBOX;
  22.         ::SetWindowLong(m_hWnd,GWL_STYLE,Style);

  23. /*        //重画窗口边框
  24.         CRect Rect;
  25.         GetWindowRect(&Rect);        
  26.         ::SetWindowPos(m_hWnd,HWND_TOP,Rect.left,Rect.top,Rect.Width(),Rect.Height(),SWP_DRAWFRAME);
  27. */
  28. }
复制代码
  1. void CMainFrame::OnMenuableclose() //使用关闭按钮
  2. {
  3.         //获得系统菜单
  4.         CMenu *pMenu = GetSystemMenu(false);
  5.         //获得关闭按钮ID
  6.         UINT ID = pMenu->GetMenuItemID(pMenu->GetMenuItemCount()-1);
  7.         //使关闭按钮可用
  8.         pMenu->EnableMenuItem(ID,MF_ENABLED);
  9. }
  10. void CMainFrame::OnMenudisclose() //禁用关闭按钮
  11. {
  12.     //获得系统菜单
  13.         CMenu *pMenu = GetSystemMenu(false);
  14.         //获得关闭按钮ID
  15.         UINT ID = pMenu->GetMenuItemID(pMenu->GetMenuItemCount()-1);
  16.         //使关闭按钮无效
  17.         pMenu->EnableMenuItem(ID,MF_GRAYED);
  18.         
  19. }
  20. void CMainFrame::OnMenudismin() //禁用最小化按钮
  21. {
  22.         LONG Style;
  23.         //获得窗口风格
  24.         Style = ::GetWindowLong(m_hWnd,GWL_STYLE);
  25.         //设置新的风格
  26.         Style &= ~(WS_MINIMIZEBOX);
  27.         ::SetWindowLong(m_hWnd,GWL_STYLE,Style);

  28. /*        //重画窗口边框
  29.         CRect Rect;
  30.         GetWindowRect(&Rect);        
  31.         ::SetWindowPos(m_hWnd,HWND_TOP,Rect.left,Rect.top,Rect.Width(),Rect.Height(),SWP_DRAWFRAME);
  32. */
  33. }
复制代码

  1. void CMainFrame::OnMenudismax() //禁用最大化按钮
  2. {
  3.         LONG Style;
  4.         //获得窗口风格
  5.         Style = ::GetWindowLong(m_hWnd,GWL_STYLE);
  6.         //设置新的风格
  7.         Style &= ~(WS_MAXIMIZEBOX);
  8.         ::SetWindowLong(m_hWnd,GWL_STYLE,Style);
  9.         
  10. /*        //重画窗口边框
  11.         CRect Rect;
  12.         GetWindowRect(&Rect);        
  13.         ::SetWindowPos(m_hWnd,HWND_TOP,Rect.left,Rect.top,Rect.Width(),Rect.Height(),SWP_DRAWFRAME);
  14. */        
  15. }

复制代码
我们来演示下功能实现的整个过程
源码及视频下载
(仅在电脑可见)

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:40.上位机VC MFC最大最小化及关闭按钮使用与禁用.rar 
文件大小:119.69 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!

回复

使用道具 举报

快速回复 返回列表 客服中心 搜索