C#实现窗体总在最上面或者下面

本文介绍如何使用C#实现窗体置底效果,即窗体创建后自动置于所有其他窗口下方。通过调用Win32API的SetWindowPos函数,并结合窗口位置标志,使窗体在显示时不干扰用户当前操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#实现窗体总在最上面或者下面


Pop-under windows are windows that, when created, are immediately shuttled behind all other windows in the z-order. In fact, many times you don't notice them until you've closed or minimized all other open windows. Basically, they're seen as a less obtrusive means of advertising than pop-ups that require immediate (and usually resentful) attention from the user. With the lines between browser-based Web applications and traditional Windows applications being blurred every day, it should come as no surprise that Windows programmers are looking for ways to emulate the (infamous) pop-under effect utilized by Web marketers. Therefore, in this week's article, we'll look at the steps required to pull of this stunt...er...task.

Figure 1

Note: If you also would like to see how pop-under windows are created in JavaScript, you can read about that in an article by Joe Burns on one of our sister sites—HTMLGoodies.com.
  1. The function that's used to modify the window position is the Win32 API SetWindowPos. Therefore, the first thing you'll need to do is to include the following using statement to import and use this native function from your C# application:
  2. using System.Runtime.InteropServices;
  3. To import the native SetWindowPos function, use the DllImport attribute and define the function's signature as follows where I'm also specifying a few of the constants defined in the Platform SDK C++ header file WinUser.h. (Note that while I've chosen to define these types within a class called Win32, that is purely a subjective choice. You can name the class anything you like or simply include these type definitions in an already-existing class.)
  4. class Win32
    {
    [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
    public static extern bool SetWindowPos(
    int hWnd, // window handle
    int hWndInsertAfter, // placement-order handle
    int X, // horizontal position
    int Y, // vertical position
    int cx, // width
    int cy, // height
    uint uFlags); // window positioning flags
    public const int HWND_BOTTOM = 0x1;
    public const uint SWP_NOSIZE = 0x1;
    public const uint SWP_NOMOVE = 0x2;
    public const uint SWP_SHOWWINDOW = 0x40;
    }
  5. Implement a helper method (ShoveToBackground) to call the SetWindowPos function at the appropriate times.
  6.    private void ShoveToBackground()
    {
    Win32.SetWindowPos((int)this.Handle,
    Win32.HWND_BOTTOM,
    0, 0, 0, 0,
    Win32.SWP_NOMOVE | Win32.SWP_NOSIZE |
    Win32.SWP_SHOWWINDOW);
    }
  7. Finally, implement handlers for the form's Activate and Resize events and have them both simply call the helper ShoveToBackground method.
  8. private void Form1_Activated(object sender, System.EventArgs e)
    {
    ShoveToBackground();
    }

    private void Form1_Resize(object sender, System.EventArgs e)
    {
    ShoveToBackground();
    }

Now, when the form is first executed or activated from the task bar or task list, it will always flicker and then immediately get "pushed" to the background as you see in Figure 1.

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值