zoukankan      html  css  js  c++  java
  • 测试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位

    邮箱:wenluderen@gmail.com  

    QQ :470885756

  • 相关阅读:
    poj 3243 Clever Y(BabyStep GiantStep)
    poj 2417 Discrete Logging
    poj 3481 Double Queue
    hdu 4046 Panda
    hdu 2896 病毒侵袭
    poj 1442 Black Box
    hdu 2815 Mod Tree
    hdu 3065 病毒侵袭持续中
    hdu 1576 A/B
    所有控件
  • 原文地址:https://www.cnblogs.com/wenluderen/p/4245623.html
Copyright © 2011-2022 走看看