作者purpose (purpose)
看板C_and_CPP
標題Re: [問題] 判斷滑鼠在視窗中的座標?
時間Wed Aug 17 04:52:37 2011
※ 引述《BSpowerx (B.S)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: C++
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: windows.h
: 問題(Question):
: 目前用windows.h弄出了視窗
: 找到了GetCursorPos(LPPOINT) 來讀入滑鼠的座標,
: 但出來的座標是從螢幕最左上角開始算起...
: 而不是從使用視窗的左上角
這叫 screen coordinates (螢幕座標),
無緣無故座標就座標,特別加上螢幕兩個字,那一定是還有別種型態的座標...
另外一種叫 client-area coordinates (客戶座標、客戶區域座標)。
這有點重要,背起來。
補充的是,一個視窗在 OS 內部 (Windows),是用矩形來記載其寬度、高度及位置。
這不論他自己繪製出來的視窗外觀為何,都必須在此矩形區域內。
守規矩的視窗分成「客戶區」與「非客戶區」,其他守規矩的寫出來的程式,會把
想要繪製給使用者看的內容,繪製在客戶區的矩形內。因此客戶區重要到,從其
左上角開始也多了一個客戶區座標系統。
基本上 Windows 隨時待命,願意幫你把螢幕座標轉換成,某個視窗客戶區的座標系統,
介面叫做 ScreenToClient。所以你至少得提供螢幕座標,以及你想要針對的那個視窗
的「控制代碼」(Handle to Window, HDC, 句柄)。
: 隨後又找到GetWindowRect(HWND, LPRECT) 來獲得視窗的頂點座標
: 但...這個座標是視窗的最左上角,
: 而不是使用者能使用的區域的左上角
: 示意圖:http://i.imgur.com/BdCYV.png
: 我想得到2的位置,
: 但這個函式抓到的位置是1
: 所以該怎麼做才能正確的得到滑鼠在視窗中的座標呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.128.4
→ purpose:HDC -> HWND 08/17 04:54
推 BSpowerx:感謝 08/17 12:35