刚才有人问问题, 由此我也产生一个问题.
cdialog::domodal到底会不会阻塞父窗口线程?
我一直认为modaldialog产生后会进入一个系统专用的消息循环. 所以并不影响父窗口的消息处理.
比如我生成一个SDI程序, 在其CMyView中放置一个timer, 每5秒弹出一个afxmessagebox.
然后双击cmyview产生一个modaldialog.
void CMyView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CTestDialog dlg;
dlg.DoModal();
AfxMessageBox(L"ok");
CView::OnLButtonDblClk(nFlags, point);
}
WM_TIMER仍然响应, 也没耽误WM_PAINT.
但是除非关闭modaldialg, 否则afxmessagebox(L"ok")不会执行.
这样看来又象是阻塞的!
想来想去, 除非modaldialg的消息循环临时替代了父窗口的消息循环, 并将消息分发出去.
而且是sendmessage直接响应(postmessage仍然需要父窗口消息循环啊)否则找不到更合理的解释了./