mfc 找出一个窗口中的所有控件句柄_MFC中获取各个窗口之间的句柄或者指针对象的方法...

本文介绍了在MFC中如何进行窗口和控件句柄与指针之间的转换,包括从句柄到指针、从指针到句柄,以及ID、HANDLE、HWND三者之间的转换方法。详细讲解了FindWindow、GetDlgItem等函数的使用,以及MFC中GetSafeHwnd、FromHandle等成员函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值