在應用中乙個視對應乙個文件,但乙個文件可以包含多個視。乙個應用中只用乙個框架視窗,對多文件介面來講可能有多個mdi子視窗。每乙個視都是乙個子視窗,在單文件介面中父視窗即是框架視窗,在多文件介面中父視窗為mdi子視窗。乙個多文件應用中可以包含多個文件模板,乙個模板定義了乙個文件和乙個或多個視之間的對應關係。同乙個文件可以屬於多個模板,但乙個模板中只允許定義乙個文件。同樣乙個視也可以屬於多個文件模板。
接下來看看如何在程式中得到各種物件的指標:
mdi物件之間的互動函式類
函式返回值
cwnd getparentframe cframewnd *(指向父視窗框架)
cframewnd getactiveview cview*(指向當前活動視)
cframewnd getactivedocument cdocument *(指向當前活動文件)
cview getdocument cdocument* (同該檢視類相聯絡)
cdocument getfirstviewposition 同文件相關的檢視列表中的第乙個檢視類位置
cdocument getnextview 同文件相關的檢視列表中的下乙個檢視類位置
e.g. cmainframe* mfrm=(cmainframe
*)afxgetmainwnd();
e.g.:得到當前視:
cframewnd* pmain =
(cframewnd*) afxgetmainwnd();
cframewnd *pchild =
(cframewnd *) pmain->getactiveframe();
cview* m_pagentview
= (cview *)pchild->getactiveview();l
訪問當前活動檢視和活動文件.
表6-1 文件、文件模板、檢視和框架類的互相訪問
從該物件
如何訪問其他物件
全域性函式
應用文件
呼叫cdocument::getfirstviewposition,cdocument::getnextview來遍歷所有和文件關聯的檢視;呼叫cdocument:: getdoctemplate 獲取文件模板指標
文件模板
呼叫cdoctemplate::getfirstdocposition、cdoctemplate::getnextdoc來遍歷所有對應文件
檢視呼叫cview::getdocument 得到對應的文件指標; 呼叫cview::getparentframe 獲取框架視窗
文件框架視窗
呼叫cframewnd::getactiveview 獲取當前得到當前活動檢視指標; 呼叫cframewnd::getactivedocument 獲取附加到當前檢視的文件指標
mdi 框架視窗
呼叫cmdiframewnd::mdigetactive 獲取當前活動的mdi子視窗(cmdichildwnd)
我們列舉乙個例子,綜合應用上表中的函式,寫一段**,它完成遍歷文件模板、文件和檢視的功能:
pdoctemplate->getfirstdocposition();//得到文件模板對應的第1個文件
while (p1 != null) //遍歷文件模板對應的文件}}
由此可見,下面的管理關係和實現途徑都是完全類似的:
(1)應用程式之於文件模板;
(2)文件模板之於文件;
(3)文件之於檢視。
update
all views
cmdichildwnd* pchildactive = mdigetactive();
conedocandmultviewdoc* pdoc = (conedocandmultviewdoc*)pchildactive->getactivedocument();
//mypage2
*page2 = new mypage2();
//cmdichildwnd*
pcolorchild = (cmdichildwnd*)pdoctemple_color->createnewframe(pdoc, null);
cchildframe* pcolorchild = new cchildframe();
if (!pcolorchild)
afxmessagebox(_t("can't
create new child frame!\n"));
return;
ccreatecontext context;
context.m_pnewviewclass = runtime_class(mypage2);
context.m_pcurrentdoc = pdoc;
&context);
//pdoctemple_color->initialupdateframe(pcolorchild,
pdoc);
pcolorchild->showwindow(sw_showmaximized);
pcolorchild->initialupdateframe(null, true);
mditile(mditile_zorder);
思考一下: cmdichildwnd
與 cchildframe
有什麼不同。
更新cmultidoctemplate相關的所有views
if (muldoc)
position p1=muldoc->getfirstdocposition();
while (p1)
cdocument *doc=muldoc->getnextdoc(p1);
position p2 =
doc->getfirstviewposition();
while (p2)
cview *view=doc->getnextview(p2);
if (view==null)
return;
if (view->iskindof(runtime_class(myview1)))
afxmessagebox(_t("true"));
cupdateallviewdoc*doc=(cupdateallviewdoc*)view->getdocument();
if (doc)
doc->m_sztext
= _t("更新所有的views………..");
------------------------------遍歷整個文件和試圖-------------------------------------------
--------------------------------字元型別之間的轉換----------------------------------------
2023年08月01日 16:41:23
MFC相關知識點
本部落格內容 一 mfc訊息對映機制 二 mfc單文件框架講述 三 mfc的基本類有哪些 四 windows程式執行 五 sendmessage 和postmessage的異同 參考 mfc是windows下的乙個類庫,主要是封裝了win32 api函式,並設計了一套方便的訊息對映機制。具體實現方法...
mysql常用知識點 mysql 常用知識點。
mysql u root p show databases show tables select from abc order by id limit 0,10 create database bbb exit mysqldump u root p game home backup.sql mysq...
常用的知識點
常用的知識點 個人覺得vue的腳手架要多花時間來講,比如如何在腳手架上面搭出乙個實用的專案 應該給同學們介紹提交 到伺服器上的軟體,比如雖然是很簡單的 但是我記得當時第一次提交 到伺服器就找不到乙個埠號,22,後來是第二天才提交的.heima教的很多東西我都在公司中用的,覺得挺開心的一件事 node...