CDockablePane类的使用Word文档格式.docx

上传人:b****3 文档编号:6179848 上传时间:2023-05-06 格式:DOCX 页数:37 大小:482.46KB
下载 相关 举报
CDockablePane类的使用Word文档格式.docx_第1页
第1页 / 共37页
CDockablePane类的使用Word文档格式.docx_第2页
第2页 / 共37页
CDockablePane类的使用Word文档格式.docx_第3页
第3页 / 共37页
CDockablePane类的使用Word文档格式.docx_第4页
第4页 / 共37页
CDockablePane类的使用Word文档格式.docx_第5页
第5页 / 共37页
CDockablePane类的使用Word文档格式.docx_第6页
第6页 / 共37页
CDockablePane类的使用Word文档格式.docx_第7页
第7页 / 共37页
CDockablePane类的使用Word文档格式.docx_第8页
第8页 / 共37页
CDockablePane类的使用Word文档格式.docx_第9页
第9页 / 共37页
CDockablePane类的使用Word文档格式.docx_第10页
第10页 / 共37页
CDockablePane类的使用Word文档格式.docx_第11页
第11页 / 共37页
CDockablePane类的使用Word文档格式.docx_第12页
第12页 / 共37页
CDockablePane类的使用Word文档格式.docx_第13页
第13页 / 共37页
CDockablePane类的使用Word文档格式.docx_第14页
第14页 / 共37页
CDockablePane类的使用Word文档格式.docx_第15页
第15页 / 共37页
CDockablePane类的使用Word文档格式.docx_第16页
第16页 / 共37页
CDockablePane类的使用Word文档格式.docx_第17页
第17页 / 共37页
CDockablePane类的使用Word文档格式.docx_第18页
第18页 / 共37页
CDockablePane类的使用Word文档格式.docx_第19页
第19页 / 共37页
CDockablePane类的使用Word文档格式.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

CDockablePane类的使用Word文档格式.docx

《CDockablePane类的使用Word文档格式.docx》由会员分享,可在线阅读,更多相关《CDockablePane类的使用Word文档格式.docx(37页珍藏版)》请在冰点文库上搜索。

CDockablePane类的使用Word文档格式.docx

OnCreate(LPCREATESTRUCTlpCreateStruct)

if(CDockablePane:

OnCreate(lpCreateStruct)==-1)

return-1;

Addyourspecializedcreationcodehere

CRectrectDummy;

rectDummy.SetRectEmpty();

//创建选项卡窗口:

if(!

m_TestDlg.Create(IDD_DIALOG_DOCKDLG,this))

{

TRACE0("

未能创建输出选项卡窗口/n"

);

//未能创建

}

m_TestDlg.ShowWindow(SW_SHOW);

return0;

voidCMyPane:

OnSize(UINTnType,intcx,intcy)

CDockablePane:

OnSize(nType,cx,cy);

Addyourmessagehandlercodehere

//选项卡控件应覆盖整个工作区

m_TestDlg.SetWindowPos(this,-1,-1,cx,cy,SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);

3、修改MainFrame类

①然后在MainFrame.h代码中添加成员变量

CMyPanem_MyPane;

②在CMainFrame:

OnCreate函数中添加代码

if(!

m_wndStatusBar.Create(this))

Failedtocreatestatusbar\n"

//failtocreate

m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));

m_MyPane.Create(_T("

MyPane"

),this,CRect(0,0,100,100),TRUE,IDD_DIALOG_DOCKDLG,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|CBRS_LEFT|CBRS_FLOAT_MULTI))

未能创建输出窗口/n"

returnFALSE;

m_MyPane.EnableDocking(CBRS_ALIGN_ANY);

//TODO:

Deletethesefivelinesifyoudon'

twantthetoolbarandmenubartobedockable

m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockPane(&

m_wndMenuBar);

m_wndToolBar);

m_MyPane);

//调整m_MyPane的大小使之适合父窗口

4、运行结果

5、补充

①CDockablePane派生类销毁时,对话框也销毁掉(没有试验)

voidControlPanel:

OnDestroy()

OnDestroy();

m_dlg.DestroyWindow();

②CDockablePane派生类对象的Create函数里面的666是这个停靠栏的ID,这里是随便指定的一个数值,只要不和其他已用资源重复即可,真正应用的时候,以在字符串表中添加一个ID,前面使用的是对话框的IDD

m_Panel.Create(_T("

tset"

),this,CRect(0,0,300,300),TRUE,666,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|CBRS_LEFT|CBRS_FLOAT_MULTI);

CDockablePane与CTreeCtrl类联合使用的方法

1、从CDockablePane继承,创建一个自定义类CNavView

①CNavView.h的代码

#pragmaonce

//CNavView

classCNavView:

publicCDockablePane

DECLARE_DYNAMIC(CNavView)

public:

CNavView();

virtual~CNavView();

protected:

afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);

afx_msgvoidOnSize(UINTnType,intcx,intcy);

CTreeCtrlm_wndClassView;

voidAdjustLayout();

DECLARE_MESSAGE_MAP()

};

②CNavView.cpp的代码

//NavView.cpp:

implementationfile

//

#include"

stdafx.h"

MDISample.h"

NavView.h"

IMPLEMENT_DYNAMIC(CNavView,CDockablePane)

CNavView:

CNavView()

~CNavView()

BEGIN_MESSAGE_MAP(CNavView,CDockablePane)

ON_WM_CREATE()

ON_WM_SIZE()

END_MESSAGE_MAP()

voidCNavView:

AdjustLayout();

AdjustLayout()

if(GetSafeHwnd()==NULL)

return;

CRectrectClient;

GetClientRect(rectClient);

intcyTlb=3;

m_wndClassView.SetWindowPos(NULL,rectClient.left+1,rectClient.top+cyTlb+1,rectClient.Width()-2,rectClient.Height()-cyTlb-2,SWP_NOACTIVATE|SWP_NOZORDER);

//CNavViewmessagehandlers

intCNavView:

//Createviews:

constDWORDdwViewStyle=WS_CHILD|WS_VISIBLE|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS|WS_CLIPSIBLINGS|WS_CLIPCHILDREN;

m_wndClassView.Create(dwViewStyle,rectDummy,this,2))

FailedtocreateClassView/n"

HTREEITEMhRoot=m_wndClassView.InsertItem(_T("

FakeAppclasses"

),0,0);

m_wndClassView.SetItemState(hRoot,TVIS_BOLD,TVIS_BOLD);

HTREEITEMhClass=m_wndClassView.InsertItem(_T("

CFakeAboutDlg"

),1,1,hRoot);

m_wndClassView.InsertItem(_T("

CFakeAboutDlg()"

),3,3,hClass);

m_wndClassView.Expand(hRoot,TVE_EXPAND);

hClass=m_wndClassView.InsertItem(_T("

CFakeApp"

CFakeApp()"

InitInstance()"

OnAppAbout()"

CFakeAppDoc"

CFakeAppDoc()"

),4,4,hClass);

~CFakeAppDoc()"

OnNewDocument()"

CFakeAppView"

CFakeAppView()"

~CFakeAppView()"

GetDocument()"

m_wndClassView.Expand(hClass,TVE_EXPAND);

CFakeAppFrame"

CFakeAppFrame()"

~CFakeAppFrame()"

m_wndMenuBar"

),6,6,hClass);

m_wndToolBar"

m_wndStatusBar"

Globals"

),2,2,hRoot);

theFakeApp"

),5,5,hClass);

2、修改MainFrm.cpp

①OnCreate方法最后加入如下代码

CStringstr;

str.LoadString(ID_VIEW_NAV);

m_Nav.Create(str,this,CRect(0,0,200,200),TRUE,ID_VIEW_NAV,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|CBRS_LEFT|CBRS_FLOAT_MULTI))

Failedtocreatenavigatewindow/n"

//failedtocreate

m_Nav.EnableDocking(CBRS_ALIGN_ANY);

m_Nav);

//ID_VIEW_NAV是自定义的字符串资源

CDockablePane同CFormView类的联合使用方法

1、CFormView简介

①MFC提供了一个名为CFormView的特殊视图类,我们称其为表单视图.表单视图是指用控件来输入和输出数据的视图,用户可以方便地在表单视图中使用控件.表单视图具有对话框和滚动视图的特性,它使程序看起来象是一个具有滚动条的对话框.在有些情况下,用表单视图比用普通视图更符合用户的需要,例如,在向数据库输入数据时,显然用表单的形式可以更习惯些。

用AppWizard可以方便地创建基于表单视图的应用程序,只要在MFCAppWizard对话框的第六步先选择CView,然后在Baseclass栏中选择CFormView,AppWizard就会创建一个基于CFormView的应用程序.

②读者可以按上述方法建立一个名为Test的应用程序.在Test工程的资源中,读者会发现一个ID为IDD_TEST_FORM的对话框模板,该对话框模板可供用户放置和安排控件.在程序运行时,框架根据该对话框模板创建CFormView对象,并根据模板的信息在表单视图中自动创建控件.与设计对话框类相类似,用户可以用ClassWizard为表单视图类加入与控件对应的成员变量,可以调用UpdateData在控件和成员变量之间交换数据,但对控件的初始化工作是在OnInitialUpdate函数而不是在OnInitDialog函数中进行的。

③基于表单视图的应用程序与基于对话框的应用程序都是在应用程序中直接使用控件,但二者有很多不同之处.基于对话框的应用程序是用一个对话框来作为程序的主窗口的,因而程序的主窗口的特性与对话框类似,如窗口的大小不能改变,程序没有菜单条、工具条和状态栏等。

基于表单视图的应用程序仍然是基于Doc/View框架结构的,只是视图被换成了表单视图,也就是说,应用程序的窗口可以改变大小,程序有菜单条、工具条和状态栏,且程序仍然可以Dov/View运行机制来处理文档。

2、添加CDockablePane的派生类CDock,形式同前述。

3、添加CFormView的派生类。

①利用类向导,添加一个基类为CFormView的类CFrmView。

②为CFrmView分别重载Create函数和OnMouseActivate函数,前者是为了把Create函数重载为public,一行代码都不用写,后者是为了防止CDockablePane处于悬浮状态时程序崩溃(不重载必然崩溃!

intCFrmView:

OnMouseActivate(CWnd*pDesktopWnd,UINTnHitTest,UINTmessage)

在此添加消息处理程序代码和/或调用默认值

intnResult=0;

CFrameWnd*pParentFrame=GetParentFrame();

if(pParentFrame==pDesktopWnd)

//Whenthisisdocked

nResult=CFormView:

OnMouseActivate(pDesktopWnd,nHitTest,message);

else

//Whenthisisnotdocked

BOOLisMiniFrameWnd=

pDesktopWnd->

IsKindOf(RUNTIME_CLASS(CMiniFrameWnd));

BOOLisPaneFrameWnd=

IsKindOf(RUNTIME_CLASS(CPaneFrameWnd));

BOOLisMultiPaneFrameWnd=

IsKindOf(RUNTIME_CLASS(CMultiPaneFrameWnd));

//pDesktopWndistheframewindowforCDockablePane

nResult=CWnd:

OnMouseActivate(pDesktopWnd,nHitTest,message);

returnnResult;

4、向CDockablePane装东西

①在Dock.h添加protected类型的指针:

CFrmView*m_frmview

②在构造函数中添加

m_frmview=(CFrmView*)(RUNTIME_CLASS(CFrmView)->

CreateObject());

③重载OnCreate函数和OnSize函数,前者是为初始化,后者是为设置frmview在dock中的显示大小,一般填充满。

intCDock:

return-1;

在此添加您专用的创建代码

RECTrect;

GetClientRect(&

rect);

m_frmview->

Create(NULL,NULL,WS_CHILD|WS_VISIBLE,rect,this,0,NULL);

voidCDock:

在此处添加消息处理程序代码

return;

if(m_frmview->

GetSafeHwnd()!

=NULL)

CRectrect;

GetClientRect(rect);

m_frmview->

SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height(),SWP_NOACTIVATE|SWP_NOZORDER);

两个带图标的CDockablePane派生类与CFormView类的联合使用方法

1、利用类向导,添加两个基类为CDockablePane的类CDock1,CDock2。

2、在MainFrm.h中添加Dock1.h和Dock2.h的头文件;

并派生两个子类

CDock1m_dock1;

CDock2m_dock2;

CDockablePane*m_pTabbedBar;

3、在MainFrm的OnCreate()里面添加:

(最好接着EnableAutoHidePanes(CBRS_ALIGN_ANY);

这句后面添加)

if(!

m_dock1.Create("

Dock1"

this,CRect(0,0,300,300),true,IDD_FRMVIEW,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|CBRS_LEFT|CBRS_FLOAT_MULTI))

Failedtocreatedock1window\n"

m_dock2.Create("

Dock2"

this,CRect(0,0,300,300),true,IDD_FRMVIEW1,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|CBRS_LEFT|CBRS_FLOAT_MULTI))

Failedtocreatedock2window\n"

BOOLbHiColorIcons=TRUE;

//下面这几句用于添加标签的图标,IDR_SHJKTYPE为图标ID

HICONhdock1=(HICON):

LoadImage(:

AfxGetResourceHandle(),MAKEINTRESOURCE(bHiColorIcons?

IDR_SHJKTYPE

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2