通常、イベントハンドラを実装する際はウィンドウメッセージ(ここではWM_MOUSELEAVE)をオーバライドするだけで事足りるのですが、マウスポインタがウィンドウから離れる際の処理を追加する場合は TrackMouseEvent() により、明示的にメッセージをポストしなければなりません。
BOOL TrackMouseEvent( LPTRACKMOUSEEVENT lpEventTrack ); |
|
| 説明 | マウスポインタがウィンドウから離れる場合、またはウィンドウ上をホバリングして一定時間が経過した場合に、メッセージをポストする。 |
|---|---|
| 引数 |
|
| 戻り値 | 成功した場合はTRUE、失敗した場合はFALSEを返す。 |
ソースは次のようになります。
//== ソースファイル ==========================
BEGIN_MESSAGE_MAP(CHogeDlg, CDialogEx)
...
ON_WM_MOUSELEAVE()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
void CHogeDlg::OnMouseLeave()
{
// ここにウィンドウから離れた際の処理を追加する
CDialogEx::OnMouseLeave();
}
void CHogeDlg::OnMouseMove(UINT nFlags, CPoint point)
{
TRACKMOUSEEVENT trackmouseevent;
//==== マウスリーブイベントをポスト ====//
trackmouseevent.cbSize = sizeof(trackmouseevent);
trackmouseevent.dwFlags = TME_LEAVE;
trackmouseevent.hwndTrack = GetSafeHwnd();
trackmouseevent.dwHoverTime = HOVER_DEFAULT;
::TrackMouseEvent(&trackmouseevent);
CDialogEx::OnMouseMove(nFlags, point);
}