首頁>技術>

你可以因為現任不好而分手,但千萬不要認為別人更好,永遠有人更好,眼下便是更好。。。

---- 網易雲熱評

一、 多文件檢視架構程式

1、特點: 可以管理多個文件。(可以有多個文件類物件)

2、相關類

CWinApp / CMDIFrameWnd / CMDIChildWnd / CView / CDocument-文件類

CDocManager - 文件管理類

CDocTemplate - 文件模板類

CMultiDocTemplate - 多文件模板類

3、關係圖

theApp

|->m_pDocManager //文件管理類物件地址

|->m_templateList

|->CMultiDocTemplate* pTemplate

|->m_docList //文件類物件地址

|->m_pDocClass

//文件類的靜態變數的地址 RUNTIME_CLASS(CMyDoc)

|->m_pFrameClass

//子框架類的靜態變數的地址 RUNTIME_CLASS(CMyChild)

|->m_pViewClass

//檢視類的靜態變數的地址 RUNTIME_CLASS(CMyView)

4 OnFileNew函式的執行過程

透過theApp獲取文件管理類物件地址(m_pDocManager)

透過文件管理類物件地址(m_pDocManager)獲取一個連結串列成員(m_templateList)並從連結串列中獲取單文件模板類物件(pTemplate)

利用單文件模板類物件(pTemplate)獲取文件類的靜態變數地址,並呼叫物件加工廠函式,動態建立文件類物件,並返回物件地址。

利用單文件模板類物件(pTemplate)獲取框架類的靜態變數地址,並呼叫物件加工廠函式,動態建立子框架類物件,並返回物件地址。

利用框架類物件呼叫LoadFrame函式,建立主框架視窗.

在處理框架視窗的WM_CREATE訊息時,動態建立檢視類物件並建立檢視視窗。

在處理檢視視窗的WM_CREATE訊息時,將檢視類物件和文件類物件建立繫結關係。

二、新建win32多文件

1、新建windows桌面嚮導

2、設為啟動項並配置相關屬性

3、新增選單資源,選單項必須兩個,否則報錯

4、新建原始檔建立主視窗框架

#include <afxwin.h>#include <afxext.h>#include "resource.h"//文件類、檢視類、自文件類都支援動態建立機制class CMyDoc : public CDocument {       DECLARE_DYNCREATE(CMyDoc)};IMPLEMENT_DYNCREATE(CMyDoc, CDocument)class CMyView : public CEditView {       DECLARE_DYNCREATE(CMyView)};IMPLEMENT_DYNCREATE(CMyView, CEditView)class CMyChild : public CMDIChildWnd {       DECLARE_DYNCREATE(CMyChild)};IMPLEMENT_DYNCREATE(CMyChild, CMDIChildWnd)//主框架類class CMyFrameWnd : public CMDIFrameWnd {};//應用程式類class CMyWinApp : public CWinApp {public:       virtual BOOL InitInstance();};CMyWinApp theApp;BOOL CMyWinApp::InitInstance() {       //建立主框架視窗       CMyFrameWnd* pFrame = new CMyFrameWnd;       pFrame->LoadFrame(IDR_MENU1);       m_pMainWnd = pFrame;       pFrame->ShowWindow(SW_SHOW);       pFrame->UpdateWindow();       return TRUE;}

執行結果:

5、新增子視窗

       //多文件模板       CMultiDocTemplate* pTemplate = new CMultiDocTemplate(              IDR_MENU2,              RUNTIME_CLASS(CMyDoc),              RUNTIME_CLASS(CMyChild),              RUNTIME_CLASS(CMyView));       AddDocTemplate(pTemplate);       OnFileNew();

報錯:

6、處理報錯,新增string table

7、有幾個OnFileNew();就有幾個自框架愛,執行結果:

三、在多文件中控制某單文件

1、在文件類中宣告一個變數

class CMyDoc : public CDocument {       DECLARE_DYNCREATE(CMyDoc)       //點選選單項就賦一個值public:       CString str;};

2、在應用程式中實現

class CMyWinApp : public CWinApp {       DECLARE_MESSAGE_MAP()public:       virtual BOOL InitInstance();       afx_msg void OnNew();};BEGIN_MESSAGE_MAP(CMyWinApp, CWinApp)       ON_COMMAND(ID_xinjian, OnNew)END_MESSAGE_MAP()void CMyWinApp::OnNew() {       //給文件類成員str賦值       CDocManager* pDocManager = this->m_pDocManager;       POSITION pos = pDocManager->GetFirstDocTemplatePosition();       //返回第一個節點       CMultiDocTemplate* pTemplate =              (CMultiDocTemplate*)pDocManager->GetNextDocTemplate(pos);       pos = pTemplate->GetFirstDocPosition();       CMyDoc* pDoc = (CMyDoc*)pTemplate->GetNextDoc(pos);       pDoc = (CMyDoc*)pTemplate->GetNextDoc(pos);       pDoc->str = "hello world";       //重新整理和第二個文件類物件關聯的所有檢視視窗       pDoc->UpdateAllViews(NULL);}

3、重寫OnUpdate函式

class CMyView : public CEditView {       DECLARE_DYNCREATE(CMyView)public:       virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);};IMPLEMENT_DYNCREATE(CMyView, CEditView)void CMyView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint){       CMyDoc* pDoc = (CMyDoc*)this->m_pDocument;       SetWindowText(pDoc->str);}

4、執行結果,點選選單新建

19
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • BurpSuite外掛 -- FastjsonScan