none
CreateDialog创建的对话框是否可以对WM_QUERYENDSESSION消息进行拦截 RRS feed

  • 问题

  • 我用CreateWindow创建的窗体发现可以对WM_QUERYENDSESSION消息进行拦截,当应用程序返回FALSE时,关机操作终止。用CreateDialog创建的对话框也可以拦截WM_QUERYENDSESSION消息,但是即使返回FALSE,操作系统仍然能够关闭。请问使用CreateDialog创建的对话框对于WM_QUERYENDSESSION消息无论是返回TRUE还是FALSE,操作系统是否都能够正常关闭?请各位不吝赐教,谢谢。
    2010年12月30日 2:41

答案

全部回复

  • 你好,

    我这里可以进行正常的操作。我建议你可以将Msg跟WM_SYSCOMMAND比较,将wParam跟SC_CLOSE比较。

    请参考我下面的这代代码,希望对你有所帮助启发。

    public const Int32 WM_SYSCOMMAND = 0x0112;
    
    protected override void WndProc(ref Message m)
    {
       if (m.Msg == WM_SYSCOMMAND)
       {
          if ((Int32)m.WParam == 0xF060)
          {
             Application.Exit();
          }
        }
        base.WndProc(ref m);
     }
    

    谢谢,

    Larcolais


    Larcolais Gong[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年1月2日 3:14
  • 谢谢Larcolais的回复。

    请教您,用CreateDialog创建的对话框对于WM_QUERYENDSESSION消息无论是返回TRUE还是FALSE,操作系统是否都能够正常关闭?能否让我看下你比较的代码,谢谢。

    2011年1月4日 9:22
  • 对话框用的是dlgproc不是windowproc

    dlgproc的返回值并不是等价于winproc的返回值的。

    在dlgproc中 用SetWindowLong(hwndDlg, DWL_MSGRESULT, lResult),然后立刻return TRUE;

    2011年1月6日 7:38