В прошлом шаге мы сделали так, чтобы показывался наш диалог. Давайте проверим, что он вообще работает.
void CTestSDlg::OnButton1() { CMyOpenDialog cm(TRUE,NULL,"*.*"); cm.m_ofn.lpTemplateName = MAKEINTRESOURCE(ID_MYOPEN); cm.m_ofn.hInstance = AfxGetInstanceHandle(); cm.m_ofn.Flags &= ~OFN_EXPLORER; int result = cm.DoModal(); if (result==IDOK) { AfxMessageBox(cm.GetPathName()); // показать полный путь } }
Все должно работать. Добавим на диалог нашу кнопку.
И попробуем привязать к ней событие. Вот тут-то и начнется. Первое, почему-то ClassWizard забудет о нашей связи.
Мы скажем, что будем выбирать (Select an existing class) и выберем все-таки наш класс.
Еще одна глупая табличка:
И все готово. Можно связывать.
void CMyOpenDialog::On1038() { AfxMessageBox("Test"); }
Но работать не будет. В таблице сообщений вот что написано:
BEGIN_MESSAGE_MAP(CMyOpenDialog, CFileDialog) //{{AFX_MSG_MAP(CMyOpenDialog) ON_BN_CLICKED(1038, On1038) //}}AFX_MSG_MAP END_MESSAGE_MAP()
Нам эту цифру нужно заменить на идентификатор кнопки:
BEGIN_MESSAGE_MAP(CMyOpenDialog, CFileDialog) //{{AFX_MSG_MAP(CMyOpenDialog) ON_BN_CLICKED(IDC_BUTTON1, On1038) //}}AFX_MSG_MAP END_MESSAGE_MAP()
А вот теперь все нормально, как в некоторой пословице. И кнопка нажимается:
И файл выбирается.
Конечно странное поведение ClassWizard, но что поделаешь.