現在、編集コントロール、特にOutlookクライアントの電子メールの件名をサブクラス化しようとしています。このコントロールはRichEdit20WPTクラスです。RichEdit20WPTウィンドウのwndProcメッセージに特別なものはありますか?
次のWINAPIメソッドを使用してwndProcを取得します。
<DllImport("ComCtl32.dll", CharSet:=CharSet.Auto)> _
Public Shared Function SetWindowSubclass(hWnd As IntPtr, newProc As Win32SubClassProc, uIdSubclass As IntPtr, dwRefData As IntPtr) As Integer
End Function
<DllImport("comctl32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Public Shared Function DefSubclassProc(ByVal hWnd As IntPtr, ByVal uMsg As IntPtr, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
End Function
Public Delegate Function Win32SubClassProc(hWnd As IntPtr, Msg As IntPtr, wParam As IntPtr, lParam As IntPtr, uIdSubclass As IntPtr, dwRefData As IntPtr) As Integer
そして、このようなwndProcがあります。
Private WM_CONTEXTMENU As IntPtr = &H7B
Private Function SubClassProc(hWnd As IntPtr, Msg As IntPtr, wParam As IntPtr, lParam As IntPtr, uIdSubclass As IntPtr, dwRefData As IntPtr) As Integer
Select Case Msg
Case WM_DESTROY
Case WM_NCDESTROY
Case WM_LBUTTONDOWN
Case WM_CONTEXTMENU 'NEVER HAPPENS
Case WM_RBUTTONDOWN
End Select
Return DefSubclassProc(hWnd, Msg, wParam, lParam)
End Function
LとRボタンを押し下げてメッセージを表示しますが、WM_CONTEXTMENUは表示されません。私の現在の意図は、WM_RBUTTONDOWNメッセージを使用している代わりに、メニュー項目をコンテキストメニューに追加することです。
このコントロールは特別であり、WM_CONTEXTMENUメッセージを表示しないことが知られていますか?
また、コンテキストメニューで何かを選択した後に発生するメッセージを見つけることも難しいです。私の理解では、コンテキストメニューでクリックされたメニュー項目のメッセージが親に与えられます。この場合、このRichEdit20WPTウィンドウです。これは正しいです?注:私は自分のコンテキストメニューを作成していないので、既存のコンテキストメニューに追加していますので、コンテキストメニューの所有者などを変更していません。
あなたは何か特別なことがあるでしょうか?これは標準のWindowsコントロールではありません。標準のリッチテキストボックスコントロールには、クラス名が「RichEdit20」です。 'WPT'サフィックスは、カスタム実装を示すためにOutlookチームによって追加されたものです。 –
私の前提は、マウスの右クリックメッセージの後にコンテキストメニューが現れることです。それがWM_CONTEXTMENUメッセージではないという事実以外は、この仮定は私にとっては大丈夫です。 – darbid
ウィンドウを作成したプロセスでコードが実行されますか? –