最近看到一句话:

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

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. 绑定QQ登录 PHP OAuth详解(转)

    越来越多的网站开始采用 第三方账号登录 如qq 微博 开心网 等诸多流行的社交平台,利用第三方账号登录,可以更好地省去用户的注册时间,并且极大地提高用户体验,吸引更多的潜在用户. 让用户拥有 一个号码 ...

  2. 如何在ChemDraw中打出符号π

    很多人日常使用ChemDraw是一款非常优秀的化学绘图软件,在其绘制化学结构式或者反应式的过程中,常常需要添加各种符号.比如有的用户会需要输入希腊字符π,但是不知道用什么方法添加.本教程就来给大家介绍 ...

  3. VC++分页打印实现

    VC++分页打印实现:  C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243 ...

  4. ANSI、ASCII、GB2312、GBK

    ASCII 在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a.b.c.d这样的52个字母(包括大写).以及0.1等数字还有一些常用的符号 ...

  5. Android笔记——Activity中的回传数据案例(装备选择)

    1.创建程序: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns: ...

  6. 在visual studio中运行C++心得

    1.在visual studio中建立C++项目 (1)新建->项目->空项目 C++ (2)右击项目->添加->新建项->C++文件(.app) (3编写C++文件   ...

  7. 基于openssl的https服务配置

    环境: CA服务器:192.168.1.121 WEB服务器: 192.168.1.107 一.在CA服务器上生成自签证书 1.生成根私钥 (umask 077;openssl genrsa -out ...

  8. 【黑金原创教程】【Modelsim】【第三章】理想就是美丽

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  9. 170315、spring:@Autowired等注解的别样玩法

    适用场景: 1.IOC容器完成启动就想加载进来的数据 2.多个已经定义好的组件,想在使用的时候通过一行代码就全部拿到 3.等等.... 联想:@Autowired.@Resources等也可以类似使用 ...

  10. react-native 学习(二)

    上一节讲到了 react-native的开发环境的配置,,这一节我门具体讲讲怎么看样式,怎么调试 看样式的话 有一个 神奇 react-native-developer tools(个人推荐,可选择性 ...