WinForm发送最小化讯息无效
WinForm发送最小化消息无效最近在做一个登陆窗口的时候,把WinForm的FormBorderStyle改成了None,然后自己贴
WinForm发送最小化消息无效
最近在做一个登陆窗口的时候,把WinForm的FormBorderStyle改成了None,然后自己贴图来实现最小化和关闭按钮,用PictureBox来做最小化按钮,单击事件的代码如下:
[解决办法]不需要用句柄
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
Console.WriteLine("SendMessage返回值为:" + code); //3
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND && m.WParam.ToInt32() == SC_MINIMIZE)
{
int a = 10;
int b = a; // 2
}
base.WndProc(ref m);
}
注意以上代码执行顺序 1-》2-》3
SendMessage发送的消息是不会经过UI线程消息队列的 也就是说 SendMessage直接调用窗口过程 调用完之后才返回
而PostMessage发送消息到消息队列 马上就返回
代码中3处 还没执行完(Click事件处理程序没返回) 却先调用了WndProc base.WndProc中即使处理了最小化消息 也是没用的
Winform中最好不要使用Win API 除非万不得已 不然你完全可以去学MFC
WInform中Windows消息请参见 http://www.cnblogs.com/xiaozhi_5638/archive/2013/01/03/2843374.html