VC中窗口ID,句柄,指针三者相互转换函数【转】
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类来实现,通过定义好的构造、析构函数来完成分配和回收,最好不要通过指针来动态操作。
GetDlgItem(资源ID)
不过这个方法如果这个对话框还没建立好,传过来的指针会有问题
VC中窗口ID,句柄,指针三者相互转换函数【转】的更多相关文章
- VC中获取窗体句柄的各种方法
AfxGetMainWnd AfxGetMainWnd获取自身窗体句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函数功能:该函数检查与 ...
- java中String\十六进制String\byte[]之间相互转换函数
java二进制,字节数组,字符,十六进制,BCD编码转换2007-06-07 00:17/** *//** * 把16进制字符串转换成字节数组 * @param hex * @return */ pu ...
- VC中句柄、指针、ID之间的转换
win32直接操作的是句柄HANDLE,每个句柄就对应windows窗口,而vc对HANDLE进行类封装,间接操作的都是HANDLE,现在句柄只是类的一个成员变量. 从句柄到指针 CWnd* pWnd ...
- VC中实现带有背景位图的树型控件
当前许多应用程序都在使用树型控件时为其添加了背景位图,增强的控件的魅力,然而对于Visual C++编程爱好者来说,使用Visual C++MFC提供的树型控件(CTreeCtrl)本身就是一个难点, ...
- VC++中有关句柄和指针及其转换(转)
原文转自 https://blog.csdn.net/jearmy/article/details/47030011 1.MFC窗口的句柄和指针的转换 (1) 一般窗口对象都会有一个其对应的句柄变量, ...
- VC++的窗口句柄和窗口ID
原文地址:VC++的窗口句柄和窗口ID作者:放放 句柄是窗口资源的标识,它标识资源在系统中所占用的内存块,应用程序通过窗口句柄对窗口进行操作.除了窗口句柄之外,任何一种资源都有它自己的句柄,比如光标句 ...
- VC++中使用用户自定义消息及自定制窗口技巧
Windows 应用程序所要做的每项工作几乎都是基于消息处理的, Windows 系统消息分为常用 Windows 消息,控件通知消息和命令.然而,有时我们需要定义自己的消息来通知程序什么事情发生了, ...
- ATL和vc++中的智能指针(分别是CComPtr和_com_ptr_t)
一.智能指针的概念 智能指针是一个类,不是指针,智能指针在所包含的指针不再被使用时候会自动释放该所包含指针所占用的系统资源,而不用手动释放. 原理:智能指针封装了包含指针的AddRef()函数和Rel ...
- 深度解析VC中的消息传递机制
摘要:Windows编程和Dos编程,一个很大的区别就是,Windows编程是事件驱动,消息传递的.所以,要学好Windows编程,必须 对消息机制有一个清楚的认识,本文希望能够对消息的传递做一个全面 ...
随机推荐
- web标准(复习)--1
XHTML CSS基础知识 一.xhtml css基础知识首先说一下我们这节课的知识点 1.文档类型 2.语言编码 3.html标签 4.css样式 5.css优先级 6.css盒模型组成 1)文档类 ...
- localhost 与 127.0.0.1 的区别
localhost与127.0.0.1的区别是什么?相信有人会说是本地ip,曾有人说,用127.0.0.1比localhost好,可以减少一次解析.看来这个入门问题还有人不清楚,其实这两者是有区别的. ...
- (我国的省—市—区)三级联动数据库.sql
# MySQL-Front 5.1 (Build 2.7) /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE */; /*!40101 SET SQL_MODE='' */ ...
- 《图解CSS3》——笔记(一)
作者:大漠 勘误:http://www.w3cplus.com/book-comment.html 2014年7月14日14:46:35 第一章 揭开CSS3的面纱 1.1 什么是CSS3 CSS ...
- JS判断请求来自Android手机还是iPhone手机,根据不同的手机跳转到不同的链接。
<script type="text/javascript">var browser = {versions: function () {var u = navigat ...
- ie7 不兼容overflow:hidden;
用overflow:hidden; 隐藏不需要显示的数据,在IE6\IE8都显示正常,但是在ie7中就是不起作用,万恶的IE7啊.后来加了一句position:relative; 好了... stat ...
- Repeater绑定数据库
前台: <table width="> <tr> <td class="tr1"> <asp:Label Text=" ...
- FJ省队集训DAY2 T1
思路:转换成n条三维空间的直线,求最大的集合使得两两有交点. 有两种情况:第一种是以某2条直线为平面,这时候只要统计这个平面上有几条斜率不同的直线就可以了 还有一种是全部交于同一点,这个也只要判断就可 ...
- Android 对话框简介
对话框(Dialog)是程序运行过程中弹出的窗口,Android中有好多种对话框,如警告对话框,进度对话框,列表对话框,单选对话框,日期选择对话框,时间选择对话框等: 下面用几个例子来演示一下各种对话 ...
- hdu5014:number sequence对称思想
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5014 题目大意:给定数组 a[]={0,1,2......n} 求一个数组b[] 元素也为0.... ...