Visual Studio MFC框架结构设计Word文档下载推荐.docx
- 文档编号:21099230
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:38
- 大小:2.52MB
Visual Studio MFC框架结构设计Word文档下载推荐.docx
《Visual Studio MFC框架结构设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Visual Studio MFC框架结构设计Word文档下载推荐.docx(38页珍藏版)》请在冰豆网上搜索。
:
OnUpdateCmdUI((CFrameWnd*)GetOwner(),bDisableIfNoHndler);
}
virtualBOOLAllowShowOnList()const{returnFALSE;
};
CMFCToolBar是选件类类似于
CToolBarClass,但是,提供用户界面功能附加支持。
其中包括简单的工具栏、工具栏有快捷图像的,大图标、寻呼机按钮、锁定的工具栏、rebar控件、文本在图像下,背景图像和选项卡式工具栏。
CMFCToolBar
选件类还包含内置为工具栏的用户可自定义的支持,并菜单、拖放到工具栏和菜单之间,组合框按钮,编辑框按钮、颜色选取器和汇总按钮。
下面是将CViewTree附加到CPersonView中。
方法是:
在类视图中右键选择CPersonView类
访问选择“protected”变量类型选择输入“CViewTree”变量名输入“m_wndViewTree”点击完成。
这样就在CPersonView类的头文件中定议一个名为m_wndViewTree的变量。
代码如下:
protected:
DECLARE_MESSAGE_MAP()
CViewTreem_wndViewTree;
同样方法为CPersonView添加如下两个变量:
CImageListm_PersonViewImages;
CPersonViewToolBarm_wndToolBar;
接下来我们要为CPersonView添加一个弹出式菜单方法是:
选择资源视图(或者在解决方案视图中找到资源文件(MyTest.rc)双击进入资源视图)
右击“Menu”
选择添加资源
点击新建
方法不再赘述,其ID改为IDR_POPUP_EXPLORER,保存。
添加位图资源(与菜单相同)其ID改为IDB_PERSON_VIEW
添加工具栏其ID改为IDR_EXPLORER
同法添加IDB_EXPLORER_24及IDB_FILE_VIEW
为CPerosnView添加自定义方法OnChangeVisualStyle()和AdjustLayout
,方法是,进入类向导选择“方法”
点击添加方法
返回类型为void,参数类型不添加,访问选择public点确定。
再添加一个用于对树添加节点的私有方法:
FillFileView方法。
下面是三个方法的代码
voidCPersonView:
OnChangeVisualStyle(void)
m_wndToolBar.CleanUpLockedImages();
m_wndToolBar.LoadBitmap(theApp.m_bHiColorIcons?
IDB_EXPLORER_24:
IDR_EXPLORER,0,0,TRUE/*锁?
定¡
§
*/);
m_PersonViewImages.DeleteImageList();
UINTuiBmpId=theApp.m_bHiColorIcons?
IDB_PERSON_VIEW_24:
IDB_PERSON_VIEW;
CBitmapbmp;
if(!
bmp.LoadBitmap(uiBmpId))
TRACE(_T("
无T法¤
¡
加¨
®
载?
位?
图ª
?
%x\n"
),uiBmpId);
ASSERT(FALSE);
return;
BITMAPbmpObj;
bmp.GetBitmap(&
bmpObj);
UINTnFlags=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_wndViewTree.SetImageList(&
m_PersonViewImages,TVSIL_NORMAL);
}
AdjustLayout(void)
if(GetSafeHwnd()==NULL)
CRectrectClient;
GetClientRect(rectClient);
intcyTlb=m_wndToolBar.CalcFixedLayout(FALSE,TRUE).cy;
m_wndToolBar.SetWindowPos(NULL,rectClient.left,rectClient.top,rectClient.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);
FillFileView(void)
HTREEITEMhRoot=m_wndViewTree.InsertItem(_T("
FakeApp文?
件t"
),0,0);
m_wndViewTree.SetItemState(hRoot,TVIS_BOLD,TVIS_BOLD);
HTREEITEMhSrc=m_wndViewTree.InsertItem(_T("
FakeApp源¡
ä
文?
),0,0,hRoot);
m_wndViewTree.InsertItem(_T("
FakeApp.cpp"
),1,1,hSrc);
FakeApp.rc"
FakeAppDoc.cpp"
FakeAppView.cpp"
MainFrm.cpp"
StdAfx.cpp"
HTREEITEMhInc=m_wndViewTree.InsertItem(_T("
FakeApp头ª
¤
FakeApp.h"
),2,2,hInc);
FakeAppDoc.h"
FakeAppView.h"
Resource.h"
MainFrm.h"
StdAfx.h"
HTREEITEMhRes=m_wndViewTree.InsertItem(_T("
FakeApp资Á
¨
º
源¡
FakeApp.ico"
),2,2,hRes);
FakeApp.rc2"
FakeAppDoc.ico"
FakeToolbar.bmp"
m_wndViewTree.Expand(hRoot,TVE_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窗口尺寸变化消息
五个消息,代码如下
OnContextMenu(CWnd*pWnd,CPointpoint)
//TODO:
在¨
²
此ä
处ä
|添¬
ª
消?
息¡
é
|理¤
程¨
¬
序¨
°
代ä
码?
CTreeCtrl*pWndTree=(CTreeCtrl*)&
m_wndViewTree;
ASSERT_VALID(pWndTree);
if(pWnd!
=pWndTree)
CDockablePane:
OnContextMenu(pWnd,point);
if(point!
=CPoint(-1,-1))
//选?
择?
已°
单Ì
£
击¡
Â
的Ì
项?
CPointptTree=point;
pWndTree->
ScreenToClient(&
ptTree);
UINTflags=0;
HTREEITEMhTreeItem=pWndTree->
HitTest(ptTree,&
flags);
if(hTreeItem!
=NULL)
{
pWndTree->
SelectItem(hTreeItem);
}
pWndTree->
SetFocus();
theApp.GetContextMenuManager()->
ShowPopupMenu(IDR_POPUP_EXPLORER,point.x,point.y,this,TRUE);
intCPersonView:
OnCreate(LPCREATESTRUCTlpCreateStruct)
if(CDockablePane:
OnCreate(lpCreateStruct)==-1)
return-1;
添¬
您¨
专Á
用®
创ä
建¡
CRectrectDummy;
rectDummy.SetRectEmpty();
//创ä
视º
constDWORDdwViewStyle=WS_CHILD|WS_VISIBLE|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS;
m_wndViewTree.Create(dwViewStyle,rectDummy,this,4))
TRACE0("
未¡
能¨
¹
件t视º
\n"
);
//未¡
//加¨
像?
m_PersonViewImages.Create(IDB_PERSON_VIEW,16,0,RGB(255,0,255));
m_wndToolBar.Create(this,AFX_DEFAULT_TOOLBAR_STYLE,IDR_EXPLORER);
m_wndToolBar.LoadToolBar(IDR_EXPLORER,0,0,TRUE/*已°
锁?
OnChangeVisualStyle();
m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle()|CBRS_TOOLTIPS|CBRS_FLYBY);
m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle()&
~(CBRS_GRIPPER|CBRS_SIZE_DYNAMIC|CBRS_BORDER_TOP|CBRS_BORDER_BOTTOM|CBRS_BORDER_LEFT|CBRS_BORDER_RIGHT));
m_wndToolBar.SetOwner(this);
//所¨
´
有®
D命¨
令¢
将?
通ª
过y此ä
控?
件t路¡
由®
¦
,ê
而?
不?
是º
过y主¡
框¨
架¨
路¡
m_wndToolBar.SetRouteCommandsViaFrame(FALSE);
//填入一些静态树视图数据此处只需填入虚拟代码,而不是复杂的数据)
FillFileView();
AdjustLayout();
return0;
OnPaint()
CPaintDCdc(this);
//devicecontextforpainting
//不?
为a绘?
调Ì
CDockablePane:
CRectrectTree;
m_wndViewTree.GetWindowRect(rectTree);
ScreenToClient(rectTree);
rectTree.InflateRect(1,1);
dc.Draw3dRect(rectTree,:
GetSysColor(COLOR_3DSHADOW),:
GetSysColor(COLOR_3DSHADOW));
OnSetFocus(CWnd*pOldWnd)
OnSetFocus(pOldWnd);
m_wndViewTree.SetFocus();
OnSize(UINTnType,intcx,intcy)
OnSize(nType,cx,cy);
我们现在就以完成了CPersonView类的设计,可以编译运行一下,如查没有发生错误就可以接着将CPersonView加到框架中去了。
三、将新视图添加到框架窗口中
添加一个字符串资源
ID为IDS_PERSON_VIEW标题为“人力资源”。
保存
再添加一个空ID为ID_VIEW_PERSONVIEW
再添加两个图标资源IDI_PERSON_VIEW_HC和IDI_PERSON_VIEW
接下来我们在类视图中找到CMainFrame类,点击右键,为其添加CPersonView变量m_wndPersonView。
下面为CMainFrame添加两个自定义方法,
BOOLCMainFrame:
CreateDockingWindow(void)
BOOLbNameValid;
//创建类视图
CStringstrClassView;
bNameValid=strClassView.LoadString(IDS_PERSON_VIEW);
ASSERT(bNameValid);
m_wndPersonView.Create(strClassView,this,CRect(0,0,200,200),TRUE,ID_VIEW_PERSONVIEW,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|CBRS_LEFT|CBRS_FLOAT_MULTI))
未能创建“人力资源视图”窗口\n"
returnFALSE;
//未能创建
SetDockingWindowIcons(theApp.m_bHiColorIcons);
returnTRUE;
voidCMainFrame:
SetDockingWindowIcons(boolbHiColorIcons)
HICONhFileViewIcon=(HICON):
LoadImage(:
AfxGetResourceHandle(),MAKEINTRESOURCE(bHiColorIcons?
IDI_PERSON_VIEW_HC:
IDI_PERSON_VIEW),IMAGE_ICON,:
GetSystemMetrics(SM_CXSMICON),:
GetSystemMetrics(SM_CYSMICON),0);
m_wndPersonView.SetIcon(hFileViewIcon,FALSE);
双击框架类的成员函数OnCreate
添加代码
intCMainFrame:
if(CMDIFrameWndEx:
//基于持久值设置视觉管理器和样式
OnApplicationLook(theApp.m_nAppLook);
CMDITabInfomdiTabParams;
mdiTabParams.m_style=CMFCTabCtrl:
STYLE_3D_ONENOTE;
//其他可用样式...
mdiTabParams.m_bActiveTabCloseButton=TRUE;
//设置为FALSE会将关闭按钮放置在选项卡区域的右侧
mdiTabParams.m_bTabIcons=FALSE;
//设置为TRUE将在MDI选项卡上启用文档图标
mdiTabParams.m_bAutoColor=TRUE;
//设置为FALSE将禁用MDI选项卡的自动着色
mdiTabParams.m_bDocumentMenu=TRUE;
//在选项卡区域的右边缘启用文档菜单
EnableMDITabbedGroups(TRUE,mdiTabParams);
m_wndMenuBar.Create(this))
未能创建菜单栏\n"
m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle()|CBRS_SIZE_DYNAMIC|CBRS_TOOLTIPS|CBRS_FLYBY);
//防止菜单栏在激活时获得焦点
CMFCPopupMenu:
SetForceMenuFocus(FA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Visual Studio MFC框架结构设计 MFC 框架结构 设计