句柄、句柄工具、VC++获取句柄

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成员,此成员就是当前窗口的句柄;

猜你喜欢

转载自blog.csdn.net/bcbobo21cn/article/details/114818093