繁体   English   中英

MFC对话框显示在任务栏中

[英]MFC dialog shows in task bar

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

  1. 这两个对话框在RC文件中具有相同的样式: DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU 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中都没有图标,此外,将主窗口置于最前面会带来对话框A位于最前面(反之亦然),而对话框B则独立运行。

我想让对话框B的行为类似于对话框A。有人可以告诉我为什么存在这种行为差异以及如何解决该差异,以便对话框B的行为与A相同吗?

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

**更新**如果在调用AFX_MANAGE_STATE()之前在对话框B的委托方中调用::AfxGetMainWnd() ,则可以获得指向主窗口的指针的指针。 好极了! 然后将其传递给Create() ,程序崩溃。

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

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

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

CWinApp dummy;

即“ the_app.cpp”:

#include "stdafx.h"

CWinApp dummy;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM