как добавить карту сообщений в динамический пункт меню в MFC - PullRequest
0 голосов
/ 22 декабря 2009

Я пишу 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;
    }

Ответы [ 3 ]

3 голосов
/ 22 декабря 2009

В данный момент вы вставляете пункт меню с ID = 0 (NULL). Таким образом, вы не можете понять, какая команда была нажата. Вы должны присвоить ID предмету, самый простой -

#define WM_MYMESSAGE WM_USER + 1

тогда вы вставляете это так:

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

Если вы переопределите OnCommand для своего окна, вы получите свой идентификатор как wParam. Чтобы действительно выяснить, что произошло, сохраните некоторую дополнительную информацию в другом ученике, например, m_nLastItemClicked или ... вы поняли?

2 голосов
/ 23 декабря 2009

Проверьте MFCIE sample , он генерирует любимое меню из любимой папки пользователя и перемещается по избранному URL-адресу при щелчке по избранному элементу меню.

0 голосов
/ 22 декабря 2009

Просто добавьте ON_COMMANDON_UPDATE_COMMAND_UI при необходимости) обработчики для идентификаторов пунктов меню в вашем классе.

...