AfxGetApp(),this-GetSafeHwnd(),AfxGetMainWnd()-m_hWnd

2024-01-01 14:59

本文主要是介绍AfxGetApp(),this-GetSafeHwnd(),AfxGetMainWnd()-m_hWnd,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这3个函数经常弄混:

       其中AfxGetApp()是得到代表应用程序的唯一对象the  app的地址,和框架、窗口这些不相干;新建的MFC程序的对话框构造函数中就有一句代码m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);加载这个应用程序的ID为IDR_MAINFRAME的图标,作为这个对话框的图标。

      AfxGetMainWnd()->m_hWnd是得到界面的大框架的地址,通过这个地址获得这个大框架的句柄;

      this->GetSafeHwnd()是获得this所指向地址的句柄,如果this代表的是程序界面的大框架的指针,那么这个句柄和上面那个句柄应该是一样的;如果this是大框架里面的摸个窗口或者控件的指针,那么返回的句柄应该是这个小窗口或者小控件的句柄。

这篇关于AfxGetApp(),this-GetSafeHwnd(),AfxGetMainWnd()-m_hWnd的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/559624

相关文章

AfxGetApp()-GetMainWnd与AfxGetMainWnd的区别

近日,调试程序在工作线程中要使用到主对话框的一个成员变量,当时懒得使用参数传递的方式,直接在函数里面通过afxGetmainWnd获取主窗口指针再通过指针获取成员变量的值,结果运行时报0x000005错误,当把afxGetmainWnd换成AfxGetApp()->GetMainWnd时确一切OK,运行正常,查阅资料得知: AfxGetMainWnd获取的是当前窗口指针; AfxGetApp

Windows/MFC_CWnd与Hwnd转换

1:CWnd是MFC的窗口基类。 HWND是Windows窗口句柄。 前者是一个C++对象,后者是一个类似于指针地址的数字型对象。 2:CWnd可以看成是对Windows窗口操作的封装,而封装的核心就是使用Windows窗口句柄(即HWND)来操作窗口.   3:CWnd可以通过CWnd::GetSafeHwnd()或成员变量m_hWnd来获得该窗口对象的HWND窗口句柄。

CWnd与HWND的区别与联系(相互转换)完全解析

区别            首先,从这两个单词的第一个字母即可知道两者之间的差别。熟悉MFC的人都知道在MFC中,类基本上都是以C开头的,这是一种规则约定,目的就是让人一看就知道它是一个类!           因此,CWnd第一个字母C指的是class的意思,即CWnd是一个类;HWND第一个字母H指的是handle的意思,即HWND是一个句柄。 CWnd:是MFC类库中所有窗口类的

CWND 和 HWND 的联系是什么

HWND  句柄,其实就是void*类型的,当然没有函数可调用,只有用API对它进行操作。Cwnd 是C++的一个类,有函数调用。但其操作的对像其实就是一个HWND的句柄。主窗口的CWND 就是框架窗口了,包括其他子窗口的容器。   -------------- Cwnd是C++里面的一个类HWND是一个句柄,他是一个32位的数,相当于c里面的指针.   ----------------

AfxGetApp() GetMainWnd()的使用

AfxGetApp( )是全局的。AfxGetApp( )这个函数可以得到当前应用进程的指针,是CWinApp*类型的,通过这个指针可以访问到这个进程中的对象。比如在全局函数中要向对话框中的列表写数据。 void writeString(char* pString) {    CWnd* pWnd = AfxGetApp()->GetMainWnd();   CMyDlg * pDlg;

Windows C++ 任意线程通过hwnd将操作发送到UI线程执行

前言 做Windows界面开发时,经常需要在多线程环境中将操作抛到主线程执行,通常做法是定义一个WM_USER消息,将函数指针通过SendMessage发送给窗口,窗口过程中接收消息后执行函数。本文提供的方法可以在任意地方使用,不需要重新定义消息以及接收消息。 一、基本实现 只是基本的实现方法,也包含了基本原理。 1、自定义WM消息 #define WM_INVOKE WM_U

mfc 根据窗口句柄(HWND)杀死进程

先枚举桌面所有的窗口的标题或者类名。根据类名或者标题得知该窗口的句柄(HWND)。然后再杀死进程。看代码: BOOL bTerminateProcess = FALSE;HWND hwndException = NULL;BOOL CALLBACK EnumWindowsProc(_In_ HWND hwnd, _In_ LPARAM lParam){char wcText[MAX_P

【MFC】AfxGetMainWnd()函数使用心得

关于AfxGetMainWnd()函数的通常认识: 1、使用AfxGetMainWnd()函数获取MFC程序中的主框架类指针是一个常用作法。 2、获得应用程序主窗口的指针的方法,AfxGetMainWnd()->m_hWnd或者AfxGetMainWnd()->GetSafeHwnd()。   但是,在用户线程中调用AfxGetMainWnd()函数好像就不灵了,为什么? 调试如下程序,

VC 获取控制台窗口的句柄(hWnd)

测试环境:VC++ 6.0 在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口极小化为图标等。实际上许多Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句

通过HWND 获得CWnd指针

HWND hWnd=GetSafeHwnd();CWnd* pWnd=CWnd::FromHandle (hWnd);CString strText=_T("");strText.Format ("pWnd=0x%X/nthis=0x%X/n",pWnd,this);AfxMessageBox(strText);