visual basic 如何禁用dpi縮放?

題主正在自學 VB(從0開始?不過之前學校教過過 C),因為用的是mbp+虛擬機帶 VS 2015,所以也就考慮到高分屏的問題。

目前我用的書(Sams Teach Yourself Visual Basic in 24 Hours)裡面的示例並沒有講到對高分屏的適配。

我嘗試著在繪製界面的時候直接把所有窗體(控制項,等等)的長寬直接乘二,但在 VS 里 debug 的時候還是很模糊的樣子,而且菜單和工具欄都異常的大。

直接運行做好的程序(已經事先在屬性里禁用 dpi 縮放)時就沒有這個問題。(如果不禁用縮放,效果就和上一張圖一樣)

所以,我想問的就是怎樣直接在程序里禁用 dpi 縮放而不是調試完成再到屬性里去改?

或者更進一步,怎樣才能不把解析度寫死,讓高分屏何地分屏都能合適的運行?

對了,是用 VB,換語言的話就先算了吧……題主想先學好這個來著……


你應該做的不是禁用dpi縮放,而是好好學習如何做UI排版。反正WPF的UI排版就算你不知道什麼是dpi縮放也能用好。

如果你不幸用的是Windows Forms的話,就學習如何使用TableLayoutPanel。

總之,不要給任何控制項設置絕對坐標(包括但不限於Left,Top,Width,Height),這些屬性必須通過計算得出,而且只能通過UI提供的layout來計算,你別自己算。


WinForms的layout問題是個巨坑,過幾年4K屏普及了估計很多用WinForm寫的應用都會廢掉(現在Windows里唯一不會破壞程序顯示的兼容方案是按點陣圖放大,但是高分屏上界面會模糊成一坨屎)。

這個問題,理論上可以用FlowLayoutPanel和TableLayoutPanel來解決,但是WinForm本身designer拖放的方式決定了絕對坐標和尺寸會很難避免(fluid layout和WinForm這種追求所見即所得的RAD框架在直覺上是相背的),而絕對坐標一旦既成事實就很難改了。

這和用VB還是C#沒關係,只和框架有關,是GDI+(90年代的技術)的固有問題,無法根本上克服。如今是2015年了,如果沒有維護舊項目的需求,又是從頭自學的話,建議拋棄WinForm直接從WPF學起。從個人技術投資的角度,熟悉WPF了干WinForms的活不難(就是好多好東西沒了用起來痛苦一點);反過來則學習曲線巨大,WinForms里有很多過時的思路,一旦習慣了很難改。


新建一個app.manifest文件,裡面有設置


系統有個api叫什麼來的 可以關閉對高dpi下的自動拉伸。一關就是關整個進程的


推薦閱讀:

TAG:VisualBasic | MicrosoftVisualStudio | GUI設計 | 高分屏 |