测试CDockablePane。 测试他的最基本的功能。

最近看到一句话:

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

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函数啊

答:见下图

 1 int CDockablePaneGsz::OnCreate(LPCREATESTRUCT lpCreateStruct)
 2 {
 3     if (CDockablePane::OnCreate(lpCreateStruct) == -1)
 4         return -1;
 5
 6     // TODO:  在此添加您专用的创建代码
 7     m_DialogDockbablePaneGszMain.Create(IDD_DIALOG_GSZ,this);
 8     m_DialogDockbablePaneGszMain.ShowWindow(SW_SHOW);
 9     return 0;
10 }

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

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

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

 1 void CDockablePaneGsz::OnSize(UINT nType, int cx, int cy)
 2 {
 3     CDockablePane::OnSize(nType, cx, cy);
 4
 5     // TODO: 在此处添加消息处理程序代码
 6     if (m_DialogDockbablePaneGszMain.GetSafeHwnd())
 7     {
 8         CRect rct;
 9         GetClientRect(rct);
10         m_DialogDockbablePaneGszMain.MoveWindow(rct);
11     }
12 }

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

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

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

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

1 // MainFrm.h : CMainFrame 类的接口
2 //
3
4 #pragma once
5 #include "DockablePaneGsz.h"
6 class CMainFrame : public CFrameWndEx

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

1 protected:
2     afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
3     afx_msg void OnViewCustomize();
4     afx_msg LRESULT OnToolbarCreateNew(WPARAM wp, LPARAM lp);
5     DECLARE_MESSAGE_MAP()
6 public:
7    CDockablePaneGsz m_DockablePaneGszMain;

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

CMFCToolBar::SetBasicCommands(lstBasicCommands);
    //////////////////////////////////////////////////////////////////////////
    m_DockablePaneGszMain.Create(_T("朕就是那个牛X停靠类"),this,CRect(0,0,300,300),TRUE,10010,
        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 0;

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

见效果图。

后记 :

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

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

邮箱:[email protected]

QQ :470885756

时间: 2024-10-03 13:40:11

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

Android Day02-Android中单元测试(junit测试)&monkey测试

Android中junit测试有2种实现方式 第1种:一般Android工程的实现方式 1.在清单文件中添加2项内容 首先在AndroidManifest.xml中加入下面红色代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.itcast.action" android:versionCode="1"  android:v

【转】测试思考——测试人员需要具备哪些素质?

之前写的文章,今天分享出来 测试人员需要具备哪些素质? 测试人员需要具备哪些技能? 软件测试知识:测试计划.测试方案.编写用例.提交bug.跟踪bug,编写测试报告 测试工具的使用 操作系统 编写代码的能力 数据库知识 业务知识.网络知识. 除了这些必备的技能,我们还需要什么样的素质呢? 一.主动沟通    过去我是做传统ERP软件的测试,因为ERP软件已经很成熟,所以他的需求文档一般也都很完善,很细致,需求变更也不会太多.所以我们完全可以按照需求文档进行测试,与开发电话沟通就OK,只要我们bu

沧海一声笑,移动应用的CRASH原因我找到! --记最新款数字化测试“星云测试“的使用攻略

沧海一声笑,移动应用的CRASH原因我找到! --记最新款数字化测试"星云测试"的使用攻略 世界进步那么快,很多新鲜的点子层出不穷,于是我们创业,我们做最酷的手机应用,做最轰炸的应用推广.不加国际友人,仅咱泱泱大中华14亿人口,智能手机用户目前就已经超过5亿人,并还在继续疯长中!据说到2015年1月,仅我们中国的主要应用商店APP应用累计超过400万个.感觉像我们一样优秀的IT天才们的春天已经到来!就凭咱的脑子和实力,从各种大众脸的App应用中脱颖而出那是必然的!我们肯定是笑到最后的那

使用编码的 UI 测试来测试 Windows 应用商店应用

自从Win8应运而生以来,Windows应用商店便立马成为开发者展示的舞台,而这短短的几年里应用的数量就可数以万计,这也不可避免地出现了良莠不齐的局面.我们都知道Visual Studio是目前最流行的Windows平台应用程序的集成开发环境.VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代码管控工具.集成开发环境(IDE)等等.所写的目标代码适用于微软支持的所有平台,我们也可以使用它来开发Win8应用.另一方面,Visual Studio也可以用来

应用测试中的弱网络模拟测试-微信测试工程师手把手教程

应用测试中的弱网络模拟测试-微信测试工程师手把手教程 优测小优有话说: app研发不同于实验室里做研究,哪里有"理想环境".理想里,用户用着性能卓越的手机,连着畅通无阻的wifi网络.现实是,他们可能正用着你闻所未闻的机型,穿梭于地铁.公交.火车.乡间.大山-.. 信号"若隐若现,扑朔迷离""我去!又crash了!""唉,怎么又连不上网了,其他app好好的啊."这大概就是理想与现实之间的差距吧. 机型碎片化的问题,腾讯优测通过

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

软件介绍 Jmeter是一款使用Java开发的,开源免费的,测试工具, 主要用来做功能测试和性能测试(压力测试/负载测试),而且用Jmeter 来测试 Restful API, 非常好用. 如何学好Jmeter: 如果你用Jmeter去对Web进行功能测试,或者性能测试. 你必须熟练HTTP协议,才能学好Jmeter. 否则你很难理解Jmeter中得概念. Jmeter运行: 解压后, 运行  “bin/jmeter.bat” Jmeter 是支持中文的, 启动Jmeter 后, 点击 Opti

iOS测试——置换测试: Mock, Stub 和其他

文章地址:http://ryantang.me/blog/2014/08/21/test-doubles/ iOS测试--置换测试: Mock, Stub 和其他

Psping四大功能介绍:ICMP Ping/TCP Ping/延迟测试/带宽测试

本文主要介绍微软的测试工具Psping,该工具功能主要包括:ICMP Ping.TCP Ping.延迟测试.带宽测试 需要说明一种应用场景:由于Windows Azure数据中心禁ICMP,使用Psping的TCP Ping的功能来测试联通性或者故障排查就非常有用了. 工具下载地址: http://technet.microsoft.com/en-us/sysinternals/jj729731 下载完PSTools.zip包之后,放到任意本地磁盘内,解压之后如下: 使用CMD命令行工具进入PS

测试一下测试一下测试一下测试一下

测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试一下测试

C#测试--内部类测试

C#测试--内部类测试 在被测试的代码库的AssemblyInfo.cs中添加"[assembly: InternalsVisibleTo("UnitTest项目名称")]".