0

リストビュー コントロールを持つ MFC を作成しています。ユーザーが任意の項目を右クリックすると、リストビューで選択されたテキストを含む動的メニュー項目が生成されます。すべてが正しく表示されていますが、動的メニュー項目にメッセージ マップを追加する方法がわかりません。

何か助けはありますか?

void CMyListDlg::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        // TODO: Add your control notification handler code here


        int nIndex = m_List.GetSelectionMark();
        CString pString = m_List.GetItemText(nIndex,1);
        CMenu menu, * pSubMenu;
        int pos=0;
        menu.LoadMenu(IDR_MENU1);
        pSubMenu = menu.GetSubMenu (0);
        pSubMenu->DeleteMenu(0,MF_BYPOSITION);
        pSubMenu->InsertMenu(pos,MF_BYPOSITION,NULL,pString);
            CPoint oPoint;
        GetCursorPos (& oPoint);
        pSubMenu-> TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this);






        *pResult = 0;
    }
4

3 に答える 3

3

現時点では、ID = 0 (NULL) のメニュー項目を挿入しています。そうすれば、どのコマンドが押されたかわかりません。アイテムに ID を割り当てる必要があります。最も簡単な方法は、

#define WM_MYMESSAGE WM_USER + 1

次に、次のように挿入します。

pSubMenu->InsertMenu(pos,MF_BYPOSITION,WM_MYMESSAGE,pString);

ウィンドウをオーバーライドOnCommandすると、ID が として取得されますwParam。何が起こったのかを実際に把握するには、追加情報を別のクラス メンバーに格納しm_nLastItemClickedます。

于 2009-12-22T18:48:00.473 に答える
2

MFCIE サンプルを確認してください。ユーザーのお気に入りのフォルダーからお気に入りのメニューが生成され、お気に入りのメニュー項目がクリックされると、お気に入りの URL に移動します。

于 2009-12-22T21:16:36.097 に答える
0

ON_COMMANDクラスにメニュー項目の ID のハンドラーを(ON_UPDATE_COMMAND_UI必要に応じて)追加するだけです。

于 2009-12-22T13:28:28.010 に答える