Добрый день.
Вопрос вроде простой, а я что-то не могу уловить суть.
В ресурсах есть диалог для встройки на котором лежат только метка и кнопка. Далее этот диалог подгружается в TabCtrl:
BOOL Cmfc_testDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CDialog* pDialog = new CDialog;
CTabCtrl* parent = (CTabCtrl*)GetDlgItem( IDC_TAB1 );
pDialog->Create( IDD_DIALOG1, parent->GetWindow( IDD_DIALOG1 ) );
parent->InsertItem(0, _T("Page1"));
// ... тут считаются размеры диалога
crClient.OffsetRect(crTab.left, crTab.top);
pDialog->MoveWindow(&crClient);
pDialog->EnableWindow( TRUE );
pDialog->ShowWindow( SW_SHOW );
return TRUE; // return TRUE unless you set the focus to a control
}
сути и всё, но хочется обработать нажатие на кнопку, которая на диалоге IDD_DIALOG1, через редактор назначил обработчик, но он не срабатывает
BEGIN_MESSAGE_MAP(Cmfc_testDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &Cmfc_testDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
...
void Cmfc_testDlg::OnBnClickedButton1()
{
AfxMessageBox(_T("Cmfc_testDlg::OnBnClickedButton1()"));
}
С MFC давно не работал и чувствую, что какую-то мелочь упустил.
Заранее благодарю за ответы.
З.Ы. CPropertySheet не предлагать
Здравствуйте, Tujh, Вы писали:
T>Добрый день.
T>Вопрос вроде простой, а я что-то не могу уловить суть.
T>В ресурсах есть диалог для встройки на котором лежат только метка и кнопка. Далее этот диалог подгружается в TabCtrl:
T>BOOL Cmfc_testDlg::OnInitDialog()
T>{
T> CDialog::OnInitDialog();
T> CDialog* pDialog = new CDialog;
T> CTabCtrl* parent = (CTabCtrl*)GetDlgItem( IDC_TAB1 );
T> pDialog->Create( IDD_DIALOG1, parent->GetWindow( IDD_DIALOG1 ) );
T> parent->InsertItem(0, _T("Page1"));
T> // ... тут считаются размеры диалога
T> crClient.OffsetRect(crTab.left, crTab.top);
T> pDialog->MoveWindow(&crClient);
T> pDialog->EnableWindow( TRUE );
T> pDialog->ShowWindow( SW_SHOW );
T> return TRUE; // return TRUE unless you set the focus to a control
T>}
T>сути и всё, но хочется обработать нажатие на кнопку, которая на диалоге IDD_DIALOG1, через редактор назначил обработчик, но он не срабатывает
T>BEGIN_MESSAGE_MAP(Cmfc_testDlg, CDialog)
T> ON_WM_PAINT()
T> ON_WM_QUERYDRAGICON()
T> //}}AFX_MSG_MAP
T> ON_BN_CLICKED(IDC_BUTTON1, &Cmfc_testDlg::OnBnClickedButton1)
T>END_MESSAGE_MAP()
T>...
T>void Cmfc_testDlg::OnBnClickedButton1()
T>{
T> AfxMessageBox(_T("Cmfc_testDlg::OnBnClickedButton1()"));
T>}
T>
T>С MFC давно не работал и чувствую, что какую-то мелочь упустил.
T>Заранее благодарю за ответы.
T>З.Ы. CPropertySheet не предлагать
По ходу всё дело в этих строчках
CTabCtrl* parent = (CTabCtrl*)GetDlgItem( IDC_TAB1 );
pDialog->Create( IDD_DIALOG1, parent->GetWindow( IDD_DIALOG1 ) ); //то бишь родитель для дочернего диалога CTabCtrl
А в карте что написано?
BEGIN_MESSAGE_MAP(Cmfc_testDlg, CDialog)// карта-то ептытъ для диалога, а нотификации от кнопки пойдут в CTabCtrl, а не в его родительский диалог
T> ON_BN_CLICKED(IDC_BUTTON1, &Cmfc_testDlg::OnBnClickedButton1)
T>END_MESSAGE_MAP()
А пытаемся ловить нотификацию BN_CLICKED уже в диалоге верхнего уровня, на котором лежит CTabCtrl, а именно в CTabCtrl придет нотификацию, а не в диалог на котором CTabCtrl болтается.
Просто нужно создавать дочерний диалог, на самом диалоге. А CTabCtrl просто лежит рядом. Обычно так делают.
PS: я так дума-а-а-аю ©… Ну по крайней мере навскидку, судя по коду.