Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Начал изучение MFC


Автор: Cardholder 3.4.2004, 11:31
Изучив C++, приступил к изучению библиотеки MFC. Столкнулся с тем, что ни один учебник, который Я бы не открыл, не смог толком объяснить мне основы MFC.
Вот, к примеру, помогите создать простое "Окно сообщений". С чего начинать? (Я работаю под VC.Net).
У меня есть для этого функция:
int AfxMessageBox(LPCTSTR lpszText, UINT nType=MB_OK, UINT nIDHelp=0);
Далее её вызов: AfxMessageBox("Используемые константы: MB_ABORTRETRYIGNORE|MB_ICONHAND|MB_DEFBUTTON2", MB_ABORTRETRYIGNORE|MB_ICONHAND|MB_DEFBUTTON2);

Теперь, какие должны быть включены заголовочные файлы?
Будут ли они из библиотеки, или же мне самому создавать их?
В общем, пожалуйста, помогите кто-нить с созданием окна сообщения, описывая поэтапно сей процесс.

Если есть добрые люди с ссылками на хорошие учебники по MFC, где все начинается с нуля, то поделитесь с заблудшим программером.
Спасибо, Друзья!

Автор: mr.DUDA 3.4.2004, 12:07
AfxMessageBox ничем не отличается от функции MessageBox из WinAPI, разве что только наличием параметров по умолчанию, и отсутствием возможности задать заголовок для окна сообщения (т.е. window caption).

Первый аргумент функции AfxMessageBox - строка текста (lpszText), которая будет выведена в окне сообщения. Второй аргумент (nType) - это комбинация флагов (или проще - стилей и настроек), применяемая для создания окна сообщения (окно и то же сообщений может быть создано с различными настройками). Третий параметр (nIDHelp) - это необязательный идентификатор контекстной справки, вызываемой (если он задан) по нажатию кнопки клавиши F1.

Настройки/стили окна комбинируются между собой оператором двоичного сложения "|", и позволяют:
1) настроить количество кнопок под текстом сообщения и их текст ("Ок", "Да", "Нет", "Отмена", "Повтор", "Прервать", "Игнорировать"), можно использовать одно из следующих значений (смысл каждого понятен из названия): MB_OK, MB_OKCANCEL, MB_YESNO, MB_YESNOCANCEL, MB_RETRYCANCEL и другие
2) настроить тип иконки (вопросительный/восклицательный знак, знак "?" и другие), отображаемой слева от текста сообщения: MB_ICONEXCLAMATION, MB_ICONINFORMATION, MB_ICONQUESTION, MB_ICONSTOP. В зависимости от этой настройки, будет также выдаваться один из типов стандартных звуков Windows при отображении окна
3) выбрать одну из кнопок текущей при отображении окна: MB_DEFBUTTON1...MB_DEFBUTTON4
4) настроить, как будет вести себя окно по отношению к остальным окнам приложения - родительскому и остальным (для AfxMessageBox родительским окном является то окно, в котором произошёл вызов этой функции): MB_APPLMODAL, MB_SYSTEMMODAL, MB_TASKMODAL

Для "повседневного" использования обычно достаточно флагов MB_OK/MB_OKCANCEL или MB_YESNO/MB_YESNOCANCEL и указания типа иконки.

Пример вызова AfxMessageBox:
Код
AfxMessageBox("Продолжить ?", MB_YESNO|MB_ICONSTOP);


Кроме того, чтобы обработать результат, остающийся после закрытия окна сообщения (в приведённом примере пользователь мог нажать как кнопку "Да", так и кнопку "Нет" - надо же как-то это обработать!), функция AfxMessageBox и её аналоги (MessageBox из WinAPI и из класса CWnd) возвращают int, равный одному из следующий значений: IDOK, IDYES, IDNO, IDCANCEL, IDABORT, IDRETRY, IDIGNORE.

Теперь о заголовочных файлах. В случае, если проект был создан средствами AppWizard и поддерживает MFC (это может быть проект на основе диалогового окна, SDI/MDI окна или вообще консольное приложение с поддержкой MFC), то никаких дополнительных заголовочных файлов не нужно для использования AfxMessageBox. В противном случае (когда проект представляет собой "чистое" приложение WinAPI), можно с таким же успехом пользоваться "обычной" функцией MessageBox.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)