我有一个使用来自两个DLL的对话框的应用程序。两个DLL中的对话框代码几乎相同:
DS_SETFONT |
DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
。ShowWindow(SW_SHOW)
显示。唯一的区别是:
AFX_MANAGE_STATE()
在对话框构造函数之前被调用,而对于对话框B,它在构造函数的开头被调用。我看不到这些区别中的任何一个都会有什么区别,但是,当我显示对话框时,对话框A在任务栏和对话框B中都没有图标,此外,将主窗口移到了前面将对话框A置于前面(反之亦然),而对话框B则独立运行。
我想让对话框B的行为类似于对话框A。有人可以告诉我为什么存在这种行为差异,以及如何解决该差异,以便对话框B的行为与A相同吗?
我知道您会喜欢示例代码,但这需要一些时间(我没有)来编写。现有的代码都是公司的商业广告,也是一个庞大的应用程序,从中提取关键部分确实非常困难。
**更新**
如果在调用::AfxGetMainWnd()
之前在对话框B的委托人中调用AFX_MANAGE_STATE()
,则可以获得指向主窗口指针的指针。好极了!然后将其传递给Create()
时,程序崩溃。嘘!
似乎我无法将主窗口设置为对话框B的所有者,我认为这可以解决我的问题,大概是因为对话框B在DLL中。我不明白的是为什么这对对话框A有用。
答案 0 :(得分:-1)
实现对话框A的DLL实例化CWinApp的实例。实现对话框B的DLL没有。
要解决此问题,只需将以下行添加到CPP文件中,可能是一个独立的“ the_app.cpp”文件:
byte
即“ the_app.cpp”:
CWinApp dummy;