专栏首页包子的书架MFC中句柄、指针、ID之间的关联

MFC中句柄、指针、ID之间的关联

MFC中句柄、指针、ID之间的关联

win32直接操作的是句柄HANDLE。每一个句柄就相应windows窗体,而vc对HANDLE进行类封装,间接操作的都是HANDLE,如今句柄仅仅是类的一个成员变量。

  • 从句柄到指针 CWnd* pWnd=CWnd::FromHandle(hWnd); //a temporary CWnd object is created //and attached. pWnd->Attach(hWnd); //Attaches a Windows window to a CWnd object
  • 从指针到句柄 HWND hWnd=pWnd->GetSafeHandle(); hWnd=pWnd->m_hWnd;
  • SDK编程中窗体ID。句柄,指针三者相互转换函数 ID--HANDLE--HWND三者之间的互相转换 id->句柄-----------hWnd = ::GetDlgItem(hParentWnd,id); id->指针-----------CWnd::GetDlgItem(); 句柄->id-----------id = GetWindowLong(hWnd,GWL_ID); 句柄->指针--------CWnd *pWnd=CWnd::FromHandle(hWnd); 指针->ID----------id = GetWindowLong(pWnd->GetSafeHwnd,GWL_ID); GetDlgCtrlID(); 指针->句柄--------hWnd=cWnd.GetSafeHandle() or mywnd->m_hWnd; ID->HICON--------HICON hIcon = AfxGetApp()->LoadIcon(nIconID); HICON hIcon = LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(nIconID));
  • 补充 附注:获得窗体句柄三种方法 1.HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName) 2 HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName) 3.HWND WindowFromPoint(POINT& Point)//获得当前鼠标光标位置的窗体HWND FindWindow和FindWindowEx 具体见此处

VC++中有关句柄和指针及其转换 1.MFC窗体的句柄和指针的转换 (1) 一般窗体对象都会有一个其相应的句柄变量,所以我们能够取此对象的m_hWnd属性来得到句柄。 (2)使用GetSafeHwnd函数取得程序所在窗体类的句柄 (3)使用FromHandle函数来通过句柄得到其想要的指针 其它的一些方法: GetActiveWindow 取当前活动窗体句柄 AfxGetMainWnd 取主窗体句柄 GetForegroundWindow 取前台窗体句柄 FindWindow寻找參数指定的窗体 EnumWindow枚举窗体

  1. 上下文无关设备的句柄和指针的转换 (1)this->m_hDC (2)CDC::GetSafeHdc (3)能够使用FromHandle函数来通过句柄得到其想要的指针

3.Gdi对象的句柄和指针的转换 (1)this->m_hObject (2)CGdiObject::GetSafeHandle (3)能够使用FromHandle函数来通过句柄得到其想要的指针

4.窗体、控件的指针和句柄的相互转化 (1)指针转化为句柄 在MFC应用程序中首先要获得窗体的指针,然后将其转化为句柄 CWnd* pWnd; HANDLE hWnd = pWnd->GetSafeHwnd(); (2)句柄转化为指针 在MFC应用程序中首先获得对话框控件的句柄。然后获得其指针 HANDLE hWnd; GetDlgItem(IDC_xxx,&hWnd); CWnd * pWnd = FromHandle(hWnd);

获得程序窗体指针的办法 (1)获得主框架窗体指针(不论什么时候都能够用,仅仅要是MFC程序中) CWnd* pWnd = AfxGetMainWnd(); (2)获得对话框中控件指针 CWnd* pWnd = GetDlgItem(IDC_xxx); (3)获得对话框中某控件的句柄 HANDLE GetDlgItem(m_hDLG,m_nID_DlgItem); (4)获得GDI对象的句柄 HANDLE m_hGDIObj = m_pGDIObj->GetSafeHanle();

本文来自CSDN博客:http://blog.csdn.net/lovegod12/archive/2009/04/19/4092249.aspx

  • 常用的窗口控件和窗口的句柄或者指针的获取 通过窗体类函数:CWnd *GetWindow获得窗体指针,pWnd->m_hWnd(The handle of the Windows window attached to this CWnd)在::FromHandle(hWnd); 获取主窗体句柄: CWnd *wnd = AfxGetMainWnd(); HWND hwnd = wnd->GetSafeHwnd(); 设置控件为窗体焦点:GetDlgItem(IDC_TREE1)->SetFocus(); 获取控件句柄:HWND hwndctrl = ::GetDlgItem(mainHwnd, IDC_TREE1);//获取树形控件的句柄IDC_TREE IDC_COMBO1 获取当前最上层窗体的句柄: HWND mainHwnd = ::GetForegroundWindow();//获取当前topmost的窗体句柄 获取当前窗体的焦点句柄: HWND currentFocus = ::GetFocus();

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android 与 Unity扯不清的关系

    近期在游戏SDK接入的技术支持中,不断有游戏反馈希望有现成的unity插件可以直接接入,为了减轻和方便游游戏方接入,对SDK进行unity的插件开发

    包子388321
  • C++ 指针和句柄的区别

    指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址,指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。 句柄实际上是一种指向某种...

    包子388321
  • Android 注释语法

    用于注释的换行<br /> 在敲注释的时候可能你会碰到用enter键换行无效的情况,这个时候用 在行的尾部就行了

    包子388321
  • 反转排序算法(Reverse Sort)

             反转排序的基本思想比较简单,也很好理解,其实现思路就是把数组最后一个元素和第一个元素替换,

    itlemon
  • cookies

    小小咸鱼YwY
  • Python自动化运维

    total(内存总数)、used(已使用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)

    py3study
  • 一起来用python实现一下十大经典排序算法

    既然之前很多小伙伴反应希望公众号多发点算法类的文章,那就来呗。先从简单的入手好了,带大家用python来实现一波十大经典排序算法呗。分别是:

    double
  • 25个常用的Linux iptables规则

    一些常用的 Linux iptables 规则,请根据自己的具体需要再修改。 # 1. 删除所有现有规则 # 2. 设置默认的 chain 策略 # 3. 阻止...

    小小科
  • Qt音视频开发33-ffmpeg安卓版

    一直都想搞个安卓版本的视频监控程序,很早以前弄过一个,采用的是早期的ffmpeg2的lib文件,对于现在众多的网络流媒体格式,支持有限,而且新的Qt编写安卓程序...

    feiyangqingyun

扫码关注云+社区

领取腾讯云代金券