как получить сообщение selchange от всплывающего окна владельца списка рисования в MFC

#c #winapi #visual-c #mfc

#c #winapi #visual-c #mfc

Вопрос:

Я пытаюсь создать свою собственную сетку свойств. Я создал список рисования владельца. когда мы нажимаем на диалоговое окно, оно всплывает.

но не получаю сообщение, когда я нажимаю на список. как его получить?

Я пытаюсь использовать эту функцию, но не получаю никакого триггера здесь, когда мы нажимаем на любой элемент в Listbox.

 BEGIN_MESSAGE_MAP(x_ListBox, CListBox)
    ON_CONTROL_REFLECT(LBN_SELCHANGE, amp;x_ListBox::OnLbnSelchange)
END_MESSAGE_MAP()

    void x_ListBox::OnLbnSelchange()
    {
        try
        {
            auto selIdx = GetCurSel();
            ReleaseCapture();
            GetParent()->DestroyWindow();
        }
        catch (CException* p)
        {
            p->Delete();
        }
    }
  

Мне нужно отправить сообщение в текущий выбранный элемент диалогового окна. есть ли какой-либо способ получить сообщение из диалогового окна, когда мы выбираем элемент в списке. как со списком в диалоговом окне m_com.GetLbText(xxx);

Комментарии:

1. Я думаю, вам нужно ON_NOTIFY_REFLECT вместо ON_CONTROL_REFLECT

2. он используется в CListCtrl, я не нашел ни одного примера использования CListBox. и я проверяю learn.microsoft.com/en-us/cpp/mfc /… также он выдает ON_NOTIFY_REFLECT( wNotifyCode , memberFxn ) afx_msg void memberFxn ( NMHDR * pNotifyStruct , LRESULT* result ); не знаю, как использовать в CListBox.

3. Ну, для начала, ваш OnLbnSelchange метод объявлен неверным. В соответствии с тем же документом, на который вы ссылались, он должен быть объявлен как void x_ListBox::OnLbnSelchange(NMHDR* pNotifyStruct, LRESULT* result) вместо.

4. В большинстве случаев вы можете использовать classwizard и т. Д. добавить обработчики, и он создаст метод с правильными параметрами.

5. я меняю его, как вы сказали, и в MessageMap также меняю его, по-прежнему не получая никаких сообщений в функции. на карте сообщений // ON_CONTROL_REFLECT(LBN_SELCHANGE, amp;x_ListBox::OnLbnSelchange) ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, amp;x_ListBox::OnLbnSelchange) в функции void x_ListBox::OnLbnSelchange(NMHDR * pNotifyStruct, LRESULT * результат)