屏蔽掉pane右上角的几个按钮

即将CDockablePane右上角的三个按钮屏蔽。

1            去掉关闭按钮

在CDockablePane的派生类中,重写方法CanBeClosed即可:

  virtual BOOL CanBeClosed() const { return FALSE; } 

禁止拖动Pane,禁止浮动

在CDockablePane的派生类中,重写以下任一方法即可:

  virtual BOOL FloatPane(CRect rectFloat, AFX_DOCK_METHOD dockMethod = DM_UNKNOWN, bool bShow = true) { return FALSE; }      virtual BOOL CanFloat() const { return FALSE; }

 

重写CanFloat后可能会发现重新运行时,窗口不会像原先吸附在原来的位置,而是默认移动到了最下端,显然这不是想要的。
    如果不要浮动风格,那怎么办呢?之所以会浮动是因为可以点击标题栏和下方的边框,那我们去掉标题栏风格就是了。但是传统的去掉WS_CAPTION风格是没有用的(如果你做到了,请告诉我),所以只能在Create的时候将第4个参数bHasGripper设置为FALSE,标题栏就不会出现了。
    当然啦,网上还有说重写GetCaptionHeight,virtual int
GetCaptionHeight() const { return 0;} 就可以了,但这种旁门左道是不持久的,双击窗口的下边框,窗口又浮了出来,那怎么办呢?还是有办法。直接找到父类CBasePane里边去,发现有一个
  virtual
BOOL FloatPane(CRect rectFloat, AFX_DOCK_METHOD dockMethod = DM_UNKNOWN, bool
bShow = true)

  { return FALSE; }
    没错!把它重写在继承窗口类里边,运行。发现双击下边的边框,它再也俏皮不起来了。

去掉自动掩藏按钮

  在CMainFrame::OnCreate()中将下面的一句代码注释掉即可:

  1. //EnableAutoHidePanes(CBRS_ALIGN_ANY);

  在CDockablePane的派生类中,重写CanAutoHide方法即可

   virtual BOOL CanAutoHide() const { return FALSE; }

去掉下拉箭头按钮

  在CMainFrame::OnCreate()中将下面的一句代码添加上即可:

  GetDockingManager()->EnableDockSiteMenu(FALSE);

CTabbedPane
中关闭按钮的去除

  CTabbedPane其实也是一个CDockablePane,查看CDockablePane及基类的源码得知,CTabbedPane右上角的关闭按钮与AFX_CBRS_CLOSE风格对应,  将AFX_CBRS_CLOSE风格去掉即可。继续查看代码,有GetControlBarStyle和SetControlBarStyle函数,所以想法可行,如下所示:

  CDockablePane* pTabbedBar = NULL;

  m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar);    

  DWORD dwStyle = pTabbedBar->GetControlBarStyle();

  pTabbedBar->SetControlBarStyle( dwStyle & ~AFX_CBRS_CLOSE); // 去除AFX_CBRS_CLOSE风格

  m_wndProperties.EnableDocking(CBRS_ALIGN_ANY)

CDockablePane的创建函数如下:
virtual BOOL Create(LPCTSTR lpszCaption, CWnd* pParentWnd, const RECT& rect, BOOL bHasGripper, UINT nID, DWORD dwStyle, DWORD dwTabbedStyle = AFX_CBRS_REGULAR_TABS, DWORD dwControlBarStyle = AFX_DEFAULT_DOCKING_PANE_STYLE, CCreateContext* pContext = NULL)

而其中的DWORD dwControlBarStyle就有很大作用,dwControlBarStyle默认值为AFX_DEFAULT_DOCKING_PANE_STYLE,即

static const DWORD AFX_DEFAULT_DOCKING_PANE_STYLE = AFX_CBRS_FLOAT | AFX_CBRS_CLOSE | AFX_CBRS_RESIZE | AFX_CBRS_AUTOHIDE;

你可以修改这个值,你想要哪个功能就用哪个。禁止移动就不要AFX_CBRS_FLOAT ,改变大小就不要AFX_CBRS_RESIZE

如,只带关闭的CDockablePane:
m_ControllerInput.Create(strName, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_CONTROLLERINPUT, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI, AFX_CBRS_REGULAR_TABS, AFX_CBRS_CLOSE);

最新文章

  1. java Http编程小结
  2. 安装数据库Mocrosoft.NET Application Security警告
  3. Linux不使用useradd创建用户
  4. ERP员工入登记查询(六)
  5. vs2015编译boost 64位
  6. WWF3入门<第一篇>
  7. SQL正常工作日上班安排
  8. Google 面经 09/26
  9. python 之日期时间处理
  10. because of many connection errors; unblock with 'mysqladmin flush-hosts
  11. JS - 数据类型的值拷贝函数(深拷贝)
  12. qt 安装包生成2
  13. 优雅的使用列表推导式和lambda
  14. 未能加载文件或程序集“Benlai.SOA.Framework.Common, Version=1.4.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。
  15. SignalR WebSocket Error during WebSocket handshake: net::ERR_CONNECTION_RESET
  16. 解决UNIGUI字体太小的问题
  17. 115道Java经典面试题(面中率最高、最全)
  18. smarty模板的配置
  19. matlab一些函数
  20. python实例、类方法、静态方法

热门文章

  1. Excel教程(5) - 日期与时间函数
  2. javascript动画效果之透明度(修改版)
  3. 使用observable数组(Working with observable arrays)
  4. DLNA
  5. WPFbutton样式
  6. grub引导centos
  7. bootstrap ch2清除浮动+12
  8. zencart 后台目录产品黄色icon_yellow_on.gif 解决方案
  9. hdu_2446_Shell Pyramid(数学,二分)
  10. HDU2519:新生晚会