我正在使用VB.NET編寫一個運行在使用碰撞檢測的窗體中的遊戲。爲了實現這一點,我必須能夠理解定位系統。我知道窗體座標從左上角開始,不包括底部或右邊緣。但座標開始和結束的數字是多少? (我的意思是什麼是左上角的座標,什麼是差不多右下角座標)窗體的座標系在哪裏停止並開始?
回答
座標系取決於您是否在說客戶端座標或屏幕座標。這是一個基本的Windows UI管理器,而WinForms包裝器遵循相同的模式。
當您處理客戶端座標時,原點(左上角)點的座標爲(0, 0)
。總是。範圍由表格的寬度和高度來定義,可分別通過Me.ClientSize.Width
和Me.ClientSize.Height
訪問。客戶矩形因此是:
{(0, 0)
× (ClientSize.Width, ClientSize.Height)
},也可以使用ClientRectangle
屬性檢索。
客戶區域的獨特之處在於它不包括窗體的非客戶區域 - 邊界,標題欄和其他系統相關屬性。
(拍攝的圖像出於說明性目的從Jose Menendez Póo's article上創建的Aero的ToolStrip)
您不必擔心計算這些尺寸(您也不應該擔心,因爲它們可能會發生變化)。你只需要在客戶端座標上工作,框架將負責其餘部分。將子對象(如控件)放置在其父窗體上時,可以使用客戶端座標,並且您甚至可以通過指定客戶端大小來調整窗體大小。其實際大小將自動計算,並考慮到非客戶區域。
這是非常罕見的,你將永遠不得不在屏幕座標。如果你想在屏幕上移動一個窗體(窗口)(這也應該是很少見的,因爲你不知道用戶有多大的屏幕尺寸,你也不應該試圖控制她放置窗戶的位置)。在屏幕座標中,主監視器的左上角座標爲(0, 0)
。座標系的其餘部分基於virtual screen,它考慮了多顯示器配置。
窗體的Location
和Size
屬性給你值屏幕座標。如果需要在客戶端和屏幕座標之間進行映射(轉換),則有PointToClient
和PointToScreen
方法。通過這些分別用屏幕或客戶端座標定義的位置,然後將它們轉換爲另一個座標系。
唯一需要注意的其他問題是Windows使用endpoint-exclusive rectangles。 WinForms包裝將其保留在Rectangle
結構中。你幾乎不用擔心這一點,因爲一旦你瞭解它,這真的是一個非常自然的系統。此外,WinForms框架的所有部分和部分都使用慣例,所以如果您只是傳遞點和大小以及矩形,那麼您不會遇到麻煩。但這是值得注意的。正如我們前面所看到的,您可以這樣想:您的客戶區有矩形{(0, 0)
× (ClientSize.Width, ClientSize.Height)
}。如果您要填充此純色矩形,填充將從點(0, 0)
延伸到點(ClientSize.Width - 1, ClientSize.Height - 1)
。
謝謝SOOOO多!!!!我需要得到這個,因爲它是一個學校項目,所以我幾乎不能感謝你。 :) –
如果你留在你的表格中,你可以通過「寬度」和「高度」來計算它。 你也有「左」和「頂」。
開始是(left = 0 and top = 0),它結束於右下角,值爲「width」和「height」的座標。
Windows窗體應用程序在屏幕座標中指定窗口在屏幕上的位置。對於屏幕座標,原點是屏幕的左上角。窗口的全部位置通常由包含兩個點的屏幕座標的Rectangle結構來描述,這兩個點定義窗口的左上角和右下角。 (MSDN)
左上角是(0, 0)
,右下角是(Form1.Width, Form1.Height)
。
- 1. OAuth使用者停止工作,我在哪裏開始調試?
- 2. classpath在哪裏結束並開始?
- 3. 停止窗體使用JavaScript?哪裏不對?
- 4. 停止觀看android - 暫停,然後開始並從停止的地方開始
- 5. WPF:MVVM停止和代碼隱藏從哪裏開始?
- 6. jQuery拖動 - 獲取開始和停止座標
- 7. 流媒體音頻 - 從哪裏開始?
- 8. 從哪裏開始實體框架
- 9. gif開始在懸停時播放,並在鼠標懸停時停止播放?
- 10. - 從哪裏開始?
- 11. 從哪裏開始
- 12. android COuntDownTimer停止並開始新的
- 13. 創建笛卡爾座標系c#窗體窗體繪圖
- 14. 傳感器座標系的原點在哪裏?
- 15. 觀察者關於opengl座標系的位置在哪裏?
- 16. NSTask開始/停止
- 17. 停止動畫並重新開始
- 18. 如何停止並開始請求admob?
- 19. Android定時器停止並開始
- 20. 開始從哪裏開始移植?
- 21. 停止從'開始'的D3'
- 22. 選框移動應該在鼠標懸停時停止並開始休假?
- 23. Windows窗體,Z座標
- 24. Podcast在哪裏停止使用MPMusicPlayerController?
- 25. 我應該在哪裏停止服務?
- 26. 從哪裏開始C#
- 27. Jruby從哪裏開始?
- 28. 從哪裏開始Python
- 29. nodejs從哪裏開始?
- 30. XNA從哪裏開始?
ClientSize.Width/Height minus 1. –
我認爲這裏隱藏了一個更有趣的問題:ClientSize是否包含FormBorder(如果有的話)? – MrPaulch
不,@MrPaulch。這就是* client *大小的含義。它從不包含表單的邊框。邊界是*非客戶端*區域的一部分。 –