zoukankan      html  css  js  c++  java
  • 屏蔽Winform的关闭按钮与“创建窗口句柄时出错” (转)

    原链接:http://www.cnblogs.com/adaiye/archive/2008/04/08/wndproc.html

    首先,先介绍下如何屏蔽Winform的关闭按钮,就是在点关闭时,并不是直接关闭程序,而是提示是否真的关闭或者最小化。
    前段时间要实现这个功能,所以就在网上搜罗了下。Winform的关闭操作其实是发一个关闭的消息。所以,要想不关闭窗口,只要截获这个消息就可以了。
    那么如何截获呢?
    可以用WndProc来得到并处理Window系统注销或关闭的消息:

    protected override void WndProc(ref Message m)
            
    {
                
    const int WM_SYSCOMMAND = 0x0112;
                
    const int SC_CLOSE = 0xF060;
                
    if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)   // 用户点击关闭按钮
                {
                    
    this.WindowState = FormWindowState.Minimized;   // 最小化
                    return;
                }

                
    base.WndProc(ref m);   // 调用基类的窗体事件
            }
    上面的方法就是点击关闭按钮后不退出程序,而是最小化。
    另外,也可以用Closeing事件,事件里的参数e有个Cancel,当e.Cancel=true的时候也会不关闭程序及系统(或注销)。


    这个方法是满足了我的要求,但是我昨天又想用在另一个Winform程序的时候,把代码添加过去,并做了适当的修改:
    protected override void WndProc(ref Message m)
            
    {
                
    const int WM_SYSCOMMAND = 0x0112;
                
    const int SC_CLOSE = 0xF060;
                
    if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)   // 用户点击关闭按钮
                {
                    
    if (DialogResult.No == MessageBox.Show("确定退出?""退出", MessageBoxButtons.YesNo))
                    
    {
                        
    // 不关闭
                        return;
                    }

                }

                
    //base.WndProc(ref m);   // 调用基类的窗体事件
            }
    这里我是先提示是否确定要退出程序,如果选是才真的退出,否则不做任何处理。我把最后的一条语句注释掉了。
    这时问题就出现了:出现了“创建窗口句柄时出错”的Win32Exception。
    后来把baseWndProc(ref m)的注释取消掉,就行了。   具体原因还不清楚,知道的朋友讲解下。
    希望,能给有类似困扰的朋友有所帮助。
  • 相关阅读:
    LightOJ 1132 Summing up Powers(矩阵快速幂)
    hdu 3804 Query on a tree (树链剖分+线段树)
    LightOJ 1052 String Growth && uva 12045 Fun with Strings (矩阵快速幂)
    uva 12304 2D Geometry 110 in 1! (Geometry)
    LA 3263 That Nice Euler Circuit (2D Geometry)
    2013 SCAUCPC Summary
    poj 3321 Apple Tree (Binary Index Tree)
    uva 11796 Dog Distance (几何+模拟)
    uva 11178 Morley's Theorem (2D Geometry)
    动手动脑
  • 原文地址:https://www.cnblogs.com/glacier/p/1423691.html
Copyright © 2011-2022 走看看