如何去掉浮动工具条中的关闭按钮

在C++/MFC框架应用程序里,当浮动工具条被拖离主窗口后,一般都有一个“关闭”按钮,如图一所示:


图一 

本来这个按钮完全是按照Windows应用程序的UI设计规范而设计的,也就是说所有的窗口都应该有一个地方让用户可以关闭这个窗口。但是有的用户提出来不想要这个“关闭”按钮。既然用户有这种需要,那么我们就想办法实现吧......

首先,我们来确定实现的思路,因为我们要实现的功能与工具条有关,所以涉及的类肯定与 CToolBar有关。其次,为了判断工具条浮动后“关闭”按钮的状态,我们需要一个表示状态的成员变量;第三,实现工具条的浮动特性,需要对工具条窗口的ON_WM_WINDOWPOSCHANGED消息进行处理。这个消息负责CToolBar窗口大小、位置或Z坐标的变化,这里为什么不用WM_SIZE/OnSize来处理窗口大小的改变呢?因为仅当涉及窗口大小改变而不涉及窗口位置也改变时才这样调用,所以当浮动工具条时不一定每次都调用处理WM_SIZE/OnSize。我们可以利用 CControlBar 基类的m_pDockBar成员来调用GetParent()以获取工具条的父窗口。从而改变父窗口的式样——屏蔽系统菜单——来达到我们的目的——去掉“关闭”按钮。

有了思路,下面来看看具体的实现代码,我们先从CToolBar派生一个新类CToolBarEx,因为我们的目的是在浮动工具条时去掉“关闭”按钮,所以仅仅判断工具条是否浮动就可以了,这一点用CControlBar类的属性判断函数可以做到: BOOL IsFloating() const;   在新类中添加一个成员变量,用它表示“关闭”按钮的状态: BOOL m_bMenuRemoved;当我们去掉主框架的系统菜单属性时,它的值为TRUE。

接着,我们需要一个m_pDockBar成员父窗口的指针,以便检查它是否确实为CDockFrameWnd,此时我们用到了 m_pDockBar,用它来判断父窗口类型,注意保证它是一个有效指针。这样我们就可以放心地从CToolBar中去掉系统菜单。下面是处理ON_WM_WINDOWPOSCHANGED消息的代码: void CToolBarEx::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos)
{
  CToolBar::OnWindowPosChanged(lpwndpos);
  
  // should only be called once, when floated.
  if( IsFloating() )
  {
    if( m_pDockBar && !m_bMenuRemoved )
    {
      CWnd* pParent = m_pDockBar->GetParent();
      if( pParent->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)))
      {
        pParent->ModifyStyle( WS_SYSMENU, 0, 0 );
        m_bMenuRemoved = TRUE;
      }
    }
  }
  else if( m_bMenuRemoved ) {
    m_bMenuRemoved = FALSE;
  }
}   
下图是最终的运行结果图:


图二

时间: 2024-10-03 13:13:18

如何去掉浮动工具条中的关闭按钮的相关文章

VC++删除浮动工具条中“关闭”按钮

在Visual C++自动生成的MFC框架应用程序中,当浮动工具条被拖离主框架窗口后,一般都会在工具条的右上角有一个"关闭"按钮,应该说这个按钮完全是按照Windows应用程序的用户界面(UI)设计规范而设计的,也就是说所有的窗口都应该有一个地方让用户可以关闭这个窗口.但是有的开发人员偏偏提出来不想要这个"关闭"按钮.本实例通过自定一个扩展的工具条类,实现了删除工具条中"关闭"按钮的目的.程序编译运行后的界面效果如图一所示: 图一.没有"

如何定制浮动工具条

关于这个问题,其实网上可以找到很多这方面的文章和例子.尤其是在MSDN上,你可以查阅到非常详细的内容.为简单起见,本文这里只将需要定制的代码列出来. 第一步: 创建一个MDI工程,一路都选择默认选项.  第二步: 在 CMainFrame 类的头文件中添加下列方法以及变量声明: // Operations public: void DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf); protected: // control bar em

jquery toolbar与网页浮动工具条具体实现代码

toolbar 网页浮动工具条非常实用的一个功能,下面为大家介绍下使用jquery如何快速做到 jquery 实现toolbar与网页浮动工具条jQuery实现方法  /*  基本StructureWe'll更新index.php教程的HTML代码和对新闻联播style.css教程中的CSS代码.    我们建立了一个固定的面板(ID为工具栏组)两个浮动方面,我们将在第二个步骤与他们的图标和提示气泡(左),一个快速菜单和"隐藏按钮列表"(添加到隐藏工具栏).  我们还可以期待一个&qu

jquery toolbar与网页浮动工具条具体实现代码_jquery

jquery 实现toolbar与网页浮动工具条jQuery实现方法 /* 基本StructureWe'll更新index.php教程的HTML代码和对新闻联播style.css教程中的CSS代码. 我们建立了一个固定的面板(ID为工具栏组)两个浮动方面,我们将在第二个步骤与他们的图标和提示气泡(左),一个快速菜单和"隐藏按钮列表"(添加到隐藏工具栏). 我们还可以期待一个"显示按钮",它是有用的,当面板隐藏,我们要重新激活它.基于这个原因,我们添加id为toolb

MFC单文档,浮动工具条和浮动菜单消失问题

问题描述 用VS2010创建一个标准的经典的单文档程序,默认的工具条和菜单是可以浮动的,就是可以停靠在任何位置.问题来了:当工具条菜单条不停靠在窗口边上,而是浮动到桌面其他位置时,这时当主窗口失去焦点(比如:在桌面其他位置点击鼠标),工具条和菜单条就消失了,不显示了.这个效果是不希望出现的,我想,任何时候,浮动的工具条和菜单条都应该显示才对,有无高手解决此问题? 解决方案

&#106avascript制作浮动的工具条

浮动|工具条 该程序是我从别人的网站上分析出来的!由于对方的网站使用了框架,而且又取消了鼠标的右键功能,因此费了好长时间! 当你浏览该页时,工具条始终浮在左上角,你若不喜欢,可以自己调节摆放位置!若想多页使用该代码,可以把JSP程序部分写成JS的文件,然后再通过调用来实现,有不明白的地方,欢迎各位与我交流! 演示地址:http://www.85time.com/softuse/bar.htm <HTML> <HEAD> <TITLE></TITLE> <

Javascript制作浮动的工具条

javascript|浮动|工具条 该程序是我从别人的网站上分析出来的!由于对方的网站使用了框架,而且又取消了鼠标的右键功能,因此费了好长时间! 当你浏览该页时,工具条始终浮在左上角,你若不喜欢,可以自己调节摆放位置!若想多页使用该代码,可以把JSP程序部分写成JS的文件,然后再通过调用来实现,有不明白的地方,欢迎各位与我交流! 演示地址:http://www.85time.com/softuse/bar.htm <HTML> <HEAD> <TITLE></TI

js实现带关闭按钮始终显示在网页最底部工具条的方法

 这篇文章主要介绍了js实现带关闭按钮始终显示在网页最底部工具条的方法,是非常实用的javascript固定效果,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了js实现带关闭按钮始终显示在网页最底部工具条的方法.分享给大家供大家参考.具体如下: 这是一款很实用的代码,给网页加入一个始终显示在浏览器窗口底部的工具栏,可以在上面放上公告,联系人等等信息,此代码的工具条还带有关闭按钮,可以随时关闭   代码如下: <!DOCTYPE html PUBLIC "-//W3C//

jQuery实现可关闭固定于底(顶)部的工具条菜单效果_jquery

本文实例讲述了jQuery实现可关闭固定于底(顶)部的工具条菜单效果.分享给大家供大家参考,具体如下: 这是一款可关闭始终在页面底部的工具条菜单,浮动在页面顶部的大家见的比较多了,本款从形式上来说与其它的没什么差别,只是浮动在页面的最底部,带一关闭按钮,一般来说,此效果可用作广告条.网站提示以及一些需要用户特别注意的地方. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-fixed-buttom-adv-line-codes/ 具体