日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

客户区坐标与屏幕坐标之间的转换问题

發布時間:2025/1/21 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 客户区坐标与屏幕坐标之间的转换问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載地址:http://blog.csdn.net/ke_yang/article/details/5417552

??????????http://blog.163.com/tufanghui01@126/blog/static/9460641420101021102433108/


WIN32? API函數:

????? 1、ClientToScreen 函數:

  這個函數的功能:該函數將指定點的用戶坐標轉換成屏幕坐標。

  函數原型:BOOL ClientToScreen(HWND hWnd,LPPOINT lpPoint);

  參數:

  hWnd :用戶區域用于轉換的窗口句柄。 注:第二個參數點的坐標是相對于第一個參數(窗口句柄)的窗口的坐標,將此點轉換為屏幕坐標,實際上是在此點窗口坐標(相對于窗口左上角的坐標)的基礎上加上此窗口左上角坐標相對于屏幕左上角的坐標值。

  lpPoint:指向一個含有要轉換的用戶坐標的結構的指針,如果函數調用成功,新屏幕坐標復制到此結構。

  返回值:如果函數調用成功,返回值為非零值,否則為零。

  注釋:函數用屏幕坐標取代POINT結構中的用戶坐標,屏幕坐標與屏幕左上角相關聯。

????? CWnd::ClientToScreen(LPPOINT lpPoint)? (ClientToScreen(LPRECT lpRect))實現的是同樣的效果,只不過是窗口句柄缺省為調用此函數的窗口。

?

????? 2、ScreenToClient 函數:

????? 函數功能:該函數把屏幕上指定點的屏幕坐標轉換成用戶坐標。

  函數原型:BOOL ScreenToClient(HWND hWnd, LPPOINT lpPoint);

  參數:

  hWnd:指向窗口的句柄,此窗口的用戶空間將被用來轉換。 注:將此點相對于屏幕左上角的坐標值轉換成相對于此窗口左上角的坐標值。

  lpPoint:指向POINT結構指針,該結構含有要轉換的屏幕坐標。

  返回值:如果函數調用成功,返回值為非零值,否則為零。

  Windows NT:若想獲得更多錯誤信息,請調用GetLastError函數。

  注釋:該函數應用hWnd參數標識的窗口和POINT結構給定的屏幕坐標來計算用戶坐標,然后以用戶坐標來替代屏幕坐標,新坐標是相對于指定窗口的領域的左上角。

?

CWnd::void GetClientRect( LPRECT lpRect ) const;函數:

此函數得到的區域是相對于調用此函數的窗口指針所指向的窗口的客戶區域,坐標點是相對于此窗口而言的。例如:在對話框中,如果是一個子控件調用此函數,那么它得到的rect值左上角的點必定為(0,0),長寬必定與此控件的客戶區長寬想等。如果是對話框自身調用此函數,Rect是基類對話框客戶區域坐標,并且rect左上角的點也必定是(0,0),長寬與此對話框的客戶區長寬相等。

注:API函數::GetClientRect(HWND hwnd,LPRECT lprect)實現同樣的效果

?

CWnd::void GetWindowRect( LPRECT lpRect ) const; 函數:

此函數得到的區域坐標是相對于屏幕左上角而言,無論是對話框本身還是它的子控件調用此函數得到的坐標都是相對于屏幕而言。并且如果是對話框那么它得到的是對話框整個窗口的區域坐標。

注:API函數::GetWindowRect(HWND hwnd,LPRECT lprect)實現同樣的效果



先調用GetWindowRect后再調用ScreenToClient,這個時候得到的rect和直接使用GetClientRect得到的值是相等的

有時候需要獲得窗口矩形的大小和客戶區矩形的大小二者的值,故需要分別調用GetWindowRect和GetClientRect。

如果只需要獲得客戶區矩形的大小,調用GetClientRect就行了。


GetWindowRect() 得到的是在屏幕坐標系下的RECT;(即以屏幕左上角為原點)?
GetClientRect() 得到的是在客戶區坐標系下的RECT; (即以所在窗口左上角為原點)

GetWindowRect()取的是整個窗口的矩形;?
GetClientRect()取的僅是客戶區的矩形,也就是說不包括標題欄,外框等;

第一個函數獲得的是窗口在屏幕上的位置,得到的結果可能是這樣CRect(10,10,240,240);?
第二個函數和它不同,它只獲得了客戶區的大小,因此得到的結果總是這樣CRect(0,0,width,height);

ScreenToClient() 就是把屏幕坐標系下的RECT坐標轉換為客戶區坐標系下的RECT坐標。


GetClientRect得到的是客戶區的大小,也就是說這樣得到的左上角永遠是(0,0)

GetWindowRect 是窗口相對于整個屏幕的坐標,屏幕左上點為0,0


轉載于:https://blog.51cto.com/whatever957/1599175

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的客户区坐标与屏幕坐标之间的转换问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。