日期:2014-05-17  浏览次数:21081 次

WinForm发送最小化消息无效
最近在做一个登陆窗口的时候,把WinForm的FormBorderStyle改成了None,然后自己贴图来实现最小化和关闭按钮,用PictureBox来做最小化按钮,单击事件的代码如下:

        private void pictureBoxMinimize_Click(object sender, EventArgs e)
        {
            int code = SendMessage(this.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
            Console.WriteLine("SendMessage返回值为:" + code);
        }

其中消息常量和SendMessage为

public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MINIMIZE = 0xF020;
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int message, int wParam, int lParam);

不知道为什么SendMessage无效(SendMessage返回值为0),窗口没有反应,我重写了WndProc,发现确实能捕获到WM_SYSCOMMAND,并且wParam的值为SC_MINIMIZE。
请教高手,上面的做法有错吗?原因是什么?
WinForm C# SendMessage 最小化

------解决方案--------------------
this.WindowState=FormWindowState.Minimized不就行了,为何要发消息?
------解决方案--------------------
引用:
this.WindowState=FormWindowState.Minimized不就行了,为何要发消息?



------解决方案--------------------
不需要用句柄
this.WindowState=FormWindowState.Minimized
或者this.Hide()
------解决方案--------------------
请用 PostMessage 代替 SendMessage


------解决方案--------------------

        private void button1_Click(object sender, EventArgs e)
        {
            int code = SendMessage(this.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);  // 1