獲取控制元件相對父視窗的座標
首先說明幾個常用windows API函式
1.GetClientRect
該函式獲取視窗客戶區的大小。注意一下:視窗的客戶區為視窗中除標題欄、選單欄之外的地方。
在Win32 SDK, 該API函式原型為
BOOL GetClientRect(
HWND hWnd, // 視窗控制代碼
LPRECT lpRect // 客戶區座標
);
在MFC中,該函式的原型為void GetClientRect(LPRECT lpRect) const;
2.GetWindowRect
BOOL GetWindowRect(HWND hWnd,LPRECTlpRect);
在Visual Studio 2005中,函式原型為void GetWindowRect(LPRECT lpRect) const;
是屬於CWnd類的函式.
該函式返回指定視窗的邊框矩形的尺寸。該尺寸以相對於螢幕座標左上角的螢幕座標給出
3.ClientToScreen
ClientToScreen函式是將你開啟的APP中客戶區的座標點資訊轉換為整個螢幕的座標,其中:所有的座標(無論是螢幕座標還是客戶區座標)其座標原點都是左上角為(0,0)。
voidClientToScreen(LPPOINT lpPoint) const;
void ClientToScreen(LPRECTlpRect) const;
4.ScreenToClient
該函式把螢幕上指定點的螢幕座標轉換成使用者座標
void ScreenToClient(LPPOINTlpPoint) const;
void ScreenToClient(LPRECTlpRect) const;
針對標題所述問題,在父視窗的的程式碼裡,新增如下程式碼段
CRect rc;
GetDlgItem(XXXXXX)->GetWindowRect(&rc);
ScreenToClient(&rc); // 把螢幕座標轉換為相對父視窗客戶區的座標
還有一種方式,使用MapWindowPoints
m_btn1.GetClientRect(btn2rect);
m_btn1.MapWindowPoints(this,btn2rect);