Microsoft滴点列表组合框上的焦点指示器未显示(有时)

时间:2014-12-23 22:06:43

标签: c winapi mfc

我有一个遗留应用程序,它使用Win32(而不是MFC)来创建图形屏幕。我们使用的控件类型之一是具有droplist样式的组合框(使用新的Common Controls模块)。我们最近发现了一个关于这种控制的非常奇怪的事情。

如果我通过鼠标单击启动应用程序,则下拉列表中的焦点指示器不会显示!这可以使用Start-> Run对话框完成(填写要运行的程序后单击OK)。这可以使用桌面快捷方式(双击)完成。可以通过单击Visual Studio 2010中的“Go”按钮来调试程序来完成此操作。我们的用户通过使用类似于Start-> Run的小型Delphi应用程序发现了这一点(填写要执行的程序的输入字段,然后按下“启动”按钮)。如果单击“启动”按钮,则缺少焦点指示。

如果我使用按键启动应用程序,焦点指示器会显示!再次,开始 - >运行对话框(但按Enter键激活“确定”按钮)。桌面快捷方式(单击以突出显示图标,然后按Enter以激活它)。 Visual Studio中的F5。即使是Delphi应用程序 - 如果您选择启动按钮,然后按空格键或回车键,我们的应用程序将启动并在下拉列表中显示焦点指示符。

我尝试使用下拉列表创建一个小型MFC应用程序,并以上述所有方式启动了该应用程序。但是,这个小应用程序始终显示下拉列表的焦点指示符,无论我如何启动它。

我已经检查了两个下拉列表的样式(在我的小应用程序上,以及我的实际应用程序)。它们略有不同,但改变我的小型MFC应用程序的样式以匹配我的桌面应用程序不会改变行为。更改我的桌面应用程序以匹配小型MFC应用程序的样式也不会改变我的桌面应用程序的行为。

我修改了我的桌面应用程序,要求用户在显示主窗口后按Enter,但在显示任何图形控件之前。这会导致焦点指示器现在显示!

我发现,在调试我的桌面应用程序时,如果我在显示主窗口后设置断点,但在绘制任何控件之前,然后按F5继续,则焦点指示器现在显示。但是,如果我单击“转到”按钮,则焦点指示符不会显示。

似乎与键盘交互会以某种方式导致焦点指示器显示。

请注意,下拉列表组合框看起来像一个按钮,右侧有一个小的向下箭头。焦点指示符是按钮内边框附近的虚线。

我现在已经在这个问题上苦苦挣扎了两天,没有迹象表明我正在接近答案。因此,对于可能导致此问题的任何见解都将非常感激。

1 个答案:

答案 0 :(得分:1)

对该问题的第一个评论提供了部分答案。无论应用程序如何启动,更改键盘加速器的控制面板设置也会导致显示焦点指示。但是,我认为这只是部分答案。

当CP设置关闭时,键盘加速器应该在您按下Alt键后显示。根据Jonathon Potter所链接的博客文章,我的理解是,一旦使用键盘,焦点指示器就会显示出来。在输入字段中输入文本可能并不算作"使用键盘",但我希望控件之间的标签可以计算。

此外,如果CP设置关闭,我的应用程序的行为会有所不同,具体取决于我是通过鼠标单击还是按键启动应用程序。

总之,我发现行为不一致。也许这是正确的。我觉得很难说。