【发布时间】:2012-12-12 16:17:14
【问题描述】:
好的。就在您认为自己已经完全弄清楚的时候,您还没有。
我已经编写并测试了一个功能性的 appbar 类。当我使用一个简单的 Windows 窗体来扩展和测试该类时,它在 XP(SP 3、32 位)和 Windows 7(64 位)中都可以正常工作。其他窗口是可访问的,并且它们都适当地最大化。然而,当我使用我的“复杂”Windows 窗体(即它是一个应用程序)并从 appbar 类派生它时,桌面似乎将它“踢”了出来。我的意思是,一切最初的大小都合适,但随后桌面将自身调整回原来的大小。有时这在将表单置于 appbar 模式后会很快发生,有时会在我单击表单外部时发生(例如打开浏览器),有时会在表单调用 MessageBox 时发生。我已将所有表单功能放在后台工作人员中,认为这可能是问题,但结果是一样的。我在下面发布了三张图片。第一个将应用程序显示为其初始 WinForm。第二个显示应用栏“正在运行”。最后一个显示应用栏没有“运行”。如果您在看到问题时遇到问题,请注意回收站。有什么想法吗?
编辑: 我通过日志记录找到了这些调用。每次桌面调整为“正常”时,它们似乎都会触发。现在我正在尝试查看“简单”版本中是否存在类似的模式。
- msg=0x6 (WM_ACTIVATE) hwnd=0x1e03ea wparam=0x0 lparam=0x0 结果=0x0
- msg=0x1c (WM_ACTIVATEAPP) hwnd=0x1e03ea wparam=0x0 lparam=0x1a90 结果=0x0
- msg=0x1a (WM_WININICHANGE) hwnd=0x1e03ea wparam=0x2f lparam=0x9fe048 结果=0x0
- msg=0x1a (WM_WININICHANGE) hwnd=0x1e03ea wparam=0x18 lparam=0x9fe038 结果=0x0
【问题讨论】:
-
参考上面的四条消息,我将其缩小到最后两条。在简单的形式中,这些仅在应用栏未停靠时触发。大约四个小时前能找到这些就好了,哈哈。
-
这变得更加混乱了。仅供参考,这是层次结构:Form -> AppBar -> Application。这在工作和非工作版本中都是相同的。我注意到在工作版本中,WININICHANGE 从不显示,因为 appbarHandle 变量等于调用的 hWnd 参数。但是,在非功能版本中,情况并非如此。在这里,应用程序句柄是正在发送的内容。唉,我通过将 appbarHandle 变量设置为受保护的内部(相对于私有)并在 Application 构造函数中分配它来纠正这个问题,但问题仍然存在。嗯。仍在搜索...
-
在旁注中,如果您要将此标记下来,请告诉我原因。我在这里相当新,所以这些信息将是建设性的。谢谢。
-
这是我发现的。 Application 最初派生自 Form(因为 AppBar 类仍在编写中)。更改基类后,Application.Designer.cs 中的某些内容显然不喜欢这种更改。我创建了一个新的“应用程序”来测试这个理论,它可以正常工作。不确定是什么导致派生类和基类具有单独的句柄,但这似乎已经解决了。