リスト コントロールを含むモーダル ダイアログがあります。リスト コントロール内の項目の 1 つを右クリックすると、コンテンツ メニューが表示されます。このポップアップ メニューをクリックすると、別のリスト コントロールを含む別のモーダル ダイアログが開きます。
私の問題は、2 番目のダイアログでリスト コントロールの右クリック コンテンツ メニューを表示できないことです。
私は試した:
void CMyListCtrl::OnContextMenu(CWnd* , CPoint point)
{
if (GetSelectedCount() == 0)
return ;
if (point.x == -1 && point.y == -1)
{
//keystroke invocation
CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
point = rect.TopLeft();
point.Offset(5, 5);
}
CMenu menu;
VERIFY(menu.LoadMenu(IDR_HISTORY_MENU));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CWnd* pWndPopupOwner = this->GetParent();
SetForegroundWindow();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x,
point.y,
pWndPopupOwner);
}
また、親ダイアログ ON_WM_INITMENUPOPUP にも追加しました
また、その場でポップアップメニューを作成しようとしました
void CHistoryListCtrl::OnContextMenu(CWnd* , CPoint point)
{
if (GetSelectedCount() == 0)
return ;
if (point.x == -1 && point.y == -1)
{
//keystroke invocation
CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
point = rect.TopLeft();
point.Offset(5, 5);
}
CMenu addMenu;
addMenu.CreatePopupMenu();
// add all possible interface items
CString mstr; mstr="Compare";
addMenu.AppendMenu(MF_ENABLED | MF_STRING,ID_HISTORY_COMPARE , (LPCTSTR)mstr);
addMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,point.x,point.y,this,NULL);
addMenu.DestroyMenu();
}
それもうまくいきませんでした。TrackPopupMenu を呼び出す前に SetForgroundWindow を追加しようとしましたが、これも失敗しました。
どうすればいいですか?