可靠地识别任何窗口的客户区域

时间:2014-07-14 14:24:25

标签: c++ winapi

我正在开发一个将复制的程序,然后扩展Aero Snap的功能。

如果用户“抓住”它的标题栏,Aero Snap会恢复最大化的窗口,而我在识别此操作时遇到困难。

给定屏幕坐标中的光标位置,我如何检查位置是否在窗口的标题栏内?我在Win32 API中并不是真正的家,并且无法找到适用于复杂场景的方法,例如:

example for a difficult title bar

请注意,chrome会在标题栏中插入标签。 Office使用快速启动菜单执行类似操作。

1 个答案:

答案 0 :(得分:1)

标题栏点击是通过消息"非客户"消息 - 即不是客户端(或内部)窗口的窗口区域。

WM_NCLBUTTONDOWN可能是您想要捕获的消息。

您也可能想要设置一个window hook来挂钩鼠标消息,如果它是您想要的NC消息,您可以按照自己的方式处理它,如果不是 - 将其传递给消息链。

编辑:如果Chrome正在使用DwmExtendFrameIntoClientArea调用来绘制标签,那么您将需要使用WM_NCHITTEST。