首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

WinForm发送最小化讯息无效

2013-07-08 
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

热点排行