读书人

WinForm发送最小化讯息无效

发布时间: 2013-07-08 14:13:00 作者: rapoo

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

读书人网 >C#

热点推荐