VisualStudiMFC框架结构设计

上传人:油条 文档编号:1519751 上传时间:2017-06-23 格式:DOC 页数:40 大小:7.90MB
返回 下载 相关 举报
VisualStudiMFC框架结构设计_第1页
第1页 / 共40页
VisualStudiMFC框架结构设计_第2页
第2页 / 共40页
VisualStudiMFC框架结构设计_第3页
第3页 / 共40页
VisualStudiMFC框架结构设计_第4页
第4页 / 共40页
VisualStudiMFC框架结构设计_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《VisualStudiMFC框架结构设计》由会员分享,可在线阅读,更多相关《VisualStudiMFC框架结构设计(40页珍藏版)》请在金锄头文库上搜索。

1、Visual Studio 2010 MFC 框架结构设计(图解)建立一个类似于 fisualStudio2010 的界面,总体步骤如下:第一步是建立一个标准的 MFC 工程(这对我们学习有利)第二步是添加必要的资源,当然也可以边做边加入。第三步是从 CDockablePane 派生一个视图类用于停靠在框架窗口的左边。为这个类要创建一个 CViewTree 类,它主要是在派生出来的类中加入树控件。第四步就是设计这个派生的类,为其添加工具栏,弹出菜单等第五步就是将这个派生类加到框架中去。下面我们开始制作:一、 新建标准的 MFC 工程点新建项目选择 Visual C+的 MFC 选择 MFC 应

2、用程序输入 MyTest 工程名(位置就自己定吧。这里解决方案名称会与名称同步,你可以修改“解决方案名称(M) ”,它其实就是工程的总目录名)点击确定。下一步这里我们使用的是“多信文档”选项卡式档,项目类型选择 MFC 校准点击完成。二、 设计左侧停靠窗口 CDockablePane在类视图中点击右键,在弹出菜单中选择“类向导”点击“添加类”类名中添加“CPersonView”基类选择“CDockablePane”点击完成,回到类向导中,我们看到类名已经是我们刚刚建立的类。点击确定。这样我们就建立了一个由 CDockablePane 派生的子类“CPersonView”。接下类我们再从 CTr

3、eeCtrl 类派生一个 CViewTree 子类,它是有要 CPersonView 中生成树形结构。作为系统功能菜单使用。步骤与建立 CPersonView 上面相同。接下来是为 CPersonView 停靠窗口上方添一个独特的工具栏,为此我们要生成一类,这个类不必用向导生成,只需要在CPersonView 类头文件中添加如下代码就可以了,因这个类不作为其公用类(比较小) 。 (CPersonView.h 文件)#pragma once#include viewtree.hclass CPersonViewToolBar : public CMFCToolBarvirtual void On

4、UpdateCmdUI(CFrameWnd* /*pTarget*/, BOOL bDisableIfNoHndler)/此成员函数由框架类调用,以便更新状态工具栏或状态栏,pTarget指向应用程序的主窗口,这个指针用于路由更新消息,bDisablefNoHndler是个标志,指示控件没有更新处理程序应该自动显示为禁用。CMFCToolBar:OnUpdateCmdUI(CFrameWnd*) GetOwner(), bDisableIfNoHndler);virtual BOOL AllowShowOnList() const return FALSE; ;CMFCToolBar 是选件类

5、类似于 CToolBar Class,但是,提供用户界面功能附加支持。 其中包括简单的工具栏、工具栏有快捷图像的,大图标、寻呼机按钮、锁定的工具栏、rebar 控件、文本在图像下,背景图像和选项卡式工具栏。 CMFCToolBar 选件类还包含内置为工具栏的用户可自定义的支持,并菜单、拖放到工具栏和菜单之间,组合框按钮,编辑框按钮、颜色选取器和汇总按钮。下面是将 CViewTree 附加到 CPersonView 中。方法是:在类视图中右键选择 CPersonView 类访问选择“protected”变量类型选择输入“ CViewTree”变量名输入“m_wndViewTree”点击完成。这样

6、就在 CPersonView 类的头文件中定议一个名为 m_wndViewTree 的变量。代码如下:protected:DECLARE_MESSAGE_MAP()CViewTree m_wndViewTree;同样方法为 CPersonView 添加如下两个变量:CImageList m_PersonViewImages;CPersonViewToolBar m_wndToolBar;接下来我们要为 CPersonView 添加一个弹出式菜单方法是:选择资源视图(或者在解决方案视图中找到资源文件(MyTest.rc)双击进入资源视图)右击“Menu ” 选择添加资源点击新建方法不再赘述,其

7、ID 改为 IDR_POPUP_EXPLORER,保存。添加位图资源(与菜单相同)其 ID 改为 IDB_PERSON_VIEW添加工具栏其 ID 改为 IDR_EXPLORER同法添加 IDB_EXPLORER_24 及 IDB_FILE_VIEW为CPerosnView添加自定义方法OnChangeVisualStyle()和AdjustLayout,方法是,进入类向导选择“方法”点击添加方法返回类型为void,参数类型不添加,访问选择public 点确定。再添加一个用于对树添加节点的私有方法:FillFileView方法。下面是三个方法的代码void CPersonView:OnChan

8、geVisualStyle(void)m_wndToolBar.CleanUpLockedImages();m_wndToolBar.LoadBitmap(theApp.m_bHiColorIcons ? IDB_EXPLORER_24 : IDR_EXPLORER, 0, 0, TRUE /* 锁?定*/);m_PersonViewImages.DeleteImageList();UINT uiBmpId = theApp.m_bHiColorIcons ? IDB_PERSON_VIEW_24 : IDB_PERSON_VIEW;CBitmap bmp;if (!bmp.LoadBitma

9、p(uiBmpId)TRACE(_T(无T法加载?位?图?: %xn), uiBmpId);ASSERT(FALSE);return;BITMAP bmpObj;bmp.GetBitmap(&bmpObj);UINT nFlags = ILC_MASK;nFlags |= (theApp.m_bHiColorIcons) ? ILC_COLOR24 : ILC_COLOR4;m_PersonViewImages.Create(16, bmpObj.bmHeight, nFlags, 0, 0);m_PersonViewImages.Add(&bmp, RGB(255, 0, 255);m_wn

10、dViewTree.SetImageList(&m_PersonViewImages, TVSIL_NORMAL);void CPersonView:AdjustLayout(void)if (GetSafeHwnd() = NULL)return;CRect rectClient;GetClientRect(rectClient);int cyTlb = m_wndToolBar.CalcFixedLayout(FALSE, TRUE).cy;m_wndToolBar.SetWindowPos(NULL, rectClient.left, rectClient.top, rectClient

11、.Width(), cyTlb, SWP_NOACTIVATE | SWP_NOZORDER);m_wndViewTree.SetWindowPos(NULL, rectClient.left + 1, rectClient.top + cyTlb + 1, rectClient.Width() - 2, rectClient.Height() - cyTlb - 2, SWP_NOACTIVATE | SWP_NOZORDER);void CPersonView:FillFileView(void)HTREEITEM hRoot = m_wndViewTree.InsertItem(_T(F

12、akeApp 文?件t), 0, 0);m_wndViewTree.SetItemState(hRoot, TVIS_BOLD, TVIS_BOLD);HTREEITEM hSrc = m_wndViewTree.InsertItem(_T(FakeApp 源文?件t), 0, 0, hRoot);m_wndViewTree.InsertItem(_T(FakeApp.cpp), 1, 1, hSrc);m_wndViewTree.InsertItem(_T(FakeApp.rc), 1, 1, hSrc);m_wndViewTree.InsertItem(_T(FakeAppDoc.cpp)

13、, 1, 1, hSrc);m_wndViewTree.InsertItem(_T(FakeAppView.cpp), 1, 1, hSrc);m_wndViewTree.InsertItem(_T(MainFrm.cpp), 1, 1, hSrc);m_wndViewTree.InsertItem(_T(StdAfx.cpp), 1, 1, hSrc);HTREEITEM hInc = m_wndViewTree.InsertItem(_T(FakeApp 头文?件t), 0, 0, hRoot);m_wndViewTree.InsertItem(_T(FakeApp.h), 2, 2, h

14、Inc);m_wndViewTree.InsertItem(_T(FakeAppDoc.h), 2, 2, hInc);m_wndViewTree.InsertItem(_T(FakeAppView.h), 2, 2, hInc);m_wndViewTree.InsertItem(_T(Resource.h), 2, 2, hInc);m_wndViewTree.InsertItem(_T(MainFrm.h), 2, 2, hInc);m_wndViewTree.InsertItem(_T(StdAfx.h), 2, 2, hInc);HTREEITEM hRes = m_wndViewTr

15、ee.InsertItem(_T(FakeApp 资源文?件t), 0, 0, hRoot);m_wndViewTree.InsertItem(_T(FakeApp.ico), 2, 2, hRes);m_wndViewTree.InsertItem(_T(FakeApp.rc2), 2, 2, hRes);m_wndViewTree.InsertItem(_T(FakeAppDoc.ico), 2, 2, hRes);m_wndViewTree.InsertItem(_T(FakeToolbar.bmp), 2, 2, hRes);m_wndViewTree.Expand(hRoot, TV

16、E_EXPAND);m_wndViewTree.Expand(hSrc, TVE_EXPAND);m_wndViewTree.Expand(hInc, TVE_EXPAND);下面为 CPersonView 类添加消息响应函数右击 CPersonView 选择“类向导”选择“消息”分别添加(双击)WM_CONTEXTMENU 鼠标右键消息WM_CREATE 窗口创建消息WM_PAINT 窗口刷新消息WM_SETFOCUS 窗口得到焦点消息WM_SIZE 窗口尺寸变化消息五个消息,代码如下void CPersonView:OnContextMenu(CWnd* pWnd, CPoint point)nts

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号