c# - Windows 窗体 Appbar 桌面调整大小

标签 c# winforms winapi

好的。就在您认为自己已经弄明白的时候,您还没有。

我编写并测试了一个功能性应用栏类。当我使用一个简单的 Windows 窗体来扩展和测试该类时,它在 XP(SP 3、32 位)和 Windows 7(64 位)中都没有问题。其他窗口是可访问的,并且它们都适本地最大化。然而,当我使用我的“复杂”Windows 窗体(即它是一个应用程序)并从 appbar 类派生它时,桌面似乎将它“踢”了出去。我的意思是,最初所有内容的大小都合适,但随后桌面会自行调整大小,恢复到原来的大小。有时,在将表单置于应用栏模式后,这种情况会很快发生,有时会在我单击表单外部(例如打开浏览器)时发生,有时会在表单调用 MessageBox 时发生。我已将所有表单功能放在后台工作人员中,认为这可能是问题所在,但结果是一样的。我在下面贴了三张图片。第一个将应用程序显示为其初始 WinForm。第二个显示应用栏“正在运行”。最后一个显示应用栏没有“运行”。如果您在查看问题时遇到问题,请注意回收站。有什么想法吗?

enter image description here enter image description here enter image description here

编辑: 我通过日志记录找到了这些电话。每次桌面调整为“正常”时,它们似乎都会启动。现在,我正在尝试查看“简单”版本中是否存在类似模式。

  • 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

最佳答案

所以这是一场徒劳的追逐。如果我最后的评论听起来很荒谬,那确实是。虽然我仍然不能 100% 确定这个理论(请有人在闲暇时证明/反驳),但两个不同的句柄来自 (1) 窗体的实例化和 (2) 加载窗体时的实际句柄。我假设 API 遵循与 QUERY_POS 和 SET_POS 相同的概念,即它最初检查并分配一个有效句柄。然后,在显示表单之前,它会仔细检查句柄值。

长话短说,在 Load 事件中验证句柄值的一行代码解决了整个问题。

编辑: 更好的是,HandleCreated 事件是不可替代的。

关于c# - Windows 窗体 Appbar 桌面调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13843988/

相关文章:

c# - 在 ASP.NET 中更新 Dictionary<T,U> 的静态方法 - 在字典本身上锁定()是否安全?

c# - 在 Windows Phone 中解析 XML 文件

c# - 没有得到正确答案的值(value)

c# - 从 Excel 单元格读取十进制值(在 C# 中)

winforms - Windows 窗体解析问题

c# - 等待延迟破坏打字机效果 c#?

c# - 如何在 winform C# 中控制图表的缩放能力?

python - 如何使用 python 和 win32 api 将彩色文本写入文本框?

vba - NOT的奇怪行为

c++ - 如何使用 C++ 迭代器调用 Win32 API 函数 `WriteFile()`?