选择时,级联窗口未升至顶部

时间:2012-08-17 18:16:38

标签: windows wxwidgets

我有一个应用程序,它创建了一系列无模式对话框窗口,以“级联”显示。用户应该能够点击任何窗口将其置于顶部并与之交互。

这是一个截图,显示这是按预期工作的。用户点击了底部的第3个窗口,成功将其置于顶部。

enter image description here

用户报告说,当他运行此操作并点击其中一个隐藏的窗口时,窗口不会升到顶部

Here is a video显示问题发生。它显示了正常级联的笔记本电脑窗口,表现如预期。然后会出现一系列我的应用程序窗口,但用户无法将任何选定的窗口置于顶部。选定的窗口会更改外观,表示它已被选中,但仍然模糊不清。 (视频通过演示相关问题得出结论,我们现在可能忽略了这个问题)

用户报告在他尝试的其他PC上发生此问题。我无法重现这个问题。

我完全难过,甚至猜不出可能导致这种情况的原因。

(我的一个理论是应用程序已冻结,不再响应绘制消息。但是,视频显示用户将模糊的窗口拖出级联,然后窗口被绘得很好。似乎清除应用程序没有获得绘制消息,或者在选择窗口时忽略它)

该应用程序使用C ++和wxWidgets 2.9.4编写,并在Windows 7下运行

这似乎是一个wxWidgets 2.9问题。使用v2.8.12库构建时,用户报告它工作正常。

以下是创建窗口的代码。请注意,父级为NULL。 (这允许最小化主应用程序窗口,而不会最小化级联窗口 - 这是必需的功能。)

cNewDataPopup::cNewDataPopup(  cPatDataset& data )
    : wxDialog(NULL,-1,L"New data",wxPoint(200,200),wxSize(570,242),
        wxDEFAULT_DIALOG_STYLE|wxSTAY_ON_TOP )
    , myData( data )
{

2 个答案:

答案 0 :(得分:1)

经过一些实验,我发现将wxDIALOG_NO_PARENT添加到wxSTAY_ON_TOP'修复了这个问题。

(以下说明归功于VZ。)

显然,将窗口的父窗口指定为NULL不足以说服wxWidgets您不想要父窗口。无论如何,它会随机分配一个父母,或多或少。这就是为什么观察到奇怪,意外和不可再现的行为的原因。在v2.9.x中更改了分配父项的算法,这就是我升级wxWidgets时奇怪和意外行为发生变化的原因。为了说服wxWidgets,是的,我真的不希望窗口的父级,我必须指定一个NULL父级和wxDIALOG_NO_PARENT样式。

答案 1 :(得分:0)

使用wxSTAY_ON_TOP几乎肯定是罪魁祸首。如果您只需要让窗口保持在父窗口的顶部,请不要使用此样式,使用wxFRAME_TOOL_WINDOW或覆盖WM_SIZE处理,方法是覆盖父框架中的MSWWindowProc()。 / p>