Last Updated 2002/11/15
Programming Tips Visual C++ MFC メニュー  索 引 
ポップアップメニューの表示座標がずれる
2002/11/15

右クリックでポップアップメニューを表示する場合に,マウスカーソルからずれて表示される場合がある.
これは右クリックのイベントにてその座標をそのまま渡しているからである.
void CSampleView::OnRButtonDown(UINT nFlags, CPoint point) 
{
    CMenu menu;
    VERIFY( menu.LoadMenu( IDR_RMOUSEPOPUP ));
    CMenu* popup = menu.GetSubMenu(0);
    ASSERT( popup != NULL );
    popup->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON,
                            point.x, point.y,
                            this);

    CView::OnRButtonDown(nFlags, point);
}
OnRButtonDown() に渡される point はクライアント座標である.
TrackPopupMenu() にはスクリーン座標を渡さなければならない.
(ClientToScreen() で変換可能)

もっともポップアップメニューはコンテキストメニューと言って,WM_CONTEXTMENU に反応するのがよい.
そうすればキーボードのアプリケーションキーにも対応できる.


参照
ポップアップメニューの表示
前後のTips
ポップアップメニューの表示座標がずれる

DSS ProgrammingTipsCGI Ver2.02