2013-03-31 69 views
2

簡單的問題,我怎樣才能獲得窗口客戶區域相對於屏幕的座標? 我想過GetClientRect + ClientToScreen函數會起作用嗎? 還有一個。在瀏覽器窗口中什麼是ClientRect?只有帶有HTML文檔的矩形,或者它包含瀏覽器欄和彈出式菜單,可能會縮小HTML doc的尺寸?客戶端屏幕上的矩形座標

幹過這樣:

HWND hWnd; 
RECT rc; 
if(GetClientRect(hWnd, &rc)) // get client coords 
{ 
MapWindowPoints(hWnd, NULL, reinterpret_cast<POINT*>(&rc), 2); //converts rect rc points 
return rc.top; 
} 

但可悲的是,瀏覽器的客戶端矩形包括所有那些彈出瀏覽器菜單和酒吧,因此不能被用來檢測瀏覽器的HTML文檔的準確座標空間。如果有人得到了如何完成的建議,那麼很樂意嘗試。

+2

請不要改變你的問題。它將給予您先前的問題的答案無效,並且由於標題不再匹配,有人想問您的原始問題將無法找到答案。 –

回答

8

是的,你可以用ClientToScreen功能做到這一點:

RECT rc; 
GetClientRect(hWnd, &rc); // get client coords 
ClientToScreen(hWnd, reinterpret_cast<POINT*>(&rc.left)); // convert top-left 
ClientToScreen(hWnd, reinterpret_cast<POINT*>(&rc.right)); // convert bottom-right 

什麼是「客戶端」矩形在瀏覽器依賴於瀏覽器的實現。你可以使用Spy ++爲你自己發現。

+0

Sup,謝謝) –

+2

請注意,在RTL系統上返回一個無效的矩形。更好的辦法是使用長度爲2的MapWindowPoints。 –

+1

圍繞變量'rc'的堆棧已損壞,看起來你是對的,現在會嘗試'MapWindowPoints' –

-1
POINT origin; 
origin.x = 0; 
origin.y = 0; 
ClientToScreen(hWnd, &origin); 

現在origin在屏幕座標中是客戶區的左上角。

若要將(x,y)從客戶區域座標轉換爲屏幕座標,請添加origin。 做相反的事情,減去。

+0

正如Raymond Chen先生所指出的,這個片段在RTL系統上造成了問題,所以請不要使用它。 – user2120666

+0

如果RTL表示從右到左,ScreenToClient可能會有問題(https://msdn.microsoft.com/en-us/library/windows/desktop/dd162952(v=vs.85).aspx),但ClientToScreen的文檔不會不提這個。 –