Рейтинг:
2
Leo Chapiro
Если ваше дочернее окно немодально, вы можете использовать указатель на свой диалог и использовать
#define UWM_CUSTOM (WM_APP+1)
// in parent
void CMFCApplicationTestDlg::OnBnClickedButCreatedlg()
{
CString str = _T("Test");
CChildDlg* pChildDlg = new CChildDlg(this);
pChildDlg->Create(IDD_DIALOG_CHILD, this);
pChildDlg->ShowWindow(SW_SHOW);
//pChildDlg->SendMessage(UWM_CUSTOM, (WPARAM)&str, 0);
// Better
pChildDlg->PostMessage(UWM_CUSTOM, (WPARAM)&str, 0);
}
Если ваше дочернее окно является модальным, вы не можете этого сделать, потому что после
DoModal()
возвращает, Диалог уже будет уничтожен.
Member 14594285
что такое pChildDlg?
Member 14594285
во всяком случае, я использовал ShowWindow(true), чтобы показать дочерний диалог
KarstenK
pChildDlg-это указатель на дочерний диалог. Вам лучше использовать PostMessage, чтобы не блокировать внутреннюю очередь сообщений, которая может привести к блокировке приложения.
Member 14594285
поэтому я должен писать.
MyDlg * pChildDlg = новый pChildDlg;
pChildDlg->SendMessage(UWM_CUSTOM, (WPARAM)&str, 0);
Leo Chapiro
Да, лучше, как сказал Карстен, использовать почтовое сообщение.
Member 14594285
Я пытался, но это не работает, у моего родительского диалога есть кнопка, которая при нажатии открывает дочерний диалог, я пытался, как вы написали, но это не работает
Member 14594285
Я написал::
MyDlg2 * pChild = новый MyDlg2;
pChild->SendMessage(UWM_CUSTOM, (WPARAM)&stra, 0);
но когда я делаю отладку возникает ошибка
Leo Chapiro
Я обновил, взгляните (выше).
Member 14594285
Это не работает
Я написал в Родительском диалоге:
CString str = _T("тест");
MyDlg2* pChildDlg = новый MyDlg2(это);
pChildDlg->Create(IDCANCEL, this);
pChildDlg->ShowWindow(SW_SHOW);
//pChildDlg->SendMessage(UWM_CUSTOM, (WPARAM)&str, 0);
// Лучше
pChildDlg->PostMessage(UWM_CUSTOM, (WPARAM)&str, 0);
//dlg.DoModal();// TODO: добавьте свой код обработчика уведомлений управления здесь
в дочернем диалоге:
BEGIN_MESSAGE_MAP(MyDlg2, CDialogEx)
ON_BN_CLICKED(IDC_BUTT_DIALOG, &MyDlg2::OnBnClickedButtDialog)
ON_MESSAGE(UWM_CUSTOM, OnCustoma)
END_MESSAGE_MAP()
и:
LRESULT MyDlg2::OnCustoma(WPARAM wparam, LPARAM lparam)
{
CString* pstr = (CString*)wparam;
//тесто.SetWindowText(*pstr);
m_text.SetWindowText(*pstr);
возвращает 0;
}
но это не работает
Member 14594285
У меня уже есть свой диалог, он статичен, идентификатор моего дочернего диалога-IDCANCEL