星期一, 10月 08, 2007

[C#] 如何設定為全螢幕模式

轉貼http://chuiwenchiu.spaces.live.com/blog/cns!CA5D9227DF9E78E8!990.entry

[C#] 如何設定為全螢幕模式

MSN SpaceGoogle DocGoogle Blog
Chui-Wen Chiu(Arick)
2007.03.16 建立

要將視窗設定為全螢幕模式[1][5],主要有兩個部份
1. 視窗無框線
2. 視窗大小等於螢幕大小

在 .NET 的 Windows Form 中,只需要透過簡單的設定即可達到這個效果,
1. Form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //設定成無框線[2]
------ 指this (form)
2. Form.WindowState = FormWindowState.Maximized; // 視窗設定為最大化[3]
------ 指this (form)
如果要設定更穩妥一點,可以再將視窗設定為最上層顯示,也就是將 Form.TopMost [4]設定為 true。
一 般情況下,上述的作法就可以滿足,如果你想做的更好一些,將 Windows 工具列隱藏而非覆蓋[6],此時需要透過 Windows API 來達成,主要的概念是用 FindWindow 找尋工具列的視窗 Handle,再透過 ShowWindow 將該視窗 Handle 隱藏,C# 要實現這個機制的成片段如下

private const int SW_HIDE = 0;
private const int SW_SHOW = 1;

[DllImport("user32.dll")]
private static extern int FindWindow(string className, string windowText);
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int command);

int hWnd = FindWindow("Shell_TrayWnd", "");
ShowWindow(hWnd, SW_HIDE);

理 想上,上述已經算是相當的完美,但依據[5][6]的說法,即便是將工具列隱藏和 Form.WindowState = FormWindowState.Maximized 仍可能會使應用程式無法涵蓋整個螢幕,最後還是必須透過 Windows API 將 Windows 設定成和視窗一樣大小。先利用 GetSystemMetrics(SM_CYSCREEN) 和 GetSystemMetrics(SM_CXSCREEN) 分別取得螢幕的寬和高,最後再透過 SetWindowsPos 將視窗設定成和螢幕等寬並且置於上層
SetWindowPos(hwnd, HWND_TOP, 0, 0, GetSystemMetrics(SM_CYSCREEN), GetSystemMetrics(SM_CXSCREEN), SWP_SHOWWINDOW);

參考資料
[1] Full Screen Mode in C#
[2] Form.FormBorderStyle 屬性(System.Windows.Forms)
[3] Form.WindowState 屬性(System.Windows.Forms)
[4] Form.TopMost 屬性(System.Windows.Forms)
[5] Full Screen Video Display
[6] How to make Windows Form app truly Full Screen (and to hide Taskbar) in C#?
[7] How To Cover the Task Bar with a Window

沒有留言: