Консультация № 145421
29.09.2008, 15:25
0.00 руб.
0 1 1
Добрый вечер господа.
Возникли несколько вопросов,помогите пожалуйста найти ответ:
1)Для чего предназначен AppWizard?
2)Что такое Workspace Viewer? Для чего он предназначен? Какие он содержит вкладки?
3)В чем отличие программирования для Windows от программирования для DOS?
4)Что делает функция WinMain?
5)Что делает оконная процедура?
6)Каковы три основные части функции WinMain?
7)Что происходит, если Вы не обрабатывете явно сообщение внутри оконной процедуры?

Обсуждение

Неизвестный
29.09.2008, 17:57
общий
это ответ
Здравствуйте, Иванов Роман Александрович!

1) AppWizard - это мастер, создающий файлы программы по шаблону. Вы можете посмотреть на него в действии если попытаетесь создать новый проект. Кроме всего прочего в диалоге создания нового проекта можно обнаружить и шаблон для создания собственного AppWizard-а. Если вы его создадите, его можно будет выбирать из списка при создании нового проекта. Применяется это обычно при создании SDK к коммерческим проектам, часто в состав такого SDK входит AppWizard или хотя бы один проект-пример (всё это про MSVC++)

3) Программирование под Windows отличается в основном отсутствием 21h прерывания (и ему подобных) и наличием API функций. И ещё Windows работает в многозадачном режиме, но это ,в основном, важно для тех, кто пишет программные осциллографы и подобные вещи. Система в любой момент может приостановить выполнение вашего кода и переключиться на что-нибудь другое. Правда, она предпочитает это делать во время выполнения функции Sleep. В каждом длинном, а тем более бесконечном, цикле должен иногда быть вызов Sleep, иначе система всё время выполнения этого цикла будет считать ваше приложение зависшим. Всё остальное - технические различия. И не забывайте освобождать память и хэндлы, в Windows их блокирование чревато последствиями.

4) WinMain - то же,что и main в досе. Во всех win-программах есть dos-раздел кода, который пишет "This program cannot be run in dos mode" или что-то вроде этого. По этой причине пользуйтесь WinMain.

5) Обычно в WinMain располагается такой код (но не только он):

while (GetMessage(&msg, NULL, 0, 0)) //Пока к приложению не пришло сообщение WM_CLOSE
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) //Транслируем комбинации клавиш в нажатия кнопок (F1 в нажатие на кнопку help и т.п.)
{
TranslateMessage(&msg); //Разбор сообщения
DispatchMessage(&msg); //Находит оконную процедуру и вызывает её с параметром, соответствующим сообщению.
}
}
соответственно, в оконной процедуре все сообщения должны быть обработаны или переданы стандартному обработчику. Вызов стандартного обработчика в MFC:

DefWindowProc(hWnd, message, wParam, lParam);

6) Странный вопрос. Как захотите - так и будет.
7) Если сообщение не обработано, но передано в стандартный обработчик - система сама с ним разберётся и обеспечит минимальную функциональность. Если сообщение не обработано совсем - приложение его проигнорирует. Тоесть, если ваше приложение будет игнорировать WM_CLOSE - его можно будет закрыть только с помощью CTRL+ALT+DEL

Предупреждение! Это всё я написал на тот случай, если вы хотите сами разобраться в механизмах работы MFC и Win приложений!
Форма ответа