1 句柄
句柄(Handle)是一个用来标识对象的标识符。
Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址。简而言之数据的地址需要变动,变动以后就需要有人来记录、管理变动,因此系统用句柄来记载数据地址的变更。在程序设计中,句柄是一种特殊的智能指针,当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。
句柄是Windows系统中对象或实例的标识,这些对象包括模块、应用程序实例、窗口、控制、位图、GDI对象、资源、文件等。
从数据类型上来看,它只是一个无符号整数;Windows下为HWND类型。
这里说的控制,就是控件,有的书上把控件叫控制;
2 句柄工具
句柄工具有多种;用法略有差别;
下图是一种句柄工具,获取计算器窗口的句柄;
获取句柄以后,可进一步使用;有的win32编程可直接填入句柄值;
有的桌面阴影可能是显示问题,也可能是一个挂了的程序窗口;如果用句柄获取工具可以取得句柄,那么是一个挂了的程序窗口;
3 VC++获取句柄
void CHandledemoView::OnDraw(CDC* pDC)
{
CHandledemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CString str1;
HWND hwnd = AfxGetMainWnd()->m_hWnd;
HWND hwnd2 = ::GetActiveWindow();
str1.Format("%x", hwnd);
pDC->TextOut(10,10,str1);
str1.Format("%x", hwnd2);
pDC->TextOut(10,40,str1);
str1.Format("%x", this->m_hWnd);
pDC->TextOut(10,70,str1);
}
一些mfc类都有m_hWnd成员,此成员就是当前窗口的句柄;