最近看到一句话:

×××××××××××××××××××××××××××××××××××××××××××

CDockablePane是一个通用窗口容器,它主要有两个用途:在一个框架中悬浮或者停靠窗口。
在复杂布局的应用程序中,它可以显示或隐藏所装载的窗口,为应用程序窗口提供额外的空间。

×××××××××××××××××××××××××××××××××××××××××××

上面说的事呢 感觉还是不错的。于是乎开始测试。

××××××××××××××××××××××××××××

Q1:窗口的容器是个什么玩意?

A1:也许就是把一个窗口放入到里面去。然后这个窗口就可以牛X了。这种牛X表现在窗口可以随意停靠了。类似VS2010里面的窗口的那种感觉。

××××××××××××××××××××××

既然如此开始测试吧。

第一步:在Win7  64位系统里面  使用VS2010创建一个单文档MFC程序,然后编译测试通过后进行下一步。

第二步:既然这个什么CDockablePane可以做为一个窗口的箩筐使用,那咱们就创建一个窗口。创建什么样的窗口呢?

简单点吧。。直接插入一个对话框吧。

找到资源视图,右击Dialog插入一个对话框。在属性里面把个这个对话框的参数稍微改一下。

Caption ->DialogGsz,style->child,border->none。就是把这个对话框的名字,风格,边框 修改一下。

ID->IDD_DIALOG_GSZ

第三步:添加一个类 :CDockablePaneGsz

这个类呢 继承自CDockablePane。这个为啥要添加一个继承在CDockablePane的类的 而不是直接去修改CDockablePane呢? 鄙人认为是CDockablePane是微软自己的东西,

很是金贵,轻易不要更改。所以咱们继承一个过来。咱自己的东西想怎么折腾都可以。大不了删掉重做。

第四步 :经过一番波折,咱们有了CDockablePanegGsz这个继承自CDockablePane的类。也有一个对话框的类。话说这筐也有了,萝卜也有了。那就放进入呗。

哦! 差点忘了。我们刚才这是创建了一个对话框资源,却没有给予这个资源创建类。罪过 罪过 。  右击刚才的那个对话框,创建一个继承CDialgEx的类CDialogDockbablePaneGsz。至此萝卜有了。开始放:

A:先在CDockablePanegGsz的头文件里面包含萝卜的的头文件。#include "DialogDockbablePaneGsz.h"

B:然后在头文件里面实例化一个对象  CDialogDockbablePaneGsz  m_DialogDockbablePaneGszMain;

至此萝卜完成放进入了。

第五步:萝卜既然进来了,就要对萝卜做一些 操作。 是切还是剁  是红烧还是清蒸。 总是要做的事情吧  不然把它放进来干嘛?

做啥事呢?客官你别急  。。这就来了。。

A:在CDockablePanegGsz的OnCreate函数里面创建并显示对话框

问:我这找不到OnCreate函数啊

答:见下图

 int CDockablePaneGsz::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDockablePane::OnCreate(lpCreateStruct) == -)
return -; // TODO: 在此添加您专用的创建代码
m_DialogDockbablePaneGszMain.Create(IDD_DIALOG_GSZ,this);
m_DialogDockbablePaneGszMain.ShowWindow(SW_SHOW);
return ;
}

第六步:这个CDockablePaneGsz所在的窗口销毁的时候,里面的萝卜(也就是那个基于对话框创建的窗口)也被销毁

 void CDockablePaneGsz::OnDestroy()
{
CDockablePane::OnDestroy();
m_DialogDockbablePaneGszMain.DestroyWindow();
// TODO: 在此处添加消息处理程序代码
}

第七步: 当CDockablePaneGsz所在的窗口的尺寸变化 或者是隐藏的时候 ,里面的萝卜也要跟着变化。

 void CDockablePaneGsz::OnSize(UINT nType, int cx, int cy)
{
CDockablePane::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码
if (m_DialogDockbablePaneGszMain.GetSafeHwnd())
{
CRect rct;
GetClientRect(rct);
m_DialogDockbablePaneGszMain.MoveWindow(rct);
}
}

第八步: 刚才把筐和萝卜弄好了。是不是就万事大吉了呢? 不是的。。  这个筐和萝卜还要整体和那个单文档MFC程序发生的关系。这样才好。

当然了,至于如何发生关系,是在框架类里面发生关系 还是在视图类里面发生关系。 这个估计都可以。。。

我在这里选择在框架类里面发生点关系。

A:首先 在框架的类头文件里面 添加 CDockablePanegGsz

 // MainFrm.h : CMainFrame 类的接口
// #pragma once
#include "DockablePaneGsz.h"
class CMainFrame : public CFrameWndEx

B在框架类的头文件里面 创建   CDockablePanegGsz的对象

 protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnViewCustomize();
afx_msg LRESULT OnToolbarCreateNew(WPARAM wp, LPARAM lp);
DECLARE_MESSAGE_MAP()
public:
CDockablePaneGsz m_DockablePaneGszMain;

C:在框架类的OnCreate函数里面 添加CDockbalePaneGszMain 窗口的创建。 这个函数有好多好多参数。。

CMFCToolBar::SetBasicCommands(lstBasicCommands);
//////////////////////////////////////////////////////////////////////////
m_DockablePaneGszMain.Create(_T("朕就是那个牛X停靠类"),this,CRect(,,,),TRUE,,
WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|CBRS_LEFT|CBRS_FLOAT_MULTI);
m_DockablePaneGszMain.EnableDocking(CBRS_ALIGN_ANY);
//EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_DockablePaneGszMain); return ;

第九步: 是骡子是马  跑起来 溜溜

见效果图。

后记 :

源代码地址:http://pan.baidu.com/s/1sjr0jAd

环境 :VS2010 。 不需要附加任何其他库。系统是Win7  64位

邮箱:wenluderen@gmail.com

QQ :470885756

测试CDockablePane。 测试他的最基本的功能。的更多相关文章

  1. APP敏捷测试,测试和开发并行!

    测试和开发具有同等重要的作用,从一开始,测试和开发就是相向而行的.测试是开发团队的一支独立的.重要的支柱力量. 测试要具备独立性,独立分析业务需求,独立配置测试环境,独立编写测试脚本,独立开发测试工具 ...

  2. 软件测试 -- 和用户共同测试(UAT测试)的注意点有哪些

    软件产品在投产前,通常都会进行用户验收测试.如果用户验收测试没有通过,直接结果就是那不到“Money”,间接影响是损害了公司的形象,而后者的影响往往更严重.根据作者的经验,用户验收测试一定要让用户满意 ...

  3. 衣联网络-亿能测试 安全测试沙龙 PPT资料免费下载

    衣联网络-亿能测试 安全测试沙龙 PPT资料免费下载http://automationqa.com/forum.php?mod=viewthread&tid=2304&fromuid= ...

  4. 冒烟测试、α测试、Beta测试、性能测试

    “冒烟测试”(也可称为showcase)这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程. 冒烟测试(smoke test)在测试中发现问题,找到了一个Bug,然后开发人员会 ...

  5. Apache JMeter开源压力测试/负载测试工具 2.12 官方最新版

    软件介绍   Jmeter是一款使用Java开发的,开源免费的,测试工具, 主要用来做功能测试和性能测试(压力测试/负载测试),而且用Jmeter 来测试 Restful API, 非常好用. 如何学 ...

  6. JUit——(三)JUnit核心对象(测试、测试类、Suit和Runner)

    JUnit的核心对象:测试.测试类.测试集(Suite).测试运行器 1. 测试: @Test注释的.公共的.不带有任何参数.并且返回void类型的方法 2. 测试类: 公共的,包含对应类的测试方法的 ...

  7. app测试--稳定性测试

    稳定性测试的概念有2种, 一, 稳定性测试,对应于异常性测试,即发生异常情况时,系统如何反应的测试.包含: 1 交互性测试,被打扰的情况,如来电,短信,低电量等.这些其实在上章的功能测试中有提到. 2 ...

  8. Net Manager测试连接测试没有成功,用户权限问题,以管理员身份运行后测试成功

    Net Manager测试连接测试没有成功,截图如下:

  9. 转:google测试分享-测试经理

    原文: http://blog.sina.com.cn/s/blog_6cf812be0102vode.html 前言:这个系列分享的内容大部分都是出自于<google是如何测试的>的书, ...

  10. monkey测试===monkeyrunner测试教程(1)

    1.安装测试环境 jdk 安装与配置 android sdk安装与配置 Python编辑器安装与配置 以上安装请自行百度教程 Monkeyrunner使用方法 http://www.android-d ...

随机推荐

  1. UP与瀑布模型

    软件开发过程(Software development process)描述了构造.部署以及维护软件的方式.(就是先做什么后做什么)统一过程(The Unified Software Developm ...

  2. 【BZOJ】1692 & 1640: [Usaco2007 Dec]队列变换(后缀数组+贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1692 http://www.lydsy.com/JudgeOnline/problem.php?id ...

  3. Worktile中百万级实时消息推送服务的实现

    Worktile中百万级实时消息推送服务的实现 出自:http://blog.jobbole.com/81125/

  4. Oracel 数据库面试题

    1.取出表中第31到40行的记录mysql方案: , oracle方案: select t2.* ) t2 2.truncate和delete有什么区别TRUNCATE TABLE在功能上与不带WHE ...

  5. Visual Studio Code调试node.js:无法在PATH上找到运行时的node

    首先,环境变量Path中加入nodejs的路径: 验证nodejs是否已经加入环境变量: 接着,重新启动Visual Studio Code, 试一下,是不是好了~   附录:Visual Studi ...

  6. 传递任意数量的实参*parameter&使用任意数量的关键字实参**parameter

    1.*形参名(*parameter) 有时候我们不知道知道函数需要接受多少个实参,所以我们可以在形参名前加一个*,是让python创建一个名为parameter的空元组,并将收到的所有值都封装到这个元 ...

  7. yii 常用orm

    yii2 orwhere andwhere的复杂写法:https://www.codercto.com/a/6513.html $files = XXXX::find() ->andWhere( ...

  8. ArcGIS ArcMap 与 ArcServer关于Python的冲突

    一.问题描述 1.ArcMap 是32位,运行的Python也是32位: 2.ArcGIS Server 是64位,运行的Python是64位: 3.这样就导致注册表和环境变量起冲突,即如果Serve ...

  9. 《C++ Primer Plus》学习笔记 2.1.1 main()函数

    main()函数的基本结构如下: int main() { statements ; } 这几行代码构成了函数定义(function definition),该定义由两部分组成: 第一行int mai ...

  10. std::lock_guard

    /* std::lock_guard:更方便线程对于互斥量的上锁操作 std::lock_guard:在定义一个lock_guard时上锁,保证在析构或者异常时解锁 */ #include <i ...