CCoolBar 的替代方案 CDockablePane。
(阅读受众需有一定MFC知识储备。)
(技术支持:http://www.cnblogs.com/shuhaoc/archive/2011/06/26/cdockableform.html)
在以往很多使用CCoolBar实现窗口停靠功能,但是在VS2010中编译CCoolBar的时候会出现很多错误,我的小白也不知道如何解决。
我看到在CSDN以及其他论坛都有人发帖询问如何解决CCoolBar在VS2010 中编译错误,但是始终没有人解答。
近日偶然搜到到CDockablePane可有类似的功能,所以打算写个记录贴。记录CDockablePane的使用。
第一步: CDockablePane的简单介绍。 CDockablePane是MFC的一个类 ,至于到哪个版本的MFC才出现这个类我不清楚。
不过可以肯定的是VS2010中MFC有这个类。VC6的MFC中没有这个类,不然大家也不会在VC6中使用CCoolBar 了。
窗格是窗格的意思,Dockable是可停靠的意思。合起来就是可停靠的窗口 ,是不是和CCoolBar一样? 那太一样了,简直是一个妈生的。
估计开发CCoolBar这哥们去了微软了。
想象一下,我们实例化一个CDockbalePane的对象,然后将对话框放在里面,那是太爽了。一下子程序的窗口脉络就清晰起来。
而且后续的窗口内部的消息的处理也好办了。
第二步: CDockablePane的继承和成员。 http://msdn.microsoft.com/zh-cn/library/bb984433.aspx
继承关系如下(来自MSDN)
CObject CCmdTarget CWnd CBasePane CPane CDockablePane
成员如下(来自MSDN)见链接
http://msdn.microsoft.com/zh-cn/library/bb984433.aspx
第三步:正式开始使用
A:使用VS2010创建一个单文档MFC程序,创建完毕之后编译。确认这一步没有出错。
B 通过类向导 创建一个继承自CDockablePane的类。
名字就叫 CMyDockablePane
创建完毕之后编译,应该是没有错误的。
C:在CMainFrame头文件中实例化一个对象,当然是CMyDockablePane的对象。
当然需要在CMainFrame头文件添加一个头文件 #include
"MyDockablePane.h"
public:
CMyDockablePane m_MyDockablePane;
D:在CMainFrame的OnCreate函数中调用CMyDockablePane的Create函数创建窗格。
代码如下:
if (!m_MyDockablePane.Create(_T("面板"), this, CRect(0, 0, 200, 200), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN
| CBRS_LEFT | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create LeftPane\n");
return -1;
}
m_MyDockablePane.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_MyDockablePane);
在这个时候就可以直接编译运行了。
效果如下。
E
:调用CMyDockablePane的EnableDocking函数配置可停靠位置。
F
:调用CMyMainFrame的DockPane函数停靠此窗格。
待续
CCoolBar 的替代方案 CDockablePane。的更多相关文章
- CSS3魔法堂:CSS3滤镜及Canvas、SVG和IE滤镜替代方案详解
一.前言 IE特有的滤镜常常作为CSS3各种新特性的降级处理补充,而Adobe转向HTML5后与Chrome合作推出CSS3的Filter特性,因此当前仅Webkit内核的浏览器支持CSS3 F ...
- Microsoft Azure Point to Site VPN替代方案
Microsoft Azure提供了Point to Site VPN,但有时候这并不能满足我们的需求,例如:Point to Site VPN是SSTP VPN,只能支持Window客户端拨入,而且 ...
- CSS3魔法堂:CSS3滤镜及Canvas、SVG和IE滤镜替代方案详解[转]
一.前言 IE特有的滤镜常常作为CSS3各种新特性的降级处理补充,而Adobe转向HTML5后与Chrome合作推出CSS3的Filter特性,因此当前仅Webkit内核的浏览器支持CSS3 F ...
- Base: 一种 Acid 的替代方案
原文链接: BASE: An Acid Alternative Pdf下载链接: Base 数据库 ACID,都不陌生:原子性.一致性.隔离性和持久性,这在单台服务器就能搞定的时代,很容易实现,但是到 ...
- udid替代方案
转自http://www.cnblogs.com/zhulin/archive/2012/03/26/2417860.html UDID替代方案 背景: 大多数应用都会用到苹果设备的UDID号,U ...
- Windows应用替代方案接龙
使开源软件的优势: 开源安全产品的开发.测试和发布过程完全是透明的,同时提供产品的源代码及部分的文档.通过阅读源代码,大家可以清楚地了解开源安全技术的工作原理和实现方法,在选择开源安全技术时更有把握, ...
- MEAN实践——LAMP的新时代替代方案(上)
摘要:90 年代,LAMP 曾风靡一时,然而随着需求的变迁和数据流量的激增,LAMP 已不可避免的走下神坛.近日,在 MongoDB Blog 中,Dana Groce 介绍了一个基于新时代架构的实践 ...
- Android app Splash页的替代方案
一般的App想要显示公司的log什么的,都会在启动的第一个页面显示,就是SplashActivity. 目前在看到一个替代SplashActivity的方案. 使用SplashActivity的时候, ...
- OpenSessionInViewFilter 的配置及替代方案(转)
鸣谢:http://justsee.iteye.com/blog/1174999,http://blog.csdn.net/sunsea08/article/details/4545186 Sprin ...
随机推荐
- C++ 匿名对象的生命周期
//匿名对象的生命周期 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class Poin ...
- Linux 串口编程
今天对应用层串口编程进行了验证.程序来源于以下参考链接,自己进行了一些注释和更改,记录于此. Tony Liu, 2016-6-17, Shenzhen 参考链接 https://www.ibm.co ...
- Mac终端Screen命令使用指南
(1)创建会话 使用命令“screen -S RunWork”来创建一个screen会话,命令执行之后,就会得到一个新的shell窗口,为了便于标示可以用快捷键Ctrl-a A(就是按下Ctrl+a键 ...
- AuthorizeAttribute示例
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- Oracle 10g 数据库手动创建步骤
Oracle 数据库手动创建步骤 编写初始化参数文件 设置操作系统环境变量 创建实例 以管理员身份连接数据库 启动实例 create database 创建数据库 运行数据字典脚本 Oracle的网络 ...
- 编程之美 set 17 拈游戏分析 (2)
题目 有 N 块石头河两个玩家 A 和 B. A 先将石头分成若干堆, 然后按照 BABABA... 的顺序轮流取石块, 能将剩下的石头依次取光的玩家获胜. 每次取石头时, 每个玩家只能取一堆的 m( ...
- 第六篇:二维数组的传输 (host <-> device)
前言 本文的目的很明确:介绍如何将二维数组传递进显存,以及如何将二维数组从显存传递回主机端. 实现步骤 1. 在显存中为二维数组开辟空间 2. 获取该二维数组在显存中的 pitch 值 (cudaMa ...
- js 匿名函数-立即调用的函数表达式
先提个问题, 单独写匿名函数为什么报错?return 匿名函数 为什么不报错? 如图: 第二种情况在 f 还没有执行的时候,就报错了,,,当然这得归因于函数声明语句声明提前(发生在代码执行之前)的原因 ...
- CentOS6.7 通过yum在线安装MySQL5.7
一.安装1.检测系统是否自带安装mysql yum list installed | grep mysql 发现系统自带依赖库:mysql-libs.x86_64 2.删除系统自带的mysql及其依赖 ...
- Hadoop伪分布安装详解(五)
目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...