フォームをマウスクリックでアクティブ化しない
スクリーンキーボードを実現するためには,まず,スクリーンキーボードをクリックしてもフォアグラウンドウィンドウが変わらないようにしなければなりません。そのためにスクリーンキーボードのフォームやボタンをマウスでクリックしてもそれがアクティブにならないようにする必要があります。
Me.SetStyle(ControlStyles.Selectable, False)は効果がない。
フォームのWndProcメソッドをオーバーライドしてWM_MOUSEACTIVATEに対してMA_NOACTIVATEを返す。(この場合タイトルバーをマウスクリックするとアクティブになる。またタイトルバーのボタンは有効。)
MA_NOACTIVATEANDEATを返した場合にはタイトルバーやそのボタンも無効になる。(ボタンは機能しない。ウィンドウのドラッグもできない。)
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.TopMost = True
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Const WM_MOUSEACTIVATE = &H21
Const MA_NOACTIVATE = 3
Const MA_NOACTIVATEANDEAT = 4
If m.Msg = WM_MOUSEACTIVATE Then
m.Result = New IntPtr(MA_NOACTIVATE)
Return
End If
MyBase.WndProc(m)
End Sub
End Class
| 固定リンク
この記事へのコメントは終了しました。
コメント
クロスプラットフォームのVB.netアプリケーションを作りたいんだけど、このオーバーライドの方法はwindowsOSでしか使えないか教えて欲しい
投稿: HY | 2017年12月29日 (金) 19時19分