想作一个MFC中获得各个类的句柄的总结:A1.如何在自己的类中获得“应用程序类”(App)的句柄?
A2.如何在“文档类”(Doc)中获得“应用程序类”句柄?
A3.如何在“框架类”(Frame)中获得“应用程序类”句柄?
A4.如何在“视图类”(View)中获得“应用程序类”句柄?B1.如何在自己的类中获得“文档类”的句柄?
B2.如何在“应用程序类”中获得“文档类”句柄?
B3.如何在“框架类”中获得“文档类”句柄?
B4.如何在“视图类”中获得“文档类”句柄?(GetDocument)C1.如何在“视图类”中获得“视图类”句柄?(GetView)
C2.如何在自己的类中获得“视图类”句柄?
C3.如何在“应用程序类”中获得“视图”句柄?D.其他情况(大家自己提提看)

解决方案 »

  1.   

    这样才比较全面呀,其实A、B、C中有一些内容是相同的
      

  2.   

    AfxGetApp()->...
    GetActiveView()->...
      

  3.   

    A1 A2 A3 A4 AfxGetInstanceHandle 得到句柄
                AfxGetApp            得到指针
    B1 B2 SDI   AfxGetMainWnd() -> GetActiveView() -> GetDocument()   得到指针
          MDI   AfxGetMainWnd() -> MDIGetActive() -> GetActiveView() -> GetDocument() 得到指针
    B3    SDI   GetActiveView() -> GetDocument() 得到指针
          MDI   MDIGetActive() -> GetActiveView() -> GetDocument() 从 CMainFrame 得到指针
                GetActiveView() -> GetDocument() 从 CChildFrame 得到指针
    B4          GetDocument
    C1          this
    C2 C3 SDI   GetActiveView 得到指针
          MDI   MDIGetActive() -> GetActiveView() 从 CMainFrame 得到指针
                GetActiveView 从 CChildFrame 得到指针
      

  4.   

    1) 在View中获得Doc指 针
    2) 在App中获得MainFrame指针
    3) 在View中获得MainFrame指针
    4) 获得View(已建立)指针
    5) 获得当前文档指针
    6) 获得状态栏与工具栏指针
    7) 获得状态栏与工具栏变量
    8) 在Mainframe获得菜单指针
    9) 在任何类中获得应用程序类
    10) 从文档类取得视图类的指针(1)
    11) 在App中获得文档模板指针
    12) 从文档模板获得文档类指针
    13) 在文档类中获得文档模板指针
    14) 从文档类取得视图类的指针(2)
    15) 从一个视图类取得另一视图类的指针VC中编程对于刚刚开始学习的同学,最大的障碍和问题就是消息机制和指针获取与操作。其实这些内容基本上是每本VC学习工具书上必讲的内容,而且通过MSDN很多问题都能解决。
    下面文字主要是个人在编程中指针使用的一些体会,说的不当的地方请指正。
    一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针获取和操作问题。
    下面这节内容主要是一般的框架,然后再讲多线程中的指针使用。使用到的类需要包含响应的头文件。首先一般获得本类(视,文档,对话框都支持)实例指针this,用this的目的,主要可以通过类中的函数向其他类或者函数中发指针,以便于在非本类中操作和使用本类中的功能。 1) 在View中获得Doc指针 CYouSDIDoc *pDoc=GetDocument();一个视只能有一个文档。
     2) 在App中获得MainFrame指针
    CWinApp 中的 m_pMainWnd变量就是MainFrame的指针
    也可以: CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd();
     3) 在View中获得MainFrame指针 CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
     4) 获得View(已建立)指针 CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
    CyouView *pView=(CyouView *)pMain->GetActiveView();
      
      
    5) 获得当前文档指针 CDocument * pCurrentDoc =(CFrameWnd *)m_pMainWnd->GetActiveDocument();
     6) 获得状态栏与工具栏指针 CStatusBar * pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
    CToolBar * pToolBar=(CtoolBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR); 7) 如果框架中加入工具栏和状态栏变量还可以这样 (CMainFrame *)GetParent()->m_wndToolBar;
    (CMainFrame *)GetParent()->m_wndStatusBar; 8) 在Mainframe获得菜单指针 CMenu *pMenu=m_pMainWnd->GetMenu();
     9) 在任何类中获得应用程序类
    用MFC全局函数AfxGetApp()获得。
      

  5.   

    也可以到下面的地方看看http://download.cqcnc.com/soft/program/article/vc/vc405.html
      

  6.   

    其实理解这个问的关键是查看
    下面的变量或者函数的意义m_pMainWnd ; AfxGetApp();AfxGetMainWnd();  
     
      

  7.   

    C1.如何在“视图类”中获得“视图类”句柄?(GetView)
    写错了,应该是:
       C1.如何在“文档类”中获得“视图类”句柄?(GetView)
    还有没有补充的呀?补充的也给分,嘿嘿。
      

  8.   

    C1 如何在“文档类”中获得“视图类”句柄?
    调用 GetFirstViewPosition 和 GetNextView 函数得到指针。
      

  9.   

    如果使用的是SDI要如何在“应用程序类”(app)获得“视图类”(view)或“文档类”(Doc)的句柄呢?因为CWnd没有GetActiveView()的成员函数呀。
    在App类中:
    CMyView *pView = (CMyView *) m_pMainWnd->GetActiveView();
    没法得到程序的view,说是GetActiveView()不是CWnd的成员函数。(VS2003)另CMainFrame一般就是一个CWnd吧?
      

  10.   

    A1 A2 A3 A4 AfxGetInstanceHandle 得到句柄
                AfxGetApp            得到指针
    B1 B2 SDI   ((CMainFrame*)AfxGetMainWnd()) -> GetActiveView() -> GetDocument()   得到指针
          MDI   ((CMainFrame*)AfxGetMainWnd()) -> MDIGetActive() -> GetActiveView() -> GetDocument() 得到指针
    B3    SDI   GetActiveView() -> GetDocument() 得到指针
          MDI   MDIGetActive() -> GetActiveView() -> GetDocument() 从 CMainFrame 得到指针
                GetActiveView() -> GetDocument() 从 CChildFrame 得到指针
    B4          GetDocument
    C1          GetFirstViewPosition 和 GetNextView 
    C2 C3 SDI   GetActiveView 得到指针
          MDI   MDIGetActive() -> GetActiveView() 从 CMainFrame 得到指针
                GetActiveView 从 CChildFrame 得到指针
      

  11.   

    C2 C3 SDI   ((CMainFrame*)AfxGetMainWnd()) -> GetActiveView() 得到指针
           MDI   ((CMainFrame*)AfxGetMainWnd()) -> MDIGetActive() -> GetActiveView() 得到指针
      

  12.   

    最后提醒大家,在提取到各个句柄之后,因为初次提取的都是标准类句柄,所以,在使用时要注意将标准句柄转换成自己的类的句柄。
    如:
    AfxGetApp();//得到的是WinApp类的句柄,
    所以操作前记得转换成自己定义的类的句柄。
    如:
    ((CMyApp*)AfxGetApp())->XXXX();//这的xxxx()就是你定义的类中间的成员。说的对吗?
      

  13.   

    有谁知道如何根据hDC获得hBitmap吗?