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
本文來自CSDN博客:http://blog.csdn.net/cy757/archive/2009/08/07/4423756.aspx
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();
本文來自CSDN博客:http://blog.csdn.net/lovegod12/archive/2009/04/19/4092249.aspx