5

我们有一个在 XP64 和 Vista64 多显示器工作站上运行的应用程序,当应用程序中的单个表单移动到某些显示器时,会出现一个奇怪的问题。

如果将表单移动到主监视器左侧和上方的监视器(它在“显示设置”对话框中具有负坐标),则用户将光标放在表单中时会得到一个对角线调整大小的光标(我只见过它发生在光标位于窗口的镶边时,但用户报告它发生在整个窗口内)。

我能够确定它仅在光标位于主监视器上方时发生(使辅助监视器仅部分位于主监视器上方导致问题仅发生在主监视器上方的表单部分中)。

这只发生在我们整个应用程序中的一个表单上,这个表单并没有做任何特别花哨的事情(不覆盖 WndProc 等),并且所有使用的自定义控件也用于其他不显示此问题的表单.

什么会导致对角线调整大小光标一直显示?

4

2 回答 2

6

这似乎是 Form.WmNCHitTest 中的一个错误。我相信它确定 x 和 y 坐标的方式是不正确的(要获得它所做的 y HIWORD((int)((long)lParam)),文档说要使用GET_Y_LPARAM的定义为((int)(short)HIWORD(lParam)))。

如果您打开了尺寸夹点,它仅使用此方法。关闭尺寸夹点会绕过此代码并使表单正常工作。

于 2009-10-01T16:46:35.407 回答
-1

附加信息:我发现将 Form.SizeGripStyle 设置设置为 Show 时,光标变为对角调整大小光标的奇怪行为,看起来和工作起来就像您从右下角调整窗口大小一样,当表单窗口移动到辅助监视器。当将 Form.SizeGripStyle 设置为 Auto(默认值)时,此问题会消失,并且表单窗口光标和调整大小可以正常工作(正确的光标等)。

于 2014-04-25T16:20:26.267 回答