从CScrollView继承一个,然后可以往里面添加Dialog,类似于Panle

来源:互联网 发布:朱生豪情书集 淘宝 编辑:程序博客网 时间:2024/05/16 23:40
从CScrollView继承一个,然后可以往里面添加Dialog,类似于Panle

以下是我实现的添加一个窗体的代码:

#pragma once// CTemplateView 视图/**************************************************************** * 类 名 称 : CTemplateView                                    * * 作    用 : 提供展现控件的模板显示;                         * * 用    法 : 可以先初始化这个类,然后调用CreateFromStatic函数 * *             将此控件绑定到父窗体上的一个控件上(一般是Static),* *             然后通过AddControl函数将一个CWnd控件添加到这个模 * *             板中并显示。可以不断的调用AddControl函数来显示不 * *             同的展现内容。                                   * * 作     者 :新业务开发部——沈毅                             * * 时     间 :2010/12/1                                        * * 版     权 : 天源迪科合肥分公司                              * ****************************************************************/class CTemplateView : public CScrollView{DECLARE_DYNCREATE(CTemplateView)public:CTemplateView();           // 动态创建所使用的受保护的构造函数virtual ~CTemplateView();protected:virtual void OnDraw(CDC* pDC);      // 重写以绘制该视图virtual void OnInitialUpdate();     // 构造后的第一次public://将此View控件绑定到调用窗体的一个控件上(一般而言是Static控件)//nID : Static控件的ID//pParent: 父窗体的指针(也就是调用窗体的指针)BOOL CreateFromStatic(UINT nID, CWnd* pParent);//将一个Dlg添加到View中//pWnd:要添加的窗口控件,可以是任何CWnd窗体,但是必须是创建完毕的(即只需要调用ShowWindow就可以显示的)//     一般这里是显示对话框    BOOL AddControl(CWnd * pWnd);    //获取此控件的父控件指针CWnd * GetParentWnd();private://当前显示的窗体指针CWnd * pCurrWnd;//父窗口指针CWnd * pParentWnd;DECLARE_MESSAGE_MAP()};// TemplateView.cpp : 实现文件//#include "stdafx.h"#include "TemplateView.h"// CTemplateViewIMPLEMENT_DYNCREATE(CTemplateView, CScrollView)CTemplateView::CTemplateView(){    pCurrWnd = NULL;}CTemplateView::~CTemplateView(){}BEGIN_MESSAGE_MAP(CTemplateView, CScrollView)END_MESSAGE_MAP()// CTemplateView 绘图void CTemplateView::OnInitialUpdate(){CScrollView::OnInitialUpdate();CSize sizeTotal;// TODO: 计算此视图的合计大小sizeTotal.cx = sizeTotal.cy = 100;SetScrollSizes(MM_TEXT, sizeTotal);}void CTemplateView::OnDraw(CDC* pDC){CDocument* pDoc = GetDocument();// TODO: 在此添加绘制代码}BOOL CTemplateView::CreateFromStatic(UINT nID, CWnd* pParent){    CStatic wndStatic;    if (!wndStatic.SubclassDlgItem(nID, pParent))        return FALSE;//记录父窗体指针pParentWnd =  pParent;    // Get static control rect, convert to parent's client coords.    CRect rc;    wndStatic.GetWindowRect(&rc);    pParent->ScreenToClient(&rc);    wndStatic.DestroyWindow();    // create HTML control (CHtmlView)BOOL IsSuc =  Create(NULL,                         // class name        NULL,                                         // title        (WS_CHILD | WS_VISIBLE ),             // style        rc,                                         // rectangle        pParent,                                     // parent        nID,                                         // control ID        NULL);if(IsSuc){this->OnInitialUpdate();}// frame/doc context not usedreturn IsSuc;}BOOL CTemplateView::AddControl(CWnd * pWnd){//如果当前有控件在显示,则隐藏之if(pCurrWnd != NULL){pCurrWnd->ShowWindow(SW_HIDE);}//获取父控件(也就是view控件的坐标位置)RECT rect;this->GetClientRect(&rect);//设置控件位置pWnd->SetWindowPos(NULL,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,SWP_DRAWFRAME);//设置父控件pWnd->SetParent(this);pWnd->ShowWindow(SW_SHOW);    //将现在显示的控件变成当前控件pCurrWnd = pWnd;return TRUE;}// CTemplateView 消息处理程序