Visual Studio 6で記述されたMFCアプリがあり、それにいくつかの新しい機能を追加しています。私ができるようにしたいのは、ユーザーがプロパティページ内のリストコントロールのヘッダー列を右クリックしたときにコンテキストメニューを表示することです。クラスウィザードを表示するCListCtrlクラスが追加されました。
プロパティページのClassWizardを介して、listctrlを右クリックするためのハンドラーを追加しました。これは呼び出され、次のコードを追加して、rclickがヘッダーセクション上にあるかどうか、またある場合はどのヘッダーアイテム上にあるかを調べます。このような
POINT Point;
GetCursorPos (&Point);
ScreenToClient(&Point);
HDHITTESTINFO HitTest;
//Offset of right scrolling
HitTest.pt.x = Point.x+ m_ctrlRecordList.GetScrollPos(SB_HORZ); //Offset of right scrolling
HitTest.pt.y = Point.y;
//Send the Hit Test Message
m_ctrlRecordList.GetHeaderCtrl()->SendMessage(HDM_HITTEST,0,(LPARAM)&HitTest);
// Check hit test result.
*pResult = 0;
ただし、ヒットテストは常に-1を返します。
プロパティページのヘッダーコントロールのHDN_ItemClickメッセージを処理して、代わりに左クリックで試してみました。これはすべてClassWizardで行われるため、ここでこの通知を処理できると期待していました。ただし、これまでに調査したところ、MFCにバグがあり、ClassWizardがこのコードをコードに挿入している可能性がありますが、この通知はリストコントロールの親までは届きません。これは本当ですか?
これを行うための最良の方法は何でしょうか?私は右クリックを好みますが、必要に応じて左クリックでもかまいません。