0

リスト コントロールを含むモーダル ダイアログがあります。リスト コントロール内の項目の 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 を追加しようとしましたが、これも失敗しました。

どうすればいいですか?

4

0 に答える 0