最終方案
使用ScreenToClient, 代碼如下:
POINT mousePos; //存盤滑鼠微位置
int mx, my; //存放滑鼠相對于客戶區的坐標
GetCursorPos(&mousePos); //獲取滑鼠位置
ScreenToClient(hwnd, &mousePos); //獲得滑鼠相對客戶區的位置
mx = mousePos.x; //滑鼠相對客戶區左上角的 x 坐標
my = mousePos.y; //滑鼠相對客戶區左上角的 y 坐標
探索歷程
? 初步解決方法: 使用GetCursorPos獲得滑鼠坐標結構體rect,得到坐標(rect.x, rect.y)
? 發現問題: 獲得的滑鼠坐標是相對于整個電腦螢屏的,直接用在客戶區中行不通,會偏移,
? 方法探索1: 使用GetWindowRect獲得視窗范圍rect,用獲得的滑鼠坐標減去視窗左上角坐標(rect.left, rect.top),再用滑鼠坐標減去該坐標,從而計算出滑鼠相對于視窗的坐標,
? 發現問題: GetWindowRect獲得的是整個視窗的坐標而不是客戶區的坐標,視窗還有標題欄等的干擾導致得到的坐標并不是真正相對客戶區的,會有偏差,
? 方法探索2: 使用GetClientRect獲得視窗客戶區的范圍rect,操作如方法1獲得滑鼠相對坐標
? 發現問題: 該方法是失敗的!原因在于獲得的范圍rect本身就是相對客戶區的,也就是說,左上角坐標(rect.left, rect.top)對應的值為(0, 0),而右下角對應的是(客戶區寬度,客戶區高度),該方法行不通,
? 方法探索3: 使用ScreenToClient將滑鼠坐標結構體傳入直接得到滑鼠相對于客戶區的坐標,
? 完美解決: 該方法是最簡潔最直接的方法,設計人員肯定也想到這個問題了吧!才給出了這么好的一個方法,
星之所在,心之所向(寒冰小澈)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254047.html
標籤:其他
上一篇:Windows系統下利用Jmeter+influxdb+Grafana搭建可視化性能監控平臺
下一篇:分布式介紹
