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 ...
随机推荐
- 有关Servlet的生命周期说法正确的有( )。
A.Servlet的生命周期由Servlet实例控制 B.init()方法在创建完Servlet实例后对其进行初始化,传递的参数为实现ServletContext接口的对象 C.service()方法 ...
- Javascript特效代码大全(420个)(转)
转载自:Javascript特效代码大全(420个) 收集资料,以便使用+面试+学习 ├ Cookie脚本 ├ 随访问次数变提示 ├ 集成Cookies ├ 使窗口仅弹出一次 ├ 签名提示程序 ├ ...
- hdu 1348:Wall(计算几何,求凸包周长)
Wall Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- ios开发之 -- 强制横屏
在写项目的时候,会遇到很多稀奇古怪的需求,我就碰到一个写一个网站,需要强制横屏,然后不需要上架,网上看了很多大神的需求,基本都能实现,但是不太好用, 自己参考搞了一个,代码如下: AppDelegat ...
- 当苹果因为UIDevice、udid、uniqueIdentifier而把我们的应用拒之门外invalid binary的时候,呕心沥血解决方法啊
本文转载至 http://blog.csdn.net/macmini/article/details/16341669 当我们辛辛苦苦把应用或者游戏做好的时候,满怀激动地把应用提交上去给苹果大大,谁知 ...
- vs 代码自动对其(注释,等号...)
插件:Code alignment 下载地址
- c#基础 第六讲
烧开水 先询问:“是否要烧开水(Y/N)” 是的话执行--0°--100°(30°---水温了,50°---水热了,80°---水快开了,100°---水已经开了, 结束.) 判断 循环 选择 跳转 ...
- ios 让两个tableView同时处于选中状态
- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { [_l ...
- 修改 GitHub 仓库默认显示的项目语言类型
GitHub 是采用 Linguist 来自动识别仓库代码应该归为哪一类的,也就是根据项目里文件数目最多的文件类型来识别项目类型. 解决办法是:在仓库的根目录下创建或修改 .gitattributes ...
- style,currentStyle和getComputedStyle的区别
样式表有三种方式 内嵌样式(inline Style) :是写在Tag里面的,内嵌样式只对所有的Tag有效. 内部样式(internal Style Sheet):是写在HTML的里面的,内部样式只对 ...