现在的位置: 首页 > 综合 > 正文

获得窗体句柄

2013年10月22日 ⁄ 综合 ⁄ 共 1913字 ⁄ 字号 评论关闭

转自http://blog.csdn.net/wrnickle/archive/2005/03/16/248177.aspx

 

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++;

       }

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wrnickle/archive/2005/03/16/248177.aspx

抱歉!评论已关闭.