- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我的 C# .NET 4 应用程序中,我使用 WndProc
来处理一些消息,这些消息主要涉及将应用程序大小调整为全屏和从全屏调整。
现在我只是处理 SC_MAXIMIZE
和 WM_NCLBUTTONDBLCLK
以确定窗口的大小是否正在调整为最大化状态或从最大化状态调整(我知道我不需要 WndProc 来处理 SC_MAXIMIZE
,但当我双击应用程序的标题栏时,Form_Resize
似乎没有触发 WM_NCLBUTTONDBLCLK
消息。
现在我注意到,如果我将窗口通过 Aero Snap 捕捉到屏幕顶部以最大化它,则不会发布上述消息,因此当通过 Aero Snap 最大化窗口时不会应用某些逻辑。我只想在窗口贴靠到屏幕顶部而不是右侧或左侧,或者窗口从最大化位置取消贴靠时处理消息。
我找不到任何与 Aero Snap 相关的窗口消息。有谁知道这些消息的引用资料吗?
最佳答案
我猜这里没有任何特殊消息; Aero 可能只是使用普通的 Win32 API - ShowWindow(SW_MAXIMIZE)和类似的。
对于 SC_ 消息,需要理解的是,它们是来自菜单的请求,要求窗口自行调整大小/恢复等,但这并不是更改窗口大小的唯一机制。可能发生的情况是,当窗口获得 SC_MAXIMIZE 时,DefWndProc 通过调用 ShowWindow(SW_MAXIMIZE) 来实现这一点。
你最好的就是听WM_SIZE窗口接收到的消息,无论是什么触发了大小更改:系统菜单、API 或其他方式。特别是,lParam 会让您知道窗口是最大化 (SIZE_MAXIMIZED) 还是恢复 (SIZE_RESTORED)。
关于c# - 在 WndProc 中处理 AeroSnap 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9321549/
这应该是一个简单的问题,但 search-foo 却让我失望了。我的目标是检测我是否在 Aero(Vista 或 Windows 7)下运行,并让我的应用程序默认为 Aerosnap。 (事实证明,我
在我的 C# .NET 4 应用程序中,我使用 WndProc 来处理一些消息,这些消息主要涉及将应用程序大小调整为全屏和从全屏调整。 现在我只是处理 SC_MAXIMIZE 和 WM_NCLBUTT
我是一名优秀的程序员,十分优秀!