美文网首页C++
MFC中句柄、指针、ID之间的关联

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

作者: JasonChen8888 | 来源:发表于2018-03-02 15:52 被阅读15次

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();

相关文章

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

    MFC中句柄、指针、ID之间的关联 win32直接操作的是句柄HANDLE。每一个句柄就相应windows窗体,而...

  • 句柄与指针

    句柄与指针 句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以...

  • Windows 错误处理

    1.句柄与指针: typedef void *HANDLE; 句柄实际上是一种指向资源的指针,由操作系统进行管理 ...

  • MFC类中获得其它类指针

    MFC类中获得其它类指针 当用VC++的Application Wizard生成除了CDialog Basiced...

  • 有关句柄和指针的常用函数

    有关句柄和指针的常用函数 1. 如何获取应用程序的 实例句柄?AfxGetInstanceHandle() 应用程...

  • [搬运]Managing Data Relationships—

    指针 索引 句柄 http://gamesfromwithin.com/managing-data-relatio...

  • 句柄和直接指针

    直接指针:通过雷鸣直接调用类里面的static方法或者是常量。 句柄:A a = new A(); a = new...

  • AutoCAD 数据库入门 2

    一个 AutoCAD 会话中可以加载多个数据库,会话中的每个对象都有一个句柄和对象 ID。 获得对象 ID 的方法...

  • OpenGLES入门(三)与着色器交互

    1. 获取着色器程序内成员变量的id,也可以理解为句柄、指针。 2.传递数据 使用上一节获取的指向着色器相应数据...

  • java

    句柄 参考 java句柄 什么是句柄句柄(Handle)来标示应用程序中不同的对象和同类中不同的实例注意:句柄有人...

网友评论

    本文标题:MFC中句柄、指针、ID之间的关联

    本文链接:https://www.haomeiwen.com/subject/vcmaxftx.html