VC中窗口ID,句柄,指针三者相互转换函数【原+转】

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

ID--HANDLE--HWND三者之间的互相转换
id->句柄        hWnd = ::GetDlgItem(hParentWnd,id);
id->指针        CWnd::GetDlgItem();
句柄->id        id = GetWindowLong(hWnd,GWL_ID);
句柄->指针    CWnd *pWnd=CWnd::FromHandle(hWnd);

如:CEpdscDlg* pdlg=(CEpdscDlg*)CWnd::FromHandle(myhwnd);//这样就获得了对话框资源的指针;使用初始化实例GI()->只能对非控件变量作用。
pdlg->UpdateBranchName(cur,newname);
指针->ID       id = GetWindowLong(pWnd->GetSafeHwnd,GWL_ID);
                                            GetDlgCtrlID();
指针->句柄     hWnd=cWnd.GetSafeHandle() or mywnd->m_hWnd;  

 

指针的使用在编程过程中至关重要,恰到好处并能正确无误的使用指针不但能够提高程序自身的运行效率,而且有助于节省程序执行所需要消耗的资源。指针对应着某个数据在内存空间中的地址,得到了指针就可以自由地修改该数据。句柄代表指针的“指针”,也可以将其比作表中数据项的索引值( 表对应某个进程自身的内存空间 )。句柄是间接的引用对象。

        指针和句柄的不同之处

  • 句柄所指的可以是一个很复杂的结构,并且很有可能与系统有关的,比如上面所说线程的句柄,它指向的就是一个类或者结构,它和系统有很密切的关系。当一个线程由于不可预料的原因而终止时,系统就可以通过句柄来回收它所占用的资料,如CPU,内存等等。反过来想,这些句柄中的某一些,是与系统进行交互用的。
  • 指针它也可以指向一个复杂的结构,但通常是由用户自我定义的,所以一些必需的工作都要由用户自己完成,特别是在删除的时候。
  • 另外需要注意的是句柄往往有自己的存在区限,比如一个进程,如果将其传递到另一个进程中,句柄也就失去了意义( 表中数据项的索引值,索引离开了具体的表也就失去了意义 )。

        具体转换

        ( 句柄转为指针 )

        CWnd* pWnd=FromeHandle(hMyHandle);
        pWnd->SetWindowText("Hello World!");

        or

        CWnd* pWnd;
        pWnd->Attach(hMyHandle);  

        MFC类中有的还提供了标准方法,比如Window句柄:

        static CWnd* PASCAL FromHandle(
        HWND hWnd
        );
        HWND GetSafeHwnd( ) const;

        对于位图:
        static CBitmap* PASCAL FromHandle(
       HBITMAP hBitmap
         );  
         static CGdiObject* PASCAL FromHandle(
       HGDIOBJ hObject
         );
        HGDIOBJ GetSafeHandle( ) const;

        当然,更详细的信息需要在具体使用中自我查询。

建 议:指针和句柄的使用属于比较复杂、危险性较高的应用,在具体实践中,如果可以,尽量不要使用指针和句柄,最好选择现有的、封装完好的方式来实现,更别提指针同句柄的转换了,它更加危险。

        比如在操作字符串时,尽量使用CString类来实现,通过定义好的构造、析构函数来完成分配和回收,最好不要通过指针来动态操作。

(转摘)

来自: http://hi.baidu.com/wuyan3158/blog/item/158179d999dfb4e238012f4c.html
Windows句柄剖析 Windows句柄的前生今世:句柄剖析 阅读详情

相关推荐

指针句柄的简单转换

编程过程中,常常会遇到或使用到指针句柄,这里简单说说有关指针句柄间的转换。        指针的使用在编程过程中至关重要,恰到好处并能正确无误的使用指针不但能够提高程序自身的运行效率,而且有助于节省程序执行所需要消耗的资源。指针对应着某个数据在内存空间中的地址,得到了指针就可以自由地修改该数据。句柄代表指针的“指针”,也可以将其比作表中数据项的索引值( 表对应某个进程自身的内存空间 )。句

风生水起 2092

MFC - 窗口句柄与控件指针转换

句柄得到指针 FromHandle(hwnd); 从对象指针得到句柄 pWnd->m_hWnd; 载于:https://my.oschina.net/mlgb/blo...

chijiaozhao5384的博客 489

Windows程序设计-子窗口控件

按钮类别/*---------------------------------------- BTNLOOK.C -- Button Look Program (c) Charles Petzold, 1998 ----------------------------------------*/#include <windows.h>struct {

小龙在线 1862

简介子窗口控件(api)

窗口控件 壹佰软件开发小组整理编译 回忆第七章的CHECKER程序。这些程序显示了矩形网格。当您在一个矩形中按下鼠标按键时,该程序就画一个x;如果您再按一次鼠标按键,那么x就消失。虽然这个程序的CHECKER1和CHECKER2版本只使用一个主窗口,但CHECKER3版本却为每个矩形使用一个子窗口。这些矩形由一个...

weixin_30652491的博客 354

VCID句柄指针、对象互相转换

VCID句柄指针、对象互相转换 2011-09-20 22:42 一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针获取和操作问题。 下面这节内容主要是一般的框架,然后再讲多线程中的指针使用。使用到的类需要包含响应的头文件。首先一般获得本类(视,文档,对话框都支持)实例指针 this,用th

3598

VC句柄指针ID之间的转换

 win32直接操作的是句柄HANDLE,每个句柄就对应windows窗口,而vc对HANDLE进行类封装,间接操作的都是HANDLE,现在句柄只是类的一个成员变量。从句柄指针 CWnd* pWnd=CWnd::FromHandle(hWnd); //a temporary CWnd object is created //and attached. pWnd->Attach(hWnd)

2169

VC窗口ID句柄指针三者相互转换函数

D--HANDLE--HWND三者之间的互相转换id->句柄        hWnd = ::GetDlgItem(hParentWnd,id);id->指针        CWnd::GetDlgItem();句柄->id        id = GetWindowLong(hWnd,GWL_ID);句柄->指针    CWnd *pWnd=CWnd::FromHandle(hWnd);指针

hfw_1987的专栏 771

窗口ID句柄指针

VC窗口ID句柄指针三者相互转换函数ID--HANDLE--HWND)   id->句柄        hWnd = ::GetDlgItem(hParentWnd,id); id->指针        CWnd::GetDlgItem(); 句柄->id        id = GetWindowLong(hWnd,GWL_ID); 句柄->指针    CWnd *pWnd=C

lgstudyvc的专栏 737

 VC窗口ID句柄指针三者相互转换函数

VC窗口ID句柄指针三者相互转换函数  ID--HANDLE--HWND三者之间的互相转换id->句柄、、、、、hWnd = ::GetDlgItem(hParentWnd,id);id->指针、、、、、CWnd::GetDlgItem();句柄->id、、、、、id = GetWindowLong(hWnd,GWL_ID);句柄->指针、、、、CWnd *pWnd=CWnd::Fr

lyzhm的专栏 1555

句柄 ID 指针 转换

vc句柄指针ID之间的转换   作者:阿闪 文章来源:网络 点击数: 更新时间:2008-3-3 9:56:16

dycuswine2的专栏 535

句柄指针ID句柄指针 句柄ID

所谓句柄实际上是一个数据,是一个Long (整长型)的数据。 句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。 从上面的定义中的我们可以看到,句...

小鱼菜鸟的博客 135
上一篇: Unicode下字符串与整型等的格式转换【转】
下一篇: CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换【转】
0110
博客等级 码龄19年 19粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值