2015-02-12 84 views
0

我想每次啓動我的窗口形式,他設在屏幕的底部(任務欄上面)定位窗口形式

public void goBottomWindow(Form targetForm) 
    { 

       targetForm.WindowState = FormWindowState.Maximized; 
       targetForm.FormBorderStyle = FormBorderStyle.None; 
       targetForm.TopMost = true; 
       WinApi.SetWinFullScreen(targetForm.Handle); 

    } 
    public class WinApi 
    { 
     [DllImport("user32.dll", EntryPoint = "GetSystemMetrics")] 
     public static extern int GetSystemMetrics(int which); 

     [DllImport("user32.dll")] 
     public static extern void 
      SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter, 
         int X, int Y, int width, int height, uint flags); 

     private const int SM_CXSCREEN = 0; 
     private const int SM_CYSCREEN = 1; 
     private static IntPtr HWND_TOP = IntPtr.Zero; 
     private const int SWP_SHOWWINDOW = 64; // 0x0040 

     public static int ScreenX 
     { 
      get { return GetSystemMetrics(SM_CXSCREEN); } 
     } 

     public static int ScreenY 
     { 
      get {return 60;} 
     } 

     public static void SetWinFullScreen(IntPtr hwnd) 
     { 
      SetWindowPos(hwnd, HWND_TOP, 0, 0, ScreenX, ScreenY, SWP_SHOWWINDOW); 
     } 
    } 

使用此代碼,它離開我的窗口形式在屏幕上方....但我需要的是位於下方的窗體窗口。 有可能做到這一點?

對不起,我的英語很不好:(

+0

你嘗試過'StartPostion'嗎? – chouaib 2015-02-12 01:13:02

+0

是的,不起作用,爲什麼它也放置在下面的窗口窗體需要她佔據屏幕100%的寬度(它已經在運行)。 – JoaoFelipe 2015-02-12 01:14:39

回答

1

爲什麼targetForm.WindowState = FormWindowState.Maximized;? 不FormWindowState.Normal更適合您?

就去拿你的桌面的尺寸/屏幕

var rect = Screen.PrimaryScreen.WorkingArea; 
targetForm.Witdh = rect.Width; 
targetForm.Top = rect.Height - targetForm.Height; 
0

我在你的第一行看到它說targetForm.TopMost = true; 這意味着你的表格將是TOPMOST,如果你想你的表格t o BottomMost,你應該改變爲false;

希望這會有所幫助! - 建設銀行

+0

不,完全沒有。 TopMost與屏幕上的Y位置無關,*與Z-order一致* – BradleyDotNET 2015-02-26 23:06:39