VC中句柄、指針、ID之間的轉換


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM