MFC 对话框显示在任务栏中

MFC dialog shows in task bar

我有一个应用程序使用来自两个 DLL 的对话框。两个DLL中对话框的代码几乎相同:

  1. 两个对话框在 RC 文件中具有相同的样式:DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
  2. 两个对话框都使用 ShowWindow(SW_SHOW) 显示。
  3. 这两个对话框都是按需创建的,而不是在应用程序启动时创建的。
  4. 两个对话框都有一个 NULL 父级。
  5. 两个对话框都继承自 CDialog。

唯一的区别是:

  1. 在对话框 A 中,AFX_MANAGE_STATE() 在对话框构造函数之前调用,而对于对话框 B,它在构造函数开始时调用。

我看不出这些差异有什么不同,但是,当我显示对话框时,对话框 A 在任务栏和对话框 B 中没有图标,而且,将主要 window 放在前面将对话框 A 放在前面(反之亦然),而对话框 B 独立运行。

我想让对话框 B 的行为像对话框 A。谁能告诉我为什么存在这种行为差异以及如何解决它以使对话框 B 的行为与 A 相同?

我知道您会喜欢示例代码,但这需要一些时间(我没有时间)来制作。现有的代码都是公司的商业广告,也是一个巨大的应用程序,从中提取关键部分确实非常困难。

** 更新 ** 如果我在调用 AFX_MANAGE_STATE() 之前在对话框 B 的委托程序中调用 ::AfxGetMainWnd(),我可以获得指向主 window 指针的指针。耶!当我将它传递给 Create() 时,程序崩溃了。嘘!

看来我无法将主 window 设置为对话框 B 的所有者,我认为这可以解决我的问题,大概是因为对话框 B 在 DLL 中。我不明白的是为什么这适用于对话框 A。

实现对话框A的DLL实例化了一个CWinApp的实例。实现对话框 B 的 DLL 没有。

要解决此问题,只需将以下行添加到 CPP 文件,可能是独立的 "the_app.cpp" 文件:

CWinApp dummy;

即"the_app.cpp":

#include "stdafx.h"

CWinApp dummy;