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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

       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


以上来自CSDN博客:http://blog.csdn.net/cy757/archive/2009/08/07/4423756.aspx


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


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


MFC中的ID命名规则 IDC_:控件ID命名前缀(Control);IDM_:菜单的ID命名前缀(Menu);IDD_:对话框的ID命名前缀(Dialog);IDR_:资源的ID命名前缀(Resource);IDS_:字符串的ID命名前缀(String);IDB_:位图资源的ID命名前缀(Bitmap);  阅读详情

相关推荐

MFC中指针句柄转换

    在MFC编程中,我感觉最让人头痛的就是数据的类型非常多,所以在对函数来进行调用时不得不进行数据类型的转换,其中最认我感觉头痛的是句柄和其指针转换。 1。MFC窗口的句柄指针转换      1) 一般窗口对象都会有一个其对应的句柄变量,所以我们可以 取此对象的m_hWnd属性来得到句柄。       2)使用GetSafeHwnd函数       3) 可以使用FromHandle

william_wchg的专栏 6667

句柄ID的区别

 句柄ID的区别(转载) (2007-01-24 21:51:31)    分类:沧海拾贝 在Windows程序设计中,句柄是无法精确定义的术语。随便找一个高手,让他给你讲讲句柄是什么,恐怕他都很难给你一个具体的定义来。 在Windows程序设计中,句柄无所不在,窗口有窗口的句柄HWND,线程和进程也有句柄HANDLE,甚至有人把套接字也称为句柄(我就是这样的)。 句柄在英文

jufengfeng的专栏 1605

窗体句柄强转成control

摘自:http://zhidao.baidu.com/question/96926630.html?si=1 using System; using System.Collections; using System.ComponentModel; using System.Diagnostics; using System.Drawing; u...

weixin_34194702的博客 260

vc句柄指针ID之间转换

小居 1080

vcID指针句柄之间如何相互转换

指针----句柄----ID三者之间的相互转换关系: 1.指针->句柄   hWnd=pWnd->GetSafeHwnd();2.句柄->指针  CWnd *pWnd=CWnd::FromHandle(hWnd);3.ID->句柄   hWndChild=GetDlgItem(hParenWnd,idChild);4.句柄->ID   idChlid=GetWindowLon

jonathan711的专栏 520

VC句柄指针ID之间转换

SDK编程中窗口ID句柄指针三者相互转换函数,ID--HANDLE--HWND三者之间的互相转换id->句柄-----------hWnd = ::GetDlgItem(hParentWnd,id); id->指针-----------CWnd::GetDlgItem(); 句柄->id-----------id = GetWindowLong(hWnd,GWL_ID); 句柄->

406

c语言句柄转整数,09年计算机二级辅导:vc句柄指针ID之间转换

09年计算机二级辅导:vc句柄指针ID之间转换分类:计算机等级|更新时间:2016-07-07|来源:中华网考试SDK编程中窗口ID句柄指针三者相互转换函数ID--HANDLE--HWND三者之间的互相转换id->句柄-----------hWnd = ::GetDlgItem(hParentWnd,id);id->指针-----------CWnd::GetDlgItem...

weixin_32941303的博客 236
下一篇: 改变ListBox中文本的颜色
fishu
博客等级 码龄17年 0粉丝 1原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值