win32直接操作的是句柄HANDLE。每一个句柄就相应windows窗体,而vc对HANDLE进行类封装,间接操作的都是HANDLE,如今句柄仅仅是类的一个成员变量。
VC++中有关句柄和指针及其转换 1.MFC窗体的句柄和指针的转换 (1) 一般窗体对象都会有一个其相应的句柄变量,所以我们能够取此对象的m_hWnd属性来得到句柄。 (2)使用GetSafeHwnd函数取得程序所在窗体类的句柄 (3)使用FromHandle函数来通过句柄得到其想要的指针 其它的一些方法: GetActiveWindow 取当前活动窗体句柄 AfxGetMainWnd 取主窗体句柄 GetForegroundWindow 取前台窗体句柄 FindWindow寻找參数指定的窗体 EnumWindow枚举窗体
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