当前位置: 代码迷 >> VC/MFC >> 关于模态对话框,
  详细解决方案

关于模态对话框,

热度:99   发布时间:2016-05-02 03:41:39.0
关于模态对话框,求助!~
用win32创建一个窗口,添加两个按钮,一个按钮用DialogBox显示一个模态对话框d1,另外一个按钮向模态对话框d1发送一个自定义消息,当模态对话框显示后,主窗口可以拖动,第二个按钮也可以成功向d1发送消息。

我的问题是:模态对话框显示后,主窗口消息循环不是被屏蔽了吗?(我打了断点,确实屏蔽了)为何主窗口还可以拖动,而且主窗口按钮还能点击呢?
------解决思路----------------------
你确定你弹出的对话框是通过DoModal()函数激活的?如果是的画,同一进程的其他窗口是不能点击的
------解决思路----------------------
不好意思,没注意你说的是win32,如果是win32,模态窗口模式需要你自己构建弹出窗体的消息循环,这个消息循环不是你应用程序的主窗体消息循环哦!还需要你手动禁用父窗体,参考这里http://www.cnblogs.com/zplutor/archive/2011/02/20/1958973.html
------解决思路----------------------
DoModal是MFC的了,Win32除了自己创建模态对话框,最简单的方法就是调用DialogBox,按理讲,对话框弹出后,父窗口是不能被点击的:
INT_PTR DialogBox(
  HINSTANCE hInstance,  // handle to module
  LPCTSTR lpTemplate,   // dialog box template
  HWND hWndParent,      // handle to owner window
  DLGPROC lpDialogFunc  // dialog box procedure
);

hWndParent这个参数你是否传对?
------解决思路----------------------
如果你传NULL , DialogBox的返回值应该是0或-1,此时DialogBox不是阻塞的才对,表示你创建模态对话框失败了,这时你的对话框不是模态对话框,所以不会屏蔽父窗口接收用户消息
  相关解决方案