初めて書き込みます。VCは独学で勉強中で初心者です。
<やりたい事>
リストコントロール(レポート)のアイテム上で右クリックした時に
マウスカーソル位置にポップアップメニューを表示したい。
<不具合現象>
マウスカーソル位置でなく、アイテムの左端位置に表示されてしまう
<現状のプログラム>
void CLIST2Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
int selectItem;
POSITION po;
POINT point;
CMenu menu;
// 選択しているアイテムのインデックスの取得
po = m_List.GetFirstSelectedItemPosition();
selectItem = m_List.GetNextSelectedItem(po);
m_List.GetItemPosition(selectItem,&point);
ClientToScreen(&point); /* クライアント座標をスクリーン座標に変換 */
menu.LoadMenu(IDR_MENU1); /* IDR_MENU1はResourceViewで追加したメニュー */
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x,
point.y, this);
*pResult = 0;
}
<悪いところの予測>
右クリックした時のイベントからマウスカーソルの座標を取得して
TrackPopupMenu()の引数に渡す必要がある?と思っていますが、
マウスカーソル位置の取得方法がよくわかりません。
ヘルプ等参照していますが、特にNMHDRの辺りがよくわかりません。
どなたか分かりやすい解説等が書いてあるHP等ご教示頂けないでしょうか?
<環境>
WinXP,VC++6.0,MFC(Dailogベース)
宜しくお願いします。
GetCursorPos はどうでしょ。
西風さん、NEG(ねぐ)さん有難うございました。
教えてもらったURLには、やりたい事ズバリそのものが
載っていましたね。
LPNMLISTVIEW lpnmlv=(LPNMLISTVIEW)pNMHDR;
POINT pt=lpnmlv->ptAction;
この辺りが勉強不足であまり理解できていませんが、
とりあえずやりたい事はできたので、後々勉強していく
ことにします。
有難うございました。