一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针获取和操作问题。

下 面这节内容主要是一般的框架,然后再讲多线程中的指针使用。使用到的类需要包含响应的头文件。首先一般获得本类(视,文档,对话框都支持)实例指针 this,用this的目的,主要可以通过类中的函数向其他类或者函数中发指针,以便于在非本类中操作和使用本类中的功能。 这其中的关键在于理解 m_pMainWnd, AfxGetApp(),AfxGetMainWnd() 的意义!

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) 在任何类中获得应用程序类

AfxGetInstanceHandle 得到句柄,AfxGetApp 得到指针

B1.如何在自己的类和“应用程序类”中获得“文档类”的句柄?

SDI AfxGetMainWnd() -> GetActiveView() -> GetDocument() 得到指针

MDI AfxGetMainWnd() -> MDIGetActive() -> GetActiveView() -> GetDocument() 得到指针

B3.如何在“框架类”中获得“文档类”句柄?

SDI GetActiveView() -> GetDocument() 得到指针,MDI MDIGetActive() -> GetActiveView() -> GetDocument() 从 CMainFrame 得到指针,GetActiveView() -> GetDocument() 从 CChildFrame 得到指针

B4.如何在“视图类”中获得“文档类”句柄?

GetDocument()

C1.如何在“文档类”中获得“视图类”句柄?

GetView(),调用 GetFirstViewPosition 和 GetNextView 函数得到指针。

C2.如何在自己的类和“应用程序类”中获得“视图类”句柄?

SDI GetActiveView 得到指针

MDI MDIGetActive() -> GetActiveView() 从 CMainFrame 得到指针,GetActiveView 从 CChildFrame 得到指针

 

最后提醒大家,在提取到各个句柄之后,因为初次提取的都是标准类句柄,所以,在使用时要注意将标准句柄转换成自己的类的句柄。

如:

AfxGetApp();//得到的是WinApp类的句柄,

所以操作前记得转换成自己定义的类的句柄。

如:

((CMyApp*)AfxGetApp())->XXXX();//这的xxxx()就是你定义的类中间的成员。

 

MFC全局函数:

AfxFreeLibrary:释放动态链接库 

AfxGetApp:获取当前CWinApp对象指针.

AfxGetAppName:获取应用程序名 

AfxGetInstanceHandle:获取当前应用程序句柄 

AfxGetMainWnd:获取应用程序主窗口指针 

AfxGetResourceHandle:获取资源句柄

AfxInitRichEdit:初始换1.0版本的rich edit控件 

AfxInitRichEdit2:初始换2.0版本的rich edit控件

AfxLoadLibrary:加载动态链接库 

AfxRegisterWndClass:注册窗口类 

AfxSocketInit:初始化Windows Socket 

AfxSetResourceHandle:设置资源句柄

AfxRegisterClass:注册一个窗口类 

AfxBeginThread:创建新线程

AfxEndThread:终止线程 

AfxGetThread:获取当前CWinThread对象指针.

AfxWinInit:WinMain函数主调,初始化CWinApp