以前,我的程序弹出的模态对话框的所有代码和资源都在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中的模态对话框时,主窗口还能继续处理消息呢?
现在,我设计了一个多线程的程序。其中有一个处理数据的线程,数据发生改变时就发消息通知主窗口更新显示数据。
整个程序的功能由多个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中的模态对话框时,主窗口还能继续处理消息呢?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货