1. 程式人生 > >獲得窗體控制代碼

獲得窗體控制代碼

MDI物件之間的互動函式
類  函式 返回值
Global AfxGetApp CWinApp *(指向當前程式) 
Global AfxGetMainWnd CWnd *(指向程式主視窗框架)
CMDIFrameWnd MDIGetActive CMDIChild Wnd *(指向當前活動的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();

     訪問當前活動檢視和活動文件

1.         對於SDI程式,主框架視窗就是文件框窗,可以採用以下方法取得當前文件和檢視:

    取得活動文件:

CMyDocument* pDoc;

pDoc=(CMyDocument*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveDocument();

pDoc=(CMyDocument*)((CFrameWnd*)AfxGetMainWnd());

這兩者是等效的。

      取得活動檢視:

CMyView* pView;

pView=(CMyView*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView();

2.  對於MDI程式,由於子窗口才是文件框窗,因此首先要用GetActiveFrame()取得活動子框架視窗,然後通過該子視窗獲取活動文件和檢視:

CMDIChildWnd* pChild=(CMDIChildWnd*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveFrame();

    取得活動文件:

CMyDocument* pDoc=pChild->GetActiveDocument();

CMyView* pView=(CMyView*)pChild->GetActiveView();

可以把上述函式片段做成靜態成員函式,比如:

static CMyDocument::GetCurrentDoc()

{

CMDIChildWnd* pChild=(CMDIChildWnd*)((CFrameWnd*)AfxGetApp()- >m_pMainWnd)->GetActiveFrame();

CMyDocument* pDoc=pChild->GetActiveDocument();

}

這樣就可以通過以下方式取得活動文件(或檢視):

CMyDocument::GetCurrentDoc();

注:靜態成員函式呼叫時不需要一個具體的物件與之相關聯。

       文件模板中找文件

例:

       CMultiDocTemplate* pDocTmpl;

       pDocTmpl  = ((CImpApp*)AfxGetApp())->m_pDocTemplate;

       POSITION posDoc= pDocTmpl->GetFirstDocPosition();

       while(NULL!=posDoc)

       {

              pFrmDoc = (CFrmDoc*) pDocTmpl->GetNextDoc(posDoc);

              nDocOrder++;

       }