WndProc:如何在窗体最小化时获取窗口消息

len*_*iep 6 c# wndproc

要与某项服务进行通信,我必须覆盖WindProc.并接收窗口消息.

但是,当表单最小化时,我不再收到任何消息.我知道它必须是那样的,但有没有解决方法呢?我不希望有一个永远开放的隐藏形式......

jre*_*ejo 9

我最近还需要解决类似的问题.亚伯的回答让我朝着正确的方向前进.以下是通过将普通窗口更改为仅消息窗口的完整示例:

class MessageWindow : Form {

  [DllImport("user32.dll")]
  static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

  public MessageWindow() {
     var accessHandle = this.Handle;
  }

  protected override void OnHandleCreated(EventArgs e) {
     base.OnHandleCreated(e);
     ChangeToMessageOnlyWindow();         
  }

  private void ChangeToMessageOnlyWindow() {         
     IntPtr HWND_MESSAGE = new IntPtr(-3);
     SetParent(this.Handle, HWND_MESSAGE);         
  }

  protected override void WndProc(ref Message m) {
     // respond to messages here
  } 
}
Run Code Online (Sandbox Code Playgroud)

注意构造函数:我发现我需要访问Handle属性,否则不会调用OnHandleCreated方法.不确定原因,也许有人可以解释原因.

我相信我的示例代码也会回答一个相关的问题:如何从Windows窗体创建一个仅限消息的窗口?