乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      理解MFC文檔/視圖框架

       Frank_Chia 2009-07-27
      [轉(zhuǎn)]理解MFC文檔/視圖框架 by 雷神
      2008年06月13日 星期五 下午 10:03
      了解文檔和視圖的相互作用關(guān)系是編寫MFC程序的基本功。但是MFC的應(yīng)用程序框架把文檔和視圖之間的關(guān)系封裝了起來,初學(xué)的朋友往往不得要領(lǐng),因此寫程序往往被局限于在用向?qū)傻目蚣苤小1疚南M芙o一些朋友帶來小小的幫助。
      幾個(gè)概念:
      (雖然大家都知道了,雷神還是要重申一次)
      文檔對(duì)象:是用來保存數(shù)據(jù)的。
      視圖對(duì)象:是用來顯示和編輯數(shù)據(jù)的。
      應(yīng)用程序框架:框架是用來管理不同文檔顯示界面的。例如你有一個(gè)數(shù)據(jù)網(wǎng)格顯示界面,還有一個(gè)圖形顯示界面,它們的數(shù)據(jù)可能都來自你的文檔,但是視圖不同,怎么辦用框架。為什么不用視圖?為的是把界面管理獨(dú)立的拿出來。
      文檔模板:MFC把文檔/視圖/框架視為一體,只要你創(chuàng)建文檔/視圖框架結(jié)構(gòu)的程序,必定會(huì)為你創(chuàng)建這三個(gè)類。這個(gè)工作在在應(yīng)用程序初始化時(shí)完成,如下:

      BOOL CMyHtmlApp::InitInstance()
      {
           //。。。。。。
           CSingleDocTemplate* pDocTemplate;
           pDocTemplate = new CSingleDocTemplate(
               IDR_MAINFRAME,
               RUNTIME_CLASS(CMyHtmlDoc),
               RUNTIME_CLASS(CMainFrame),       // main SDI frame window
               RUNTIME_CLASS(CMyHtmlView));
           AddDocTemplate(pDocTemplate);
           //。。。。。。
      }

      單文檔:就是一次只能打開一個(gè)文件,和你的文檔類型支持的多少無關(guān)。你完全可以做一個(gè)單文檔的支持所有圖象格式的程序,只不過它一次只能打開一個(gè)文檔罷了。
      多文檔:就是你可以打開多個(gè)文件,和文檔類型也無關(guān)。你也可以作一個(gè)可以同時(shí)打開多個(gè)文檔的程序,但它只支持一種文檔類型。

      何時(shí)需要文檔/視圖框架結(jié)構(gòu)?
      首先你可以不使用文檔視圖這種框架結(jié)構(gòu),即便是在MFC中。你可以在你需要的時(shí)候選擇使用這種方式。你可以完成一個(gè)只有視圖沒有文檔的程序,例如一個(gè)基于對(duì)話框的應(yīng)用。
      哪什么時(shí)候需要呢?
      當(dāng)你想將你的數(shù)據(jù)層和界面層分開的時(shí)候。
      通 常我們對(duì)數(shù)據(jù)的操作放在文檔類中,例如存取,打開,關(guān)閉。在這里你可以盡情的對(duì)你的數(shù)據(jù)進(jìn)行操作,如果你需要,在對(duì)數(shù)據(jù)進(jìn)行了改變后,對(duì)視圖做一下更新, 那么程序會(huì)將你對(duì)數(shù)據(jù)所做的改變呈現(xiàn)給你的程序的用戶。由此可見視圖的作用就是提供一個(gè)用戶和數(shù)據(jù)之間進(jìn)行數(shù)據(jù)交換的界面,它的作用就是在需要的時(shí)候顯示 數(shù)據(jù),并在需要的時(shí)候提供輸入界面。當(dāng)用戶輸入后實(shí)際的數(shù)據(jù)操作工作是由文檔類來做的。那框架類有在做什么呢?
      框架類是為了便于管理你的文檔類和 視圖類而存在的。通常我們的操作都是通過視圖窗口完成,消息由視圖進(jìn)行接收并且進(jìn)行處理。所以消息映射定義一般在視圖中。但如果一個(gè)應(yīng)用同時(shí)擁有多個(gè)視而 當(dāng)前活動(dòng)視沒有對(duì)消息進(jìn)行處理則消息會(huì)發(fā)往框架窗口。另外框架窗口可以方便的處理非窗口消息。

      再來說一邊典型的單文檔程序的生成過程(不完整,只挑有用的)
      1、     CwinApp對(duì)象被建立,這個(gè)對(duì)象是全局的且只能有一個(gè),名字叫theApp。這時(shí)你可以完成一些工作,例如對(duì)注冊表的操作,(如果你想寫一個(gè)不修改注冊表的軟件,需要在這里做寫工作)
      2、     在InitInstance()函數(shù)中創(chuàng)建文檔模板,文檔模板以CruntimClass靜態(tài)成員指針做構(gòu)造參數(shù)。
      3、     執(zhí)行MFC框架默認(rèn)的命令行參數(shù)。命令行參數(shù)有很多其中之一是,Cmd1它會(huì)創(chuàng)建一個(gè)新文件。(如果沒有命令行參數(shù)則執(zhí)行默認(rèn)的ID_FILE_NEW)
      4、     文檔模板的實(shí)例根據(jù)三個(gè)類的動(dòng)態(tài)創(chuàng)建信息創(chuàng)建出文檔、視圖、框架。
      5、     對(duì)文檔、視圖、框架進(jìn)行初始化。

      我們對(duì)文檔,視圖,框架如何產(chǎn)生以及他們的用途有了一定的了解,如何有效的使用它們呢。

      文檔,視圖,框架之間的相互作用。
      由 上面的典型的單文檔程序的生成過程可以看出一個(gè)完整的應(yīng)用一般由四個(gè)類組成:CWinApp應(yīng)用類,CFrameWnd框架類,CDocument文檔 類,CView視圖類。我將四個(gè)類常用的成員函數(shù)列出,大家一看便知。不過參數(shù),返回值均未列出,大家可以從MSDN上了解更多。幾個(gè)重要的虛函數(shù)也未做 說明。大家自己看吧。

      通過全局函數(shù)AfxGetApp可以得到CWinApp應(yīng)用類的全局對(duì)象theApp.
      CwinApp
      數(shù)據(jù)成員:
      m_pszAppName 應(yīng)用程序名稱
      m_pszExeName 可執(zhí)行文件的名稱
      m_pszProfileName INI文件的名
      m_pszRegistryKey 注冊表或INI文件的KEY
      m_hInstance 實(shí)例的句柄
      m_pMainWnd 為框架窗口指針
      成員函數(shù):
      InitInstance()   //初始化
      ParseCommandLine() //完成命令行的解析處理

      CFrameWnd
      GetActiveDocument()     //得到當(dāng)前活動(dòng)文檔指針
      GetActiveView()     //得到當(dāng)前活動(dòng)視指針
      SetActiveView()     //設(shè)置當(dāng)前視圖為活動(dòng)視圖

      CDocument
      OnNewDocument()
      OnOpenDocument()
      OnSaveDocument()
      OnFileClose()
      //以上是用來對(duì)文檔的操作
      GetFirstViewPosition() //文檔對(duì)象鏈表中的第一個(gè)文檔位置
      GetNextView()         //下一個(gè)
      //以上是用來遍歷所有和文檔關(guān)聯(lián)的視圖
      GetDocTemplate()得到文檔模板指針
      AddView()         //增加一個(gè)視圖
      RemoveView()     //刪除一個(gè)視圖
      UpdateAllView()     //更新所有視圖

      Cview
      GetDocument()得到對(duì)應(yīng)的文檔指針

      其他的就不列出了,大家還是看MSDN。你可以直接查看CWinApp應(yīng)用類,CFrameWnd框架類,CDocument文檔類,CView視圖類的類成員。


      最后說說幾個(gè)常見到的問題。
      1、     為什么在對(duì)話框的應(yīng)用程序中沒有發(fā)現(xiàn)文檔模板?
      默認(rèn)的對(duì)話框程序沒有使用文檔/視圖框架結(jié)構(gòu)。

      2、     如果我使用數(shù)據(jù)庫作為數(shù)據(jù)源是否意味著可以不需要文檔類?
      看你自己,但是我建議使用。因?yàn)榭梢晕臋n,視圖這一個(gè)清晰方便的框架結(jié)構(gòu),以及方便完成三者之間的相互作用。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多