Уведомление родителей в MFC Dialog - PullRequest
2 голосов
/ 14 ноября 2008

У меня есть первый диалог с простой кнопкой на нем, и при нажатии на кнопку, второй диалог создается с помощью CDialog :: Create (IDD, this). Я хотел бы, чтобы родитель был уведомлен, когда второе диалоговое окно уничтожено, но без добавления какого-либо кода во второе диалоговое окно, т.е. без добавления строки m_pParent-> Notify () в методе OnDestroy. Я попытался OnParentNotify, PreTranslateMessage, SubclassWindow в родительском диалоге безуспешно. Я не использовал стиль WS_CHILD для второго диалога. Есть идеи?

Для завершения: на самом деле, у меня есть производный класс ComboBox (но проблема та же с кнопками), и я показываю немодальный диалог вместо отображения списка. Но я бы хотел, чтобы элемент управления был как можно более универсальным, чтобы можно было использовать любой немодальный диалог. Вот почему я не хочу добавлять конкретное уведомление во второй диалог. Если я обязан, я буду использовать этот трюк, но я попросил более общего решения. PreTranslateMessage только перехватывает WM_PAINT, WM_NCMOUSELEAVE и WM_NCMOUSEMOVE.

Ответы [ 3 ]

2 голосов
/ 15 ноября 2008

Используйте базовый класс, и пусть ваш родитель ссылается на немодального ребенка только по базовому классу. В базе PostNcDestroy есть сообщение для родителя.

Нет смысла заставлять родителя выполнять фильтрацию / слежку за всеми сообщениями. Имеет смысл реализовать поведение в базовом классе, который вы хотите иметь общим для всех различных будущих разновидностей немодального потомка.

1 голос
/ 14 ноября 2008

OnParentNotify () не вызывается, так как dialog2 не является потомком dialog1.

PreTranslateMessage () должен помочь здесь (хотя мне не нравится эта пуля). Хитрость в том, что немодальный диалог не разрушает себя, когда закрывается. Если вы хотите, чтобы диалог умер, он должен вызвать DestroyWindow () при закрытии, например, в переопределении OnCancel ().

Конечно, первое, что приходит в голову, это удивляться, почему вы не хотите добавлять пользовательские уведомления в свой немодальный диалоговый код.

РЕДАКТИРОВАТЬ: Другой метод заключается в установке ловушки сообщений (для текущей темы, а не для всей системы!). Это поможет вам перехватить все сообщения для всех окон, связанных с тем же потоком, что и dialog1. См. SetWindowsHookEx ()

0 голосов
/ 14 ноября 2008

Как насчет отправки события основной родительской формы в очередь сообщений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...