移动时如何使表单部分透明?

时间:2009-07-29 14:27:00

标签: .net winforms drag-and-drop opacity titlebar

如何在通过拖动标题栏移动表单时将winform的不透明度设置为50%,并在鼠标左键启动时将其不透明度重置为100%。

3 个答案:

答案 0 :(得分:3)

有趣的是,您也可以在OnResizeBegin和OnResizeEnd覆盖中执行此操作 - 这将适用于移动和调整表单大小。

如果你只想在移动时更改不透明度,而不是在调整大小时,那么alex的答案会更好。

答案 1 :(得分:2)

Form.Opacity设置为0.5,以响应表单WndProc中的WM_NCLBUTTONDOWN

然后在收到WM_NCLBUTTONUP时将不透明度设置为1.0。

答案 2 :(得分:2)

这是一个代码示例:

    public partial class Form1 : System.Windows.Forms.Form
{
    private const long BUTTON_DOWN_CODE = 0xa1;
    private const long BUTTON_UP_CODE = 0xa0;
    private const long WM_MOVING = 0x216;

    static bool left_button_down = false;

    protected override void DefWndProc(ref System.Windows.Forms.Message m)
    {
        //Check the state of the Left Mouse Button
        if ((long)m.Msg == BUTTON_DOWN_CODE)
            left_button_down = true;
        else if ((long)m.Msg == BUTTON_UP_CODE)
            left_button_down = false;

        if (left_button_down)
        {
            if ((long)m.Msg == WM_MOVING)
            {
                //Set the forms opacity to 50% if user is moving
                if (this.Opacity != 0.5)
                    this.Opacity = 0.5;
            }
        }

        else if (!left_button_down)
            if (this.Opacity != 1.0)
                this.Opacity = 1.0;

        base.DefWndProc(ref m);
    }
}