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

PDD123 2011-09-30 04:48:35
以前,我的程序弹出的模态对话框的所有代码和资源都在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中的模态对话框时,主窗口还能继续处理消息呢?
...全文
505 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2011-10-12
  • 打赏
  • 举报
回复
常规DLL不支持导出MFC类
PDD123 2011-10-11
  • 打赏
  • 举报
回复
那为什么弹出exe中的模态窗口后,还可以继续处理其他消息呢?按我的理解,DoModal()函数,是在窗口关闭(模态窗口消息循环结束)的时候才返回的,那么在模态窗口关闭之前,主窗口处理消息的线程应该阻塞了才对嘛?
PDD123 2011-10-01
  • 打赏
  • 举报
回复
我的那DLL的导出函数是一些普通的函数,是在.def文件中放入了函数名显式导出那种。那些函数调用又调用了DLL中的继承自CDialog的窗口类的DoModal成员函数。
PDD123 2011-10-01
  • 打赏
  • 举报
回复
应该是MFC规则DLL,里面有CWinApp
蒋晟 2011-10-01
  • 打赏
  • 举报
回复
常规DLL还是扩展DLL啊?
PDD123 2011-09-30
  • 打赏
  • 举报
回复
“进入dll之后,程序主体就是dll了”能说说这句话是啥意思不?

在打开模态对话框后,处理消息的线程应该是被阻塞了,为何不使用DLL中的对话框时,主窗口还能处理后来接收到的消息?

若处理消息时,不是打开模态对话框,而是进行一些耗时很长的运算,处理消息的线程同样也阻塞了。
用户 昵称 2011-09-30
  • 打赏
  • 举报
回复
谁说过来着?进入dll之后,程序主体就是dll了。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧