2

1.- 你好。在这周搜索了很多网站和论坛之后,我发现了我遇到的问题的重点。问题是,当我在 Visual C++ 中创建一个新的 MFC 项目时,如果我将应用程序类型设置为“基于对话框”并让相应的对话框类从其默认 CDialogEx 派生,那么问题显示立即编译和执行程序而无需修改任何代码(我不知道你是否可以在你的机器上试试这个)。

2.-有线行为是在对话框窗口处于活动状态时,如果我单击任务栏中的空闲空间(甚至在另一个未最大化的窗口中),则对话框窗口的边框(包括标题栏)基于 -based 的应用程序保持“聚焦”(非灰色),即单击任务栏或另一个未完全覆盖我的应用程序窗口的窗口,那么我的应用程序窗口应该有点失去焦点。

3.-我在大量代码之后意识到这一点,因为我使用 CFileDialog 类发现了这种行为,因为当我创建(DoModal)一个 CFileDialog 实例时,当文件对话框打开时我的应用程序窗口失去焦点(变得“变灰”) (应该如此)但是当文件对话框完成时,我的窗口的边框保持灰色(这是不正确的),并且它一直保持这种状态,直到我最小化并恢复我的窗口,或者我切换到另一个窗口并返回到我的窗口.

4.-我发现问题出在从 CDialogEx 类继承,因为我从头开始创建了一个 New 项目(如第 1 段所述),看看是不是我修改了一些使我的程序行为错误的东西,以及事实证明,新项目的行为与我在第 2 段中描述的一样。

5.-好消息是我尝试创建一个新项目,但这次继承自 CDialog 而不是 CDialogEx。令我惊讶的是,这个新程序的行为是正确的,我的意思是,第 2 段中描述的有线行为在这个新项目中不存在。正如我在第 3 段中所描述的,我的另一个问题是文件对话框(CFileDialog 类),幸运的是我的项目代码更改为从 CDialog 继承,而不是 CDialogEx,也解决了这个问题。我的意思是,问题出在 CDialogEx 类上。

6.-我决定写这个问题并提供我发现的信息,因为当我搜索时,我看到不同论坛中的很多人都有同样的问题而没有得到解决方案。我想提一下,我尝试了论坛中提供的所有建议,至于它们,对我没有任何帮助。

7.-正如我所说,一种解决方案是将继承从 CDialogEx 更改为 CDialog。但是我的问题是,如果您知道我应该做些什么来使我的程序在 CDialogEx 类下正常运行,因为我更喜欢使用新接口而不是旧接口。我也想知道你是否在你的视觉工作室中尝试过和我一样的问题。

我希望我的信息和您的回答对其他人有用。非常感谢您的回答。

4

0 回答 0