![]() |
![]() |
|
![]() |
||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||
|
![]() |
|
![]() |
|
||||||||||||||
![]() |
![]() |
![]() |
Шаг 96 - Свое поведение к стандартному диалогу некоторые тонкостиВ прошлом шаге мы сделали так, чтобы показывался наш диалог. Давайте проверим, что он вообще работает. 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, но что поделаешь. | | Автор Каев Артем. |
![]() |
![]() |
![]() |
|