Trying to hide your forms window? Here are a couple sample solutions:
One cumbersome solution is to override WndProc, listen for any window position changing messages (which includes z-order), and then not pass any show window flag on.
public class MyForm : Form{ public MyForm() { // Ensure that this is a hidden window this.WindowState = FormWindowState.Minimized; this.ShowInTaskbar = false; this.FormBorderStyle = FormBorderStyle.None; }
protected override void WndProc(ref Message m) { const uint WM_WINDOWPOSCHANGING = 0x0046; // WinUser.h const uint SWP_SHOWWINDOW = 0x0040; // WinUser.h
if (m.Msg == WM_WINDOWPOSCHANGING) { // Ensure the window is hidden by consuming any "show window" requests // (which can happen when pressing alt+tab) Win32Api.WINDOWPOS windowPos = (Win32Api.WINDOWPOS)Marshal.PtrToStructure(m.LParam, typeof(Win32Api.WINDOWPOS)); windowPos.flags &= unchecked(~SWP_SHOWWINDOW); Marshal.StructureToPtr(windowPos, m.LParam, true); m.Result = (IntPtr)0; }
base.WndProc(ref m); }}
The better solution is to simply make the window not visible after it finishes loading:
public class MyForm : Form{ public MyForm() { // Ensure that this is a hidden window this.WindowState = FormWindowState.Minimized; this.ShowInTaskbar = false; this.FormBorderStyle = FormBorderStyle.None;
this.Load += new EventHandler(MyForm_Load); }
void MyForm_Load(object sender, EventArgs e) { this.Visible = false; }}