如何在弹出模态窗口后,主窗口还能处理消息?

PDD123 PDD123 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
以前,我的程序弹出的模态对话框的所有代码和资源都在exe中,所以弹出模态对话框之后,主窗口还能继续处理消息。
现在,我设计了一个多线程的程序。其中有一个处理数据的线程,数据发生改变时就发消息通知主窗口更新显示数据。
整个程序的功能由多个DLL组成,并且添加新的DLL可以扩展功能。
而各个DLL又会使用到相同或相似功能的对话框,于是我就把这些对话框的相似部分封装到一个DLL中,做为界面库来使用。因为有独立的对话框资源,对话框类中又要用到资源ID,所以我并没有把对话框类作为接口类来导出,
而是每种对话框都对应一个函数作为接口。调用此函数就能打开一个模态对话框。

比如:
bool	TWI_InputStr(CString &str,LPCSTR wintext,CWnd * pParent=NULL,LPCSTR initstr="",LPCSTR notice="",bool 是否允许空字符串=0,LPStringCanUse lpfun=NULL);//输入一个字符串 返回值代表是否确定

bool TWI_InputStr(CString &str,LPCSTR wintext,CWnd * pParent,LPCSTR initstr,LPCSTR notice,bool 是否允许空字符串,LPStringCanUse lpfun)
{
CInputStrDlg dlg(pParent);
dlg.m_WinText=wintext;
dlg.m_StrEdit=initstr;
dlg.m_ErrorNotice=notice;
dlg.m_是否允许空字符串=是否允许空字符串;
dlg.m_lpStringCanUse=lpfun;
if(dlg.DoModal()==IDOK)
{
str=dlg.m_StrEdit;
return 1;
}
return 0;
}


TWI_InputStr是我提供的一个接口函数,其中的参数对对话框的属性进行了设置。CInputStrDlg 是对话框类,在外部是看不到此类的。

我在测试过程中发现,这样弹出来模态对话框后,主窗口上的数据就不刷新了。
若是打开exe中的模态对话框A,主窗口上的数据可以刷新,但是若模态对话框A通过那些接口函数在打开DLL中的模态对话框,那主窗口上的数据又不刷型了。

请问,要怎么做才能在通过DLL提供的接口函数打开DLL中的模态对话框时,主窗口还能继续处理消息呢?
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
PDD123
VC/MFC 16,550 成员 421,606 内容