在C++/MFC框架应用程序里,当浮动工具条被拖离主窗口后,一般都有一个“关闭”按钮,
2013-02-22 14:21
399 查看
在C++/MFC框架应用程序里,当浮动工具条被拖离主窗口后,一般都有一个“关闭”按钮,如图一所示:![]() 图一 本来这个按钮完全是按照Windows应用程序的UI设计规范而设计的,也就是说所有的窗口都应该有一个地方让用户可以关闭这个窗口。但是有的用户提出来不想要这个“关闭”按钮。既然用户有这种需要,那么我们就想办法实现吧...... 首先,我们来确定实现的思路,因为我们要实现的功能与工具条有关,所以涉及的类肯定与 CToolBar有关。其次,为了判断工具条浮动后“关闭”按钮的状态,我们需要一个表示状态的成员变量;第三,实现工具条的浮动特性,需要对工具条窗口的ON_WM_WINDOWPOSCHANGED消息进行处理。这个消息负责CToolBar窗口大小、位置或Z坐标的变化,这里为什么不用WM_SIZE/OnSize来处理窗口大小的改变呢?因为仅当涉及窗口大小改变而不涉及窗口位置也改变时才这样调用,所以当浮动工具条时不一定每次都调用处理WM_SIZE/OnSize。我们可以利用 CControlBar 基类的m_pDockBar成员来调用GetParent()以获取工具条的父窗口。从而改变父窗口的式样――屏蔽系统菜单――来达到我们的目的――去掉“关闭”按钮。 有了思路,下面来看看具体的实现代码,我们先从CToolBar派生一个新类CToolBarEx,因为我们的目的是在浮动工具条时去掉“关闭”按钮,所以仅仅判断工具条是否浮动就可以了,这一点用CControlBar类的属性判断函数可以做到: 1. BOOL IsFloating() const ; 在新类中添加一个成员变量,用它表示“关闭”按钮的状态: 1. BOOL m_bMenuRemoved; 当我们去掉主框架的系统菜单属性时,它的值为TRUE。 接着,我们需要一个m_pDockBar成员父窗口的指针,以便检查它是否确实为CDockFrameWnd,此时我们用到了 m_pDockBar,用它来判断父窗口类型,注意保证它是一个有效指针。这样我们就可以放心地从CToolBar中去掉系统菜单。下面是处理ON_WM_WINDOWPOSCHANGED消息的代码: 01. void CToolBarEx::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) 02. { 03. CToolBar::OnWindowPosChanged(lpwndpos); 04. 05. // should only be called once, when floated. 06. if ( 07. { 08. if ( m_pDockBar && !m_bMenuRemoved ) 09. { 10. CWnd* pParent = m_pDockBar->GetParent(); 11. if ( pParent->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd))) 12. { 13. pParent->ModifyStyle( WS_SYSMENU, 0, 0 ); 14. m_bMenuRemoved = TRUE; 15. } 16. } 17. } 18. else if ( m_bMenuRemoved ) { 19. m_bMenuRemoved = FALSE; 20. } 21. } 下图是最终的运行结果图: ![]() 图二 |
相关文章推荐
- 如何禁用窗口关闭按钮在一个 MFC 多文档界面 (MDI) 应用程序
- 如何禁用窗口关闭按钮在一个 MFC 多文档界面 (MDI) 应用程序
- MFC中按下Button按钮,弹出一个窗口的同时关闭本窗口
- 去掉MFC的MDI程序中的浮动工具条上标题栏中的“关闭”按钮
- MFC 在点击子窗口关闭按钮时同时关闭父窗口
- mfc解决回车键默认关闭窗口的一般方法
- VC++中有关句柄和指针及其转换 1.MFC窗口的句柄和指针的转换 (1) 一般窗口对象都会有一个其对应的句柄变量,所以我们可以取此对象的m_hWnd属性来得到句柄。 (2)
- 【Vegas原创】关闭子窗口,刷新母窗口的一个框架
- VC++删除浮动工具条中“关闭”按钮
- 完成一个GUI应用程序,一个窗口中含有4个按钮,两个label,按照流式布局器进行布局,每个组件之间间隔20px,居右对齐。
- MFC学习(13)解决回车键 ESC 默认关闭窗口的一般方法——续
- qt 关闭一个页面,结束应用程序运行,关闭其他窗口
- 您无法关闭应用程序后,停止调试应用程序的运行 Windows XP 的计算机上的 Visual Studio 中的一个控制台窗口
- MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序
- MFC关于遍历同一个应用程序打开的多个窗口并发送消息
- 通过按钮控件实现MDI新建子窗口(MFC自动生成的视图、文档、子框架共用)
- 浮动窗口代码(带关闭按钮+全屏漂浮)
- javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
- [MFC]解决回车键 ESC 默认关闭窗口的一般方法
- MFC(10)解决回车键 ESC 默认关闭窗口的一般方法