捕获WM_NCHITTEST消息,但继续检查鼠标输入/-离开



我有一个表单,我删除了标题栏但保留了边框(请参阅此答案)。

在上面的答案中,它指出需要将FormBorderStyle设置为 SizableSizableToolWindow ,并且为了阻止表单变得很大,您将捕获WM_NCHITTEST事件。唯一的问题是这样做会使它不会引发正常的Form_MouseEnterForm_MouseLeave事件。

有什么解决方法吗?

我的代码:

Protected Overrides Sub WndProc(ByRef message As Message)
    If message.Msg = &H84 Then 'WM_NCHITTEST
        Me.Focus() 'Focus the form when it receives a click.
        Return
    End If
    MyBase.WndProc(message)
End Sub
Private Sub PanelForm_MouseLeave(sender As Object, e As System.EventArgs) Handles PanelForm.MouseLeave
    PlaceOnScreen(False) 'Placed a breakpoint here, it won't execute.
End Sub

这只是一个错误,WM_NCHITTEST的返回值现在是 0。 这意味着"鼠标无处可去"。 所以很多东西都停止工作,比如激活和聚焦窗口和 MouseEnter 事件。 您必须返回 1(又名 HTCLIENT),表示"它在客户区":

Protected Overrides Sub WndProc(ByRef message As Message)
    If message.Msg = &H84 Then 'WM_NCHITTEST
        message.Result = CType(1, IntPtr)
        Return
    End If
    MyBase.WndProc(message)
End Sub

相关内容

  • 没有找到相关文章

最新更新