1. 程式人生 > >獲取控制元件相對父視窗的座標

獲取控制元件相對父視窗的座標

首先說明幾個常用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);