如何使窗体显示在特定窗体的前面,这个特定的窗体可能不是在最前面?
比如桌面上有4个程序窗体,分别为A,B,C,D,A显示在B窗体前面,B显示在C窗体前面,C显示在D窗体前面,当我的程序打开时,我的窗体要显示在D的前面,C窗体的后面,如何实现? 层次结构为A ->B->C->D IntPtr[] hwnd = new IntPtr[4];
hwnd[0] = new IntPtr(67738); (A)
hwnd[1] = new IntPtr(461442); (B)
hwnd[2] = new IntPtr(461498); (C)
hwnd[3] = new IntPtr(328290); (D)
//以上为窗体的句柄 frm为自己的窗体 int hwp = BeginDeferWindowPos(4);
DeferWindowPos(hwp, frm.Handle, WindowMessage.HWND_TOP, 0, 0, 0, 0, WindowMessage.SWP_NOMOVE | WindowMessage.SWP_NOSIZE);
DeferWindowPos(hwp, hwnd[2], WindowMessage.HWND_TOP, 0, 0, 0, 0, WindowMessage.SWP_NOMOVE | WindowMessage.SWP_NOSIZE);
DeferWindowPos(hwp, hwnd[1], WindowMessage.HWND_TOP, 0, 0, 0, 0, WindowMessage.SWP_NOMOVE | WindowMessage.SWP_NOSIZE);
DeferWindowPos(hwp, hwnd[0], WindowMessage.HWND_TOP, 0, 0, 0, 0, WindowMessage.SWP_NOMOVE | WindowMessage.SWP_NOSIZE);
EndDeferWindowPos(hwp);
上面代码的思路是依次把依次把自己-》C-》B-》A 设置为最前面,但最后的结果不是这个的
比如桌面上有4个程序窗体,分别为A,B,C,D,A显示在B窗体前面,B显示在C窗体前面,C显示在D窗体前面,当我的程序打开时,我的窗体要显示在D的前面,C窗体的后面,如何实现? 层次结构为A ->B->C->D IntPtr[] hwnd = new IntPtr[4];
hwnd[0] = new IntPtr(67738); (A)
hwnd[1] = new IntPtr(461442); (B)
hwnd[2] = new IntPtr(461498); (C)
hwnd[3] = new IntPtr(328290); (D)
//以上为窗体的句柄 frm为自己的窗体 int hwp = BeginDeferWindowPos(4);
DeferWindowPos(hwp, frm.Handle, WindowMessage.HWND_TOP, 0, 0, 0, 0, WindowMessage.SWP_NOMOVE | WindowMessage.SWP_NOSIZE);
DeferWindowPos(hwp, hwnd[2], WindowMessage.HWND_TOP, 0, 0, 0, 0, WindowMessage.SWP_NOMOVE | WindowMessage.SWP_NOSIZE);
DeferWindowPos(hwp, hwnd[1], WindowMessage.HWND_TOP, 0, 0, 0, 0, WindowMessage.SWP_NOMOVE | WindowMessage.SWP_NOSIZE);
DeferWindowPos(hwp, hwnd[0], WindowMessage.HWND_TOP, 0, 0, 0, 0, WindowMessage.SWP_NOMOVE | WindowMessage.SWP_NOSIZE);
EndDeferWindowPos(hwp);
上面代码的思路是依次把依次把自己-》C-》B-》A 设置为最前面,但最后的结果不是这个的
Form.Owner = 后面的窗体;
表示form是这个窗体的一员,永远在这个窗体前
{
Form frma = new Form();
frma.Text = "a";
frma.Show(); Form frmb = new Form();
frmb.Text = "b";
frmb.Show(); Form frmc = new Form();
frmc.Text = "c";
frmc.Show(); Form frmd = new Form();
frmd.Text = "d";
frmd.Show(); frma.BringToFront();
frmc.BringToFront();
frmb.BringToFront();
frmd.BringToFront();
}
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, int flags);
private void button1_Click(object sender, EventArgs e)
{
Form frma = new Form();
frma.Text = "a";
frma.Show(); Form frmb = new Form();
frmb.Text = "b";
frmb.Show(); Form frmc = new Form();
frmc.Text = "c";
frmc.Show(); Form frmd = new Form();
frmd.Text = "d";
frmd.Show(); SetWindowPos(frma.Handle,(IntPtr)0, 0, 0, 0, 0, 3);
SetWindowPos(frmc.Handle, (IntPtr)0, 0, 0, 0, 0, 3);
SetWindowPos(frmd.Handle, (IntPtr)0, 0, 0, 0, 0, 3);
SetWindowPos(frmb.Handle, (IntPtr)0, 0, 0, 0, 0, 3);
}
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, int flags);
private void button1_Click(object sender, EventArgs e)
{
SetWindowPos((IntPtr)71872, (IntPtr)0, 0, 0, 0, 0, 3);
SetWindowPos((IntPtr)71862,(IntPtr)0, 0, 0, 0, 0, 3);
SetWindowPos((IntPtr)71868, (IntPtr)0, 0, 0, 0, 0, 3);
SetWindowPos((IntPtr)71870, (IntPtr)0, 0, 0, 0, 0, 3);
}其中第一项目的四个窗体会按照SetWindowPos的顺序显示出来。
SetWindowPos((IntPtr)71872, (IntPtr)0, 0, 0, 0, 0, 3); 自己的程序窗体
SetWindowPos((IntPtr)71862,(IntPtr)0, 0, 0, 0, 0, 3); 其它程序窗体 (一起显示的窗体)
SetWindowPos((IntPtr)71868, (IntPtr)0, 0, 0, 0, 0, 3); 其它程序窗体
SetWindowPos((IntPtr)71870, (IntPtr)0, 0, 0, 0, 0, 3); 其它程序窗体
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.bringtofront.aspx比如桌面上有4个程序窗体,分别为A,B,C,D,A显示在B窗体前面,B显示在C窗体前面,C显示在D窗体前面,当我的程序打开时,我的窗体要显示在D的前面,C窗体的后面,如何实现?
=======
不同的程序的? 不知道有什么意义,这样做?