2011-01-10 12 views
3

winformをフルスクリーンにする必要があります。これは私がオンラインで見つけたものです。Winformsをフルスクリーンにする

1. Hook WinProc to catch WM_SYSCOMMAND 

2. Check wParam == SC_MAXIMIZE and then 

3. Set my windiw's attributes 

Me.ResizeMode = ResizeMode.NoResize 

Me.WindowStyle = WindowStyle.None 

Me.WindowState = WindowState.Maximized 

私がvb.netにかなり新しいですし、ステップ1または2を行う方法がわからないが、誰かが私にスニペットを与えるか、正しい方向に私を指すことができますか?

おかげで、これはC#(ないVB)であるが、おそらくそれはまだあなたにとって有用である

答えて

6

トリックは、HwndSourceを取得し、そのAddHook()メソッドを呼び出すことです。これは動作します:

Imports System.Windows.Interop 

Class Window1 
    Protected Overrides Sub OnSourceInitialized(ByVal e As System.EventArgs) 
     MyBase.OnSourceInitialized(e) 
     DirectCast(PresentationSource.FromVisual(Me), HwndSource).AddHook(AddressOf WndProc) 
    End Sub 

    Private Const WM_SYSCOMMAND As Integer = &H112 
    Private Const SC_MAXIMIZE As Integer = &HF030 

    Private Function WndProc(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wp As IntPtr, ByVal lp As IntPtr, ByRef handled As Boolean) As IntPtr 
     If msg = WM_SYSCOMMAND AndAlso wp.ToInt32() = SC_MAXIMIZE Then 
      Me.ResizeMode = ResizeMode.NoResize 
      Me.WindowStyle = WindowStyle.None 
      Me.WindowState = WindowState.Maximized 
      handled = True 
     End If 
    End Function 

End Class 

のWinformsフォームで同じコード:

Public Class Form1 
    Private Const WM_SYSCOMMAND As Integer = &H112 
    Private Const SC_MAXIMIZE As Integer = &HF030 

    Protected Overrides Sub WndProc(ByRef m As Message) 
     If m.Msg = WM_SYSCOMMAND AndAlso m.WParam.ToInt32() = SC_MAXIMIZE Then 
      Me.FormBorderStyle = FormBorderStyle.None 
      Me.WindowState = FormWindowState.Maximized 
      Return 
     End If 
     MyBase.WndProc(m) 
    End Sub 

    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean 
     '' Restore window when the user presses Escape 
     If Me.WindowState = FormWindowState.Maximized AndAlso keyData = Keys.Escape Then 
      Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable 
      Me.WindowState = FormWindowState.Normal 
     End If 
     Return MyBase.ProcessCmdKey(msg, keyData) 
    End Function 

End Class 
+0

ありがとうございました。あなたは、私がタスクバーを隠したり隠したりするために必要なものの例を教えてもらえますか? – giodamelio

+0

試しましたか?タスクバーを非表示にする必要はなく、境界線のないウィンドウは重複することができます。 –

+0

それは私にエラーのロードを与えます。 '' OnSourceInitialized 'は' System.Windows.Forms.Form''のメンバーではありません – giodamelio

0

申し訳ありませんがgiodamelio:

ここで私はフルスクリーンモードを持っているWinFormsのアプリケーションに使用する方法です。

private void FullScreen(bool Enable) 
    { 
     SizeChanged -= FormMain_SizeChanged; 

     SuspendLayout(); 
     if (Enable) 
     { 
      FormBorderStyle = FormBorderStyle.None; 
      WindowState = FormWindowState.Maximized; 
      if (settings.HideFullScreenCursor) 
       Cursor.Hide(); 
      menuStrip.Visible = false; 
     } 
     else 
     { 
      FormBorderStyle = FormBorderStyle.Sizable; 
      WindowState = FormWindowState.Normal; 
      if (settings.HideFullScreenCursor) 
       Cursor.Show(); 
      menuStrip.Visible = true; 
     } 
     ResumeLayout(); 

     SizeChanged += FormMain_SizeChanged; 
    } 

もちろん、あなたのニーズに合わせて修正したいと思うかもしれませんが、うまくいけば出発点になります。

+0

おかげで、それは近くにあります。しかし、私はそのコードを実行すると、Windowsのタスクバーはまだそこにあります。 – giodamelio

+0

タスクバーが2〜2回表示されることがありますが、表示されなくなります。 (私はそれが瞬時に残る原因はわかりません) – JYelton

+0

WinXPでは、タスクバーは5分後に消えませんでした。 – giodamelio

関連する問題