У меня есть CDialog, созданный мастером по имени CDialogParent, затем создать дочерний шаблон диалога IDD = IDD_CHILD_DLG1, в этом дочернем диалоге я положил одну кнопку IDC_BTN1 (Я не создаю обработчик класса для этого ребенка).
BOOL CDialogParent::OnInitDialog()
{
....
CDialog *pChild = new CDialog();
pChild->Create(IDD_CHILD_DLG1, this);
pChild->ShowWindow(SW_NORMAL);
}
Обычно мне нужно создать новый обработчик класса CDialogChild для ребенка и добавьте карту сообщений, например:
BEGIN_MESSAGE_MAP(CDialogChild, CDialog)
ON_BN_CLICKED(IDC_BTN1, &CDialogChild::OnBnClickedBtn1)
END_MESSAGE_MAP()
Проблема в том, что я хочу перехватить сообщение элемента управления IDC_BTN1 дочернего диалога НО объявить карту сообщений в CDialogParent как:
BEGIN_MESSAGE_MAP(CDialogParent, CDialog)
ON_BN_CLICKED(IDC_BTN1, &CDialogParent::OnBnClickedBtn1)
END_MESSAGE_MAP()
Как сделать это без создания нового обработчика класса?
Спасибо за помощь!
Короче говоря, вы не можете.
Есть две причины, почему это невозможно:
HWND
). Нет дополнительной информации о типе C ++. И тип, и указатель на объект требуются для вызова соответствующего члена класса в карте сообщений.Если вы хотите получать информацию о событии, вызванном в собственном диалоге, внедрите обработчик сообщений в классе собственного диалога и опубликуйте сообщение в собственном диалоге.
Других решений пока нет …