?? vcc64.htm
字號(hào):
<html>
<head>
<title>c++系列</title>
<meta content="text/html; charset=gb2312" http-equiv=Content-Type>
</head>
<p align="center"><script src="../../1.js"></script></a>
<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center>
<table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
<tbody>
<tr>
<td width=200 height="59">
</tr>
</tbody>
</table>
<table border=1 bordercolordark=#ffffff bordercolorlight=#ffffff cellpadding=0
cellspacing=0 width=685 align="center" height="70">
<tbody>
<tr>
<td bgcolor=#F9D23C height=14>
<div align=center class=H1><font color="#FFFFFF">文檔 視圖 框架窗口間的關(guān)系和消息傳送規(guī)律</font></div>
</td>
</tr>
<tr valign=top>
<td class=H1 height=51>
<p align="left">在MFC中M$引入了文檔-視結(jié)構(gòu)的概念,文檔相當(dāng)于數(shù)據(jù)容器,視相當(dāng)于查看數(shù)據(jù)的窗口或是和數(shù)據(jù)發(fā)生交互的窗口。(這一結(jié)構(gòu)在MFC中的OLE,ODBC開(kāi)發(fā)時(shí)又得到更多的拓展)因此一個(gè)完整的應(yīng)用一般由四個(gè)類組成:CWinApp應(yīng)用類,CFrameWnd窗口框架類,CDocument文檔類,CView視類。(VC6中支持創(chuàng)建不帶文檔-視的應(yīng)用)</p>
<p class="unnamed1">在程序運(yùn)行時(shí)CWinApp將創(chuàng)建一個(gè)CFrameWnd框架窗口實(shí)例,而框架窗口將創(chuàng)建文檔模板,然后有文檔模板創(chuàng)建文檔實(shí)例和視實(shí)例,并將兩者關(guān)聯(lián)。一般來(lái)講我們只需對(duì)文檔和視進(jìn)行操作,框架的各種行為已經(jīng)被MFC安排好了而不需人為干預(yù),這也是M$設(shè)計(jì)文檔-視結(jié)構(gòu)的本意,讓我們將注意力放在完成任務(wù)上而從界面編寫(xiě)中解放出來(lái)。</p>
<p class="unnamed1">在應(yīng)用中一個(gè)視對(duì)應(yīng)一個(gè)文檔,但一個(gè)文檔可以包含多個(gè)視。一個(gè)應(yīng)用中只用一個(gè)框架窗口,對(duì)多文檔界面來(lái)講可能有多個(gè)MDI子窗口。每一個(gè)視都是一個(gè)子窗口,在單文檔界面中父窗口即是框架窗口,在多文檔界面中父窗口為MDI子窗口。一個(gè)多文檔應(yīng)用中可以包含多個(gè)文檔模板,一個(gè)模板定義了一個(gè)文檔和一個(gè)或多個(gè)視之間的對(duì)應(yīng)關(guān)系。同一個(gè)文檔可以屬于多個(gè)模板,但一個(gè)模板中只允許定義一個(gè)文檔。同樣一個(gè)視也可以屬于多個(gè)文檔模板。(不知道我說(shuō)清楚沒(méi)有)</p>
<p class="unnamed1">接下來(lái)看看如何在程序中得到各種對(duì)象的指針:
<ul>
<li class="unnamed1">全局函數(shù)AfxGetApp可以得到CWinApp應(yīng)用類指針
<li class="unnamed1">AfxGetApp()->m_pMainWnd為框架窗口指針
<li class="unnamed1">在框架窗口中:CFrameWnd::GetActiveDocument得到當(dāng)前活動(dòng)文檔指針
<li class="unnamed1">在框架窗口中:CFrameWnd::GetActiveView得到當(dāng)前活動(dòng)視指針
<li class="unnamed1">在視中:CView::GetDocument得到對(duì)應(yīng)的文檔指針
<li class="unnamed1">在文檔中:CDocument::GetFirstViewPosition,CDocument::GetNextView用來(lái)遍歷所有和文檔關(guān)聯(lián)的視。
<li class="unnamed1">在文檔中:CDocument::GetDocTemplate得到文檔模板指針
<li class="unnamed1">在多文檔界面中:CMDIFrameWnd::MDIGetActive得到當(dāng)前活動(dòng)的MDI子窗口
</li>
</ul>
<p></p>
<p class="unnamed1">一般來(lái)講用戶輸入消息(如菜單選擇,鼠標(biāo),鍵盤(pán)等)會(huì)先發(fā)往視,如果視未處理則會(huì)發(fā)往框架窗口。所以定義消息映射時(shí)定義在視中就可以了,如果一個(gè)應(yīng)用同時(shí)擁有多個(gè)視而當(dāng)前活動(dòng)視沒(méi)有對(duì)消息進(jìn)行處理則消息會(huì)發(fā)往框架窗口。</p>
<div align="left"> </div>
</td>
</tr>
</tbody>
</table>
</div>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -