Visual c++ 保留任务栏图标,替换MFC对话框

Visual c++ 保留任务栏图标,替换MFC对话框,visual-c++,mfc,taskbar,Visual C++,Mfc,Taskbar,我有一个基于MFC对话框的应用程序。用户可以更改对话框的语言,我是通过关闭现有对话框,然后打开另一个更改了语言的对话框来实现的。问题是任务栏中的效果是一个图标被删除,另一个相同的图标被创建。如果我的应用程序的图标不是任务栏中的最后一个图标,它将被视为已移动到任务栏图标集的末尾 我想保留图标在任务栏中的位置,而不是阻止图标闪烁的发生。我该怎么做 应用程序必须支持从Windows XP到Windows 7的操作系统 编辑:我愿意接受回答的另一个问题是如何创建一个不可见的窗口,该窗口仍然显示在任务栏中

我有一个基于MFC对话框的应用程序。用户可以更改对话框的语言,我是通过关闭现有对话框,然后打开另一个更改了语言的对话框来实现的。问题是任务栏中的效果是一个图标被删除,另一个相同的图标被创建。如果我的应用程序的图标不是任务栏中的最后一个图标,它将被视为已移动到任务栏图标集的末尾

我想保留图标在任务栏中的位置,而不是阻止图标闪烁的发生。我该怎么做

应用程序必须支持从Windows XP到Windows 7的操作系统


编辑:我愿意接受回答的另一个问题是如何创建一个不可见的窗口,该窗口仍然显示在任务栏中,以及如何将相关窗口消息从该窗口转发到我的主窗口?

使该对话框成为另一个外部父窗口的子窗口。父窗口可以是对话框或任何其他类型的窗口;它将提供的只是标题栏。如果用户试图调整其大小,则必须将调整大小命令转发到对话框,否则您不需要在父窗口中执行太多操作。

为什么不将对话框替换为CFormView?这样就有了一个环绕对话框的框架窗口(嵌入在表单视图中),而拥有任务栏图标的是框架窗口

创建显示CFormView的SDI应用程序。初始化时以默认语言(或用户以前选择的任何语言)显示对话框。当用户选择“更改语言”选项时,只需使用新的表单视图更改正在显示的表单视图

附加功能:通过这种设计,框架将为您提供特定于语言的加速器和菜单等功能,而您无需付出任何努力


有关如何执行此操作的更多信息,请查看

在关闭旧对话框之前是否尝试打开新对话框?我考虑过,但不确定如何实现它。目前我在一个循环中调用DoModal。如何同时打开两个模态对话框,然后关闭第一个模态对话框?另外,我认为在一个短暂的时刻,任务栏上会出现两个图标。我希望能找到更有效的解决方案。如果能给我举个例子,或者给我一个例子的链接,我将不胜感激。例如,我不知道如何处理
m_pMainWnd
m_pActiveWnd
,谁知道接下来还有什么需要处理。我正在用隐藏窗口尝试这种方法,但如何为不可见窗口显示任务栏按钮?要使WS_EX_APPWINDOW样式工作,窗口必须可见。我从来没有说过要使外部窗口不可见。使其可见,并将另一个对话框放在其中;在外部对话框的
WM_INITDIALOG
处理程序中使用
Create
而不是
DoModal
。这样做更有意义。但我原来的对话框有一个菜单和快捷键。我可能必须将菜单移动到父对话框并重新路由菜单消息。幸运的是,没有调整大小。我的本地化对话框中有一个菜单,菜单的一部分是动态创建的。我的天真方法是在使用ON_COMMAND_RANGE注册的消息处理程序中使用SendMessage(WM_COMMAND,nID,0)重新路由菜单消息,这会导致某些消息的堆栈溢出。我现在不知所措,无法用谷歌搜索出来。真不敢相信我是第一个只想在任务栏上有一个稳定图标的人。。。