VC中句柄、指针、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; 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
最新文章
- brew管理node的版本
- JavaScript链表
- 区别和详解:js中call()和apply()的用法
- Windwos服务器远程桌面不能复制粘贴的解决方法
- “我爱淘”冲刺阶段Scrum站立会议8
- win7开启远程桌面
- sql 联合查询速度慢,需要对其进行分组
- BZOJ 3373: [Usaco2004 Mar]Lying Livestock 说谎的牲畜( 差分约束 )
- 阿里云ECS主机自定义进程监控
- Python之socketserver模块和验证客户端链接的合法性
- [ 随手记 2 ] C/C++ 数组/指针/传数组到函数/指针数组/数组指针
- PYTHON3-LIST.SORT(),SORTED()方法详解。
- Oracle客户端连接数据库配置
- 使用 Synchronized 关键字
- Mybatis-Generator自动生成Dao、Model、Mapping等相关映射文件(懒人版)
- OpenERP登录页面调整
- System.NullReferenceException:未将对象引用设置到对象的实例,这是一个新鸟,中鸟,老鸟都避不开的错误
- 《Java编程思想》笔记 第七章 复用类
- (分享)一位资深程序员大牛给予Java初学者的学习路线建议
- Selenium Grid操作使用指南
热门文章
- mysql-1-select
- Linux 串口工具 lsz lrz 移植
- 044 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 06 使用do-while循环实现猜字游戏
- 批处理文件的@echo off
- 【暂咕咕咕】SuffixTree
- 插头 dp
- JDK 中的栈竟然是这样实现的?
- docker-创建容器常见选项
- [tip:,x86/urgent] x86: Fix early boot crash on gcc-10, third try
- Python日志采集(详细)