mfc 常用的知識點

2022-06-13 22:51:20 字數 4312 閱讀 2413

在應用中乙個視對應乙個文件,但乙個文件可以包含多個視乙個應用中只用乙個框架視窗,對多文件介面來講可能有多個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...