ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:18.49KB ,
资源ID:4706141      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4706141.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MFC中获取常见类句柄.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MFC中获取常见类句柄.docx

1、MFC中获取常见类句柄一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针和句柄获取和操作问题。本文中将针对各类句柄的获得、指针的获得以及MFC中常见应用进行阐述并举例。本文内容索引:=MFC中获取常见类句柄MFC中获取窗口句柄及相关函数MFC获取控件句柄MFC各类中获取类指针详解MSDN关于应用程序信息和管理的各个函数=MFC中获取常见类句柄本节为VC中常用的文档类,视图类,框架类,应用程序类,自定义类中获取其它四个类的方法:GET App AfxGetInstanceHandle() AfxGetApp()GET F

2、rame-View-Document SDI AfxGetMainWnd() - GetActiveView() - GetDocument() MDI AfxGetMainWnd() - MDIGetActive() - GetActiveView() - GetDocument()GET Menu CMenu *pMenu=AfxGetApp()-m_pMainWnd-GetMenu();GET ToolBar,StatusBar (CMainFrame *)GetParent()-m_wndToolBar; (CMainFrame *)GetParent()-m_wndStatusBar

3、; CStatusBar * pStatusBa=(CStatusBar*)AfxGetMainWnd()-GetDescendantWindow(AFX_IDW_STATUS_BAR); CToolBar * pToolBar=(CtoolBar*)AfxGetMainWnd()-GetDescendantWindow(AFX_IDW_TOOLBAR);Get View from Document GetFirstViewPosition 和 GetNextView 函数得到指针。MFC中获取窗口句柄及相关函数首先,窗口句柄,在窗口类中直接使用成员变量m_hWnd,在窗口外最常见是用AfxG

4、etMainWnd(获取主窗口指针,其成员变量m_hWnd为主窗口句柄):HWND hWnd = AfxGetMainWnd()-m_hWnd;与其相关的函数说明如下,这些函数对于获取窗口句柄非常有用:GetTopWindow函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。函数原型:HWND GetTopWindow(HWND hWnd);参数:hWnd:被查序的父窗口的句柄。如果该参数为NULL,函数返回Z序顶部的窗口句柄。返回值: 如果函数成功,返回值为在Z序顶部的子窗口句柄。如果指定的窗口无子窗口,返回值为NULL。G

5、etForegroundWindow函数功能:该函数返回当前系统的前台窗口的窗口句柄。函数原型:HWND GetForegroundWindow(VOID)返回值:函数返回前台窗回的句柄。GetActiveWindow 获取当前窗口句柄函数功能:该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。函数原型:HWND GetActiveWindow(VOID)返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。否则,返回值为NULL。GetSafeHwnd函数功能:获取某个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全

6、的方法是使用GetSafeHwnd()函数。通过下面的例子来看其理由:CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); /希望找到资源管理器cppview plaincopy1. CWnd*pwnd=FindWindow(“ExploreWClass”,NULL);/希望找到资源管理器2. HWNDhwnd=pwnd-m_hwnd;/得到它的HWND HWND hwnd = pwnd-m_hwnd; /得到它的HWND这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能

7、对一个NULL指针访问其成员,如果用下面的代码:cppview plaincopy1. CWnd*pwnd=FindWindow(“ExploreWClass”,NULL);/希望找到资源管理器2. HWNDhwnd=pwnd-GetSafeHwnd();/得到它的HWND就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULLIsWindowVisible函数功能:该函数获得给定窗口的可视状态。函数原型:BOOL IsWindowVisible(HWND hWnd);参数;hWnd:被测试窗口的句柄。返回值: 如果指定的窗口及其父窗口具有WS_VIS

8、IBLE风格,返回值为非零;如果指定的窗口及其父窗口不具有WS_VISIBLE风格,返回值为零。由于返回值表明了窗口是否具有Ws_VISIBLE风格,因此,即使该窗口被其他窗口遮盖,函数返回值也为非零。备注: 窗口的可视状态由WS_VISIBLE位指示。当设置了WS_VISIBLE位,窗口就可显示,而且只要窗口具有WS_VISIBLE风格,任何画在窗口的信息都将被显示。IsWindow:函数功能:该函数确定给定的窗口句柄是否标示一个已存在的窗口。函数原型:BOOL IsWindow(HWND hWnd);参数: hWnd:被测试窗口的句柄。返回值: 如果窗口句柄标识了一个已存在的窗口,返回值为

9、TURE;如果窗口句柄未标识一个已存在窗口,返回值为FALSE。FindWindow:HWND FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName );参数:lpClassName指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。lpWindowName指向一个以null结尾的、用来指定窗口名(

10、即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。返回值:如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。如果函数执行失败,则返回值为 NULL 。可以通过调用GetLastError函数获得更加详细的错误信息。来说个应用,窗口标题的改变,我们可以通过SetWindowText来实现:注:如果窗口本身属性是不显示标题的,这个函数的调用不会影响窗口属性。cppview plaincopy1. /Settitleforapplicationsmainframewindow.2. AfxGetMainWnd()-SetWindowText(_T(Applicationt

11、itle)3. /SettitleforViewsMDIchildframewindow.4. GetParentFrame()-SetWindowText(_T(MDIChildFramenewtitle)5. /Settitlefordialogspushbuttoncontrol.6. GetDigitem(IDC_BUTTON)-SetWindowText(_T(Buttonnewtitle)MFC获取控件句柄SDI中的控件句柄获取:cppview plaincopy1. CWnd*pWnd=GetDlgItem(ID_*);/取得控件的指针2. HWNDhwnd=pWnd-GetSa

12、feHwnd();/取得控件的句柄取得CDC的指针是CDC* pdc = pwnd-GetWindowDC();MFC各类中获取类指针详解使用到的类需要包含响应的头文件。首先一般获得本类(视,文档,对话框都支持)实例指针 this,用this的目的,主要可以通过类中的函数向其他类或者函数中发指针,以便于在非本类中操作和使用本类中的功能。这其中的关键在于理解 m_pMainWnd,AfxGetApp(),AfxGetMainWnd()的意义!1)在View中获得Doc指针CYouSDIDoc *pDoc=GetDocument();一个视只能有一个文档。2) 在App中获得MainFrame指针

13、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) 获得当前文档指针

14、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 *)Ge

15、tParent()-m_wndToolBar;(CMainFrame *)GetParent()-m_wndStatusBar;8) 在Mainframe获得菜单指针CMenu *pMenu=m_pMainWnd-GetMenu();9) 在任何类中获得应用程序类AfxGetInstanceHandle 得到句柄,AfxGetApp得到指针最后提醒大家,在提取到各个句柄之后,因为初次提取的都是标准类句柄,所以,在使用时要注意将标准句柄转换成自己的类的句柄。如:AfxGetApp();/得到的是WinApp类的句柄,所以操作前记得转换成自己定义的类的句柄。如:(CMyApp*)AfxGetApp

16、()-XXXX();/这的xxxx()就是你定义的类中间的成员。MSDN关于应用程序信息和管理的各个函数When you write an application, you create a single CWinApp-derived object. Attimes, you may want to get information about this object from outside theCWinApp-derived object.The Microsoft Foundation Class Library provides the following global functi

17、onsto help you accomplish these tasks:Application Information and Management FunctionsAfxFreeLibraryDecrements the reference count of the loaded dynamic-link library (DLL) module;when the reference count reaches zero, the module is unmapped.AfxGetAppReturns a pointer to the applications single CWinA

18、pp object.AfxGetAppNameReturns a string containing the applications name.AfxGetInstanceHandleReturns an HINSTANCE representing this instance of the application.AfxGetMainWndReturns a pointer to the current main window of a non-OLEapplication, or the in-place frame window of a server application.AfxG

19、etResourceHandleReturns an HINSTANCE to the source of the applications default resources. Usethis to access the applications resources directly.AfxInitRichEditInitializes the version 1.0 rich edit control for the application.AfxInitRichEdit2Initializes the version 2.0 and later rich edit control for

20、 the application.AfxLoadLibraryMaps a DLL module and returns a handle that can be used to get the address of aDLL function.AfxRegisterWndClassRegisters a Windows window class to supplement those registered automaticallyby MFC.AfxSocketInitCalled in a CWinApp:InitInstance override to initialize Windo

21、ws Sockets.AfxSetResourceHandleSets the HINSTANCE handle where the default resources of the application areloaded.AfxRegisterClassRegisters a window class in a DLL that uses MFC.AfxBeginThreadCreates a new thread.AfxEndThreadTerminates the current thread.AfxGetThreadRetrieves a pointer to the current CWinThread object.AfxWinInitCalled by the MFC-supplied WinMain function, as part of the CWinAppinitialization of a GUI-based application, to initialize MFC. Must be calleddirectly for console applications using MFC.Reference:1.2.3.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1