屏蔽掉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);

CDockablepane风格设置的更多相关文章

  1. 谈谈CListCtrl 扩展风格设置方法-SetExtendedStyle和ModifyStyleEx 比較

    谈谈CListCtrl 扩展风格设置方法 --------------------------------------SetExtendedStyle和ModifyStyleEx 比較 对于刚開始学习 ...

  2. android studio eclipse keymap theme 快捷键 主题风格设置

    android studio eclipse keymap theme 快捷键 主题风格设置 将Android Studio的快捷键设置与eclipse一致,使用习惯的快捷键才顺手.Mac系统下:进入 ...

  3. 可视化库-seaborn-布局风格设置(第五天)

    1. sns.set_style() 进行风格设置, sns.set() 进行设置的重置, 五种风格 # 1.darkgrid# 2.whitegrid# 3.dark# 4.white# 5 tic ...

  4. 5-1可视化库Seabon-整体布局风格设置

    In [1]: import seaborn as sns import numpy as np import matplotlib as mpl import matplotlib.pyplot a ...

  5. Intellij IDEA 13.1.3 字体,颜色,风格设置

    作者QQ:1095737364 打开file-->settings,然后根据提示完成设置,当然,可以根据自己的爱好设置自己的风格,那个工程区的背景我还没有找到在什么地方,如果你找到了麻烦告诉我一 ...

  6. Android 圆形ProgressBar风格设置

    Android系统自带的ProgressBar风格不是很好,如果想自己设置风格的话,一般有几种方法.首先介绍一下第一种方法通过动画实现.在res的anim下创建动画资源loading.xml: < ...

  7. 黄聪:Xmind修改默认字体风格设置

    Xmind是一款非常好用的思维导图软件,但默认字体使用宋体不够好看,软件本身不支持设置默认字体,但通过修改配置文件达到配置默认字体的目的 默认控制风格的配置文件位置 XMind\plugins\org ...

  8. Eclipse代码风格设置

    在编写代码的过程中,代码的呈现形式是通过eclipse的Formatter配置文件所控制的.我们可以按照自己的习惯生成属于自己的代码风格配置文件,方便规范以后的代码编写形式.具体的操作步骤如下所示:( ...

  9. PHPStorm IntelliJ IDEA 代码缩进风格设置

    关于缩进风格,我还是觉得4空格比tab好 File -> Settings -> Editor -> Code Style: 如图,把Detect and use exsiting ...

随机推荐

  1. Infix to postfix without '(' and ')'

    #include<iostream> #include<stack> #include<string> #include<deque> using na ...

  2. xcb编译

    sed -i "s/pthread-stubs//" configure && ./configure $XORG_CONFIG \ --enable-xinput ...

  3. ASP.NET MVC 实现AJAX跨域请求的两种方法

    通常发送AJAX请求都是在本域内完成的,也就是向本域内的某个URL发送请求,完成部分页面的刷新.但有的时候需要向其它域发送AJAX请求,完成数据的加载,例如Google. 在ASP.NET MVC 框 ...

  4. CentOS 6下的VPN搭建

    PPTP 全称为 Point to Point Tunneling Protocol — 点到点隧道协议,是VPN协议中的一种.虚拟专用网(VPN)被定义为通过一个公用网络(通常是因特网)建立一个临时 ...

  5. 华为配置SSH登陆详细步骤

    理解下SSH登录的过程: 1.建立目的端口为22的TCP连接 2.协商SSH版本 3.协商密钥和算法 4.会话建立 下面为server端的详细配置步骤: 1.创建本地RSA密钥对 rsa local- ...

  6. wcf中的使用全双工通信

    wcf中的契约通信默认是请求恢复的方式,当客户端发出请求后,一直到服务端回复时,才可以继续执行下面的代码. 除了使用请求应答方式的通信外,还可以使用全双工.下面给出例子: 1.添加一个wcf类库 2. ...

  7. 解决Eclipse无法添加Tomcat服务器的问题

    eclipse配置好以后,如果Tomcat服务器在文件系统的位置发生了变化,则需要重新配置Tomcat服务器,这时会遇到无法设置服务器的问题 即图中框起来的部分无法进行操作,这时需要 关闭Eclips ...

  8. CentOS的KVM实践(虚拟机创建、网桥配置、Spice)

    最近公司准备上一套基于openstack的虚拟桌面系统,作为该项目的负责人,觉得有必要自己实践一下,该系统的搭建.最基础的就是需要了解基于linux的kvm的实践. 一.基础软件包准备 系统是采用px ...

  9. 不自动切换eclipse视图

    刚开始使用eclipse进行调试时,当弹出"Confir Perspective Switch"视图时,不小心点了“No”.以后每次debug的时候都不切换到debug视图. 后发 ...

  10. 2012-11-17 12:28 用MFC实现的计算器(详细版)

    这篇文章里通过计算器的简单实现,让大家能够了解一般对话框应用程序开发的基本流程 要求:编写简单的计算器应用程序,要求利用按钮进行加.减.乘,除操作,在对话框输出计算机结果. 下面结合操作步骤,讲解对话 ...