2016-02-11 41 views
1

我有一个表格,我已经删除标题栏,但保留边界(见this answer)。陷阱WM_NCHITTEST消息,但继续检查MouseEnter/- 离开

在上面的回答它的说,它是需要有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 
+0

为什么突然之间会一下子倒退?任何人都在关心精心制作还是仅仅是一个无所事事的人而已? –

+1

问题和答案都很有用。 –

回答

3

它仅仅是一个错误,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 
+0

非常感谢!我尝试了许多不同的解决方法,但没有取得任何成功。 –