[MFC] HWND(获取控件或窗体句柄) [大三TJB_708]

时间:2021-01-15 21:27:31
 

平台:visual studio 2010

 

1 C++窗体对象和HWND

窗体对象是一个继承于CWnd类的C++类的 对象。咱们可以用构造函数生成一个windows窗体,此windows窗体被一个 "window handle" (HWND)唯一标识,当一个窗体被创建后,此窗口的窗口句柄也响应的被创建。此窗口的窗口句柄被保存在窗体对象的数据成员m_hWnd中。

 

2. 获取一个控件(窗口的句柄)

 

2.1 通过数据成员获取控件句柄

相对在对话框中的控件来说,当直接往对话框拉进一个控件时。程序运行后这个控件就会生效,则响应的窗口句柄(控件也是一种窗口)就被保存到了此控件对象的m_hWnd变量中了。我们要使用此控件的句柄时只需要在头文件中定义一个此控件类型的变量(对象),然后放问数据成员m_hWnd即可。

 

2.2 通过CWnd函数获取控件句柄

首先定义一个HWND类型的变量,然后通过函数直接获取相应控件的句柄。

HWND hWnd;
hWnd	= GetDlgItem(IDC_STATIC_D3DWND)->GetSafeHwnd();


(1) CWnd* GetDlgItem(int nID)const;

此函数的功能是检索一个指向 ID 为nID控件(窗口)的指针。对于,对话框上面的控件就很好办了,因为每个控件的ID都可以被用户所设置。

nID指控件的ID。设置对话框之上的ID:选中控件-->右键选中属性-->更改ID

函数返回指向控件的指针。

 

(2) HWND GetSafeHwnd( ) const;

此函数在GetDlgItem函数返回值不为空的情形下返回控件的m_hWnd即对象的句柄,所GetDlgItem返回指针为空则此函数返回为空。

 

通过函数的方法也可以顺利的得到控件(窗口)的句柄的。

 

3.在需要使用控件句柄的地方

在D3D9程序的初始化中,D3DPRESENT_PARAMETERS的hDeviceWindow成员需要指定一个窗口句柄,还有IDirect3D9::CreateDevice的第三个参数也需要一个窗口句柄。当然了 需要控件句柄的需求很多,记录 一下我在初始化D3D9程序时获取窗口句柄的一点心得。两种方法~·~


此次笔记记录完毕。