VC中句柄、指针、ID之间的转换

简介: 一、win32直接操作的是句柄HANDLE,每个句柄就对应windows窗口,而vc对HANDLE进行类封装,间接操作的都是HANDLE,现在句柄只是类的一个成员变量。
一、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;
HICON->ID--------HICON hIcon = AfxGetApp()->LoadIcon(nIconID);
                 HICON hIcon = LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(nIconID));

附注:获得窗口句柄三种方法
1.HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)
  HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)
2.HWND WindowFromPoint(POINT& Point)//获得当前鼠标光标位置的窗口HWND


二、VC++中有关句柄和指针及其转换
1.MFC窗口的句柄和指针的转换
    (1) 一般窗口对象都会有一个其对应的句柄变量,所以我们可以取此对象的m_hWnd属性来得到句柄。
    (2)使用GetSafeHwnd函数取得程序所在窗口类的句柄
    (3)使用FromHandle函数来通过句柄得到其想要的指针

  其他的一些方法:
    GetActiveWindow 取当前活动窗口句柄
    AfxGetMainWnd   取主窗口句柄
    GetForegroundWindow 取前台窗口句柄
    FindWindow寻找参数指定的窗口
    EnumWindow枚举窗口

2. 上下文无关设备的句柄和指针的转换
    (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();
目录
相关文章
|
3月前
|
存储 Java 编译器
C 语言指针完全指南:创建、解除引用、指针与数组关系解析
创建指针 我们可以使用引用运算符 & 获取变量的内存地址:
87 0
|
9月前
UE 指定蓝图的返回指针为指定类型指针 Output
UE 指定蓝图的返回指针为指定类型指针 Output
44 0
|
10月前
编写一个程序,链接两个字符串字面常量,将结果保存在一个动态分配的char数组中,重写这个程序,连接两个标准string对象
编写一个程序,链接两个字符串字面常量,将结果保存在一个动态分配的char数组中,重写这个程序,连接两个标准string对象
|
存储 C++ 索引
C++中避免返回指向对象内部的句柄(handles)
C++中避免返回指向对象内部的句柄(handles)
139 0
【QT】解决QT两个类之间传递变量失败,或者extern变量引用无效。
【QT】解决QT两个类之间传递变量失败,或者extern变量引用无效。
|
容器
【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )(一)
【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )(一)
240 0
【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )(一)
【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )(二)
【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )(二)
201 0
【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )(二)
vc里面怎样实现对话框之间传递变量的值
Dialog1的类名是CDialog1, 头文件是dialog1.h。里有成员变量CString str1, str2;Dialog2的类名是CDialog2, 头文件是dialog2.h。里有成员变量CString str11, str22;要想将Dialog1里的变量传递给Dialog2里的变量...
788 0