天天看点

使用API发送消息显示窗口

问题描述:

主窗体界面下有多个功能按钮,点击功能按钮显示功能界面,主窗口隐藏,关闭功能界面后主窗口显示,这里功能界面如果是模态对话框,则很好处理,在显示功能界面前隐藏主窗口,此时显示功能界面,由于功能界面是模态框,此时主界面会阻塞,直到功能界面关闭!此时显示主窗口!如果功能界面是非模态窗体,则主窗口不会阻塞!如何解决呢?

解决方案:使用自定义消息!关闭功能界面给主窗口发送自定义消息,主窗口做显示处理即可!

第一步:定义自定义消息  public const int WM_MSG  = 0x0400 + 200;

第二步:设置主界面的窗口句柄,发送消息时需要使用

第三步:在功能界面关闭时调用PostMessage函数发送消息,SendMessage也可,不过此函数会阻塞等待返回

PostMessage(MainHandle, WM_MSG,  0, 0);

第四步:在主界面处理自定义消息

protected override void WndProc(ref Message m)

        {

            switch (m.Msg)

            {

                case WinAPI.WM_MSG:

                    this.Show();

                    break;

            }

                base.WndProc(ref m);

        }