document/view模式,是為了在邏輯上,讓資料和顯示分開。
一般在document裡,定義document類的成員變數,來存資料,並用view來顯示。在document裡,當成員變數的資料改變時,你可以用updateallviews()來通知檢視更新。
在view裡,用getdocument來獲取與之對應document的指標,進而可以訪問document的成員變數,從而進行顯示document/view僅僅是mfc為你提供的一種很好的支援而已。
在mfc中實現經典的mvc結構,如下圖所示:
注意:
1、document和view之間的繫結:view繫結到document。
2、frame作為controller時,由於可以接收到輸入訊息,比較適合充當控制器。但是,由於檢視和文件繫結,所以在切換檢視時需要將檢視和文件分離開,然後再進行切換。
3、view作為contrller時,由於該檢視和文件是繫結的,所以,可以通過該檢視將其他檢視與文件關聯起來,其他檢視並不直接和文件繫結。因此,可以通過隱藏和顯示檢視來實現不同檢視之間的切換。
4、mfc的doc/view結構本質上就是mvc結構,是mvc結構的一種實現,但是對mvc結構進行了簡化。
先這麼多,以後再補充……
1)在view中獲得doc指標:
cyousdidoc *pdoc=getdocument();乙個視只能有乙個文件。
cmainframe *pmain =(cmainframe *)afxgetmainwnd();
3)在view中獲得mainframe指標:
cmainframe *pmai
4)獲得view(已建立)指標:
cyouview *pview=(cyouview *)pmain->getactiveview();
5)獲得當前文件指標:
cdocument *pcurrentdoc =(cframewnd *)m_pmainwnd->getactivedocument();
6)獲得狀態列與工具欄指標:
cstatusbar *pstatusbar=(cstatusbar *)afxgetmainwnd()->getdescendantwindow(afx_idw_status_bar);
c******* *p*******=(c******* *)afxgetmainwnd()->getdescendantwindow(afx_idw_*******);
7)如果框架中加入工具欄和狀態列變數還可以這樣 :
(cmainframe *)getparent()->m_wnd*******;
(cmainframe *)getparent()->m_wndstatusbar;
8)在mainframe獲得選單指標:
cmenu *pmenu=m_pmainwnd->getmenu();
9)在任何類中獲得應用程式類:
獲得cmainframe:
-在cchildframe中可用getparentframe()
-在其它類中用afxgetmainwnd()
獲得cchildframe:
-在cview中用getparentframe()
-在cmainframe中用mdigetactive()或getactiveframe()
-在其它類中用afxgetmainwnd()->mdigetactive()或afxgetmainwnd()->getactiveframe()
獲得cdocument:
-在cview中用getdocument()
-在cchildframe中用getactiveview()->getdocument()
-在cmainframe中用
-if sdi:getactiveview()->getdocument()
-if mdi:mdigetactive()->getactiveview()->getdocument()
-在其它類中
-if sdi:afxgetmainwnd()->getactiveview()->getdocument()
-if mdi:afxgetmainwnd()->mdigetactive()->getactiveview()->getdocument()
獲得cview:
-在cdocument中 position pos = getfirstviewposition();getnextview(pos)
-在cchildframe中 getactiveview()
-在cmainframe中
-if sdi:getactiveview()
-if mdi:mdigetactive()->getactiveview()
-在其它類中
-if sdi:afxgetmainwnd()->getactiveview()
-if mdi:afxgetmainwnd()->mdigetactive()->getactiveview()
//
不錯!!!
不過要注意在doc中要取得view的指標c*view要注意類c*view宣告的問題,
因為預設情況下,mfc在*view.h中已經包含了*doc.h,如果在*doc.h中包含
*view.h,就會引起巢狀包含問題,這樣要在*doc.h中加入 class c*view;
而在*doc.cpp中加入 #include "*view.h"
//
方便我一直專門操作的說:)
//
我先拋塊磚,有玉的砸過來!
2。通過afxgetmainwnd()得到主視窗;
3。通過cmdiframewnd::getactiveframe得到當前活動視窗;
4。通過getnextwindow()遍例所有的子視窗;(如果要得到你想要的子視窗,可以通過特定的成員變數來標誌);
6。通過cdoctemplate::getfirstdocposition()以及cdoctemplate的getnextdoc()組合來遍歷所有的該模板的文件物件,並用cdocument::getdoctemplate()來得到文件模板,用cdocment::gettitle() 或者getpathname()來判斷當前的文件是哪個。
7。通過cdocuemt的getfirstviewpositon()以及getnextview()來遍歷檢視物件,一般通過訪問view的成員變數來區別各個檢視;通過cview::getdocument()來得到文件物件;
8。frame->view: 通過getactiveview()方法;
9。frame->doc:
通過getactivedocument();
10。view->frame:
getparentframe();
11。view->doc:
getdocuemt()//前面已經說了。
12。doc->view:
//前面說了;
13。doc->frame:
//不知道有沒有很直接的方法。
time t tm systemtime 互相轉換
摘自 標頭檔案 time.h 函式原型 time t time time t timer 功 能 獲取當前的系統時間,返回的結果是乙個time t型別 即int64型別 其實就是乙個大整數,其值表示從cut coordinated universal time 時間1970年1月1日00 00 00...
time t tm systemtime 互相轉換
標頭檔案 time.h 函式原型 time t time time t timer 功 能 獲取當前的系統時間,返回的結果是乙個time t型別 即int64型別 其實就是乙個大整數,其值表示從cut coordinated universal time 時間1970年1月1日00 00 00 稱為...
VIEW DOC frame 互相訪問
獲得cmainframe 在cchildframe中可用getparentframe 在其它類中用afxgetmainwnd 獲得cchildframe 在cview中用getparentframe 在cmainframe中用mdigetactive 或getactiveframe 在其它類中用af...