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