MFC句柄、指针总结(转)
2012-07-18 14:44
232 查看
一般我们使用的框架是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()就是你定义的类中间的成员。
另外,附上 MSDN 关于应用程序信息和管理的各个函数:
When you write an application, you create a single CWinApp-derived
object. At times, you may want to get information about this object
from outside the CWinApp-derived
object.
The Microsoft Foundation Class Library provides the following
global functions to help you accomplish these
tasks:
Application Information and Management
Functions
AfxFreeLibrary
Decrements the reference count of the loaded dynamic-link library
(DLL) module; when the reference count reaches zero, the module is
unmapped.
AfxGetApp
Returns a pointer to the application's single CWinApp
object.
AfxGetAppName
Returns a string containing the application's
name.
AfxGetInstanceHandle
Returns an HINSTANCE representing this instance of the
application.
AfxGetMainWnd
Returns a pointer to the current "main" window of a non-OLE
application, or the in-place frame window of a server
application.
AfxGetResourceHandle
Returns an HINSTANCE to the source of the application's default
resources. Use this to access the application's resources
directly.
AfxInitRichEdit
Initializes the version 1.0 rich edit control for the
application.
AfxInitRichEdit2
Initializes the version 2.0 and later rich edit control for the
application.
AfxLoadLibrary
Maps a DLL module and returns a handle that can be used to get the
address of a DLL function.
AfxRegisterWndClass
Registers a Windows window class to supplement those registered
automatically by MFC.
AfxSocketInit
Called in a CWinApp::InitInstance override to initialize Windows
Sockets.
AfxSetResourceHandle
Sets the HINSTANCE handle where the default resources of the
application are loaded.
AfxRegisterClass
Registers a window class in a DLL that uses
MFC.
AfxBeginThread
Creates a new thread.
AfxEndThread
Terminates the current thread.
AfxGetThread
Retrieves a pointer to the current CWinThread
object.
AfxWinInit
Called by the MFC-supplied WinMain function, as part of the CWinApp
initialization of a GUI-based application, to initialize MFC. Must
be called directly for console applications using MFC.
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()就是你定义的类中间的成员。
另外,附上 MSDN 关于应用程序信息和管理的各个函数:
When you write an application, you create a single CWinApp-derived
object. At times, you may want to get information about this object
from outside the CWinApp-derived
object.
The Microsoft Foundation Class Library provides the following
global functions to help you accomplish these
tasks:
Application Information and Management
Functions
AfxFreeLibrary
Decrements the reference count of the loaded dynamic-link library
(DLL) module; when the reference count reaches zero, the module is
unmapped.
AfxGetApp
Returns a pointer to the application's single CWinApp
object.
AfxGetAppName
Returns a string containing the application's
name.
AfxGetInstanceHandle
Returns an HINSTANCE representing this instance of the
application.
AfxGetMainWnd
Returns a pointer to the current "main" window of a non-OLE
application, or the in-place frame window of a server
application.
AfxGetResourceHandle
Returns an HINSTANCE to the source of the application's default
resources. Use this to access the application's resources
directly.
AfxInitRichEdit
Initializes the version 1.0 rich edit control for the
application.
AfxInitRichEdit2
Initializes the version 2.0 and later rich edit control for the
application.
AfxLoadLibrary
Maps a DLL module and returns a handle that can be used to get the
address of a DLL function.
AfxRegisterWndClass
Registers a Windows window class to supplement those registered
automatically by MFC.
AfxSocketInit
Called in a CWinApp::InitInstance override to initialize Windows
Sockets.
AfxSetResourceHandle
Sets the HINSTANCE handle where the default resources of the
application are loaded.
AfxRegisterClass
Registers a window class in a DLL that uses
MFC.
AfxBeginThread
Creates a new thread.
AfxEndThread
Terminates the current thread.
AfxGetThread
Retrieves a pointer to the current CWinThread
object.
AfxWinInit
Called by the MFC-supplied WinMain function, as part of the CWinApp
initialization of a GUI-based application, to initialize MFC. Must
be called directly for console applications using MFC.
相关文章推荐
- MFC中获得各个类的指针/句柄的总结(转)
- MFC中获得各个类的指针/句柄 ID的总结
- MFC中获得各个类的指针/句柄 ID的总结
- MFC中获得各个类的指针/句柄 ID的总结
- MFC 中获得各个类的指针/句柄 ID的总结
- MFC中获得各个类的指针/句柄的总结(转)
- MFC指针、句柄、ID深入理解(总结)
- MFC中获得各个类的指针/句柄 ID的总结
- MFC中获得各个类的指针/句柄 ID的总结
- (转)MFC中获得各个类的指针/句柄 ID的总结
- MFC 中获得各个类的指针/句柄 ID的总结
- MFC中获得各个类的指针/句柄 ID的总结
- MFC中获得各个类的指针/句柄 ID的总结
- MFC中获得各个类的指针/句柄的总结
- MFC中获得各个类的指针/句柄 ID的总结
- mfc 小技巧之 获取对话框句柄 对话框指针
- vc++ mfc 关于窗口 句柄 函数的总结
- MFC 获得各类指针、句柄的方法
- mfc中id,句柄,指针
- MFC中获取各个窗体之间的句柄或者指针对象的方法