Шаг 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()); // показать полный путь 
	}
}

Все должно работать. Добавим на диалог нашу кнопку.

96_1.gif (5310 b)

И попробуем привязать к ней событие. Вот тут-то и начнется. Первое, почему-то ClassWizard забудет о нашей связи.

96_2.gif (9482 b)

Мы скажем, что будем выбирать (Select an existing class) и выберем все-таки наш класс.

96_3.gif (7916 b)

Еще одна глупая табличка:

96_4.gif (8555 b)

И все готово. Можно связывать.

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()

А вот теперь все нормально, как в некоторой пословице. И кнопка нажимается:

96_5.gif (7673 b)

И файл выбирается.

96_6.gif (4302 b)

Конечно странное поведение ClassWizard, но что поделаешь.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 14.07.2002