Стартовая заготовка приложения Win32
Если вы знакомы со структурой приложения Win32, то можете безболезненно пропустить несколько параграфов и перейти к параграфу с заголовком "Развитие начальной заготовки".
Рассмотрим более подробно структуру традиционного Windows-приложения, представленную нам мастером Win32 Application Wizard Studio .NET. Программа спроектирована как шаблон (стартовая заготовка), который можно развивать, внося в него желаемую разработчиком функциональность.
Создайте новый проект приложения Win32. Для этого:
- В меню File › New выберите команду Project.
- В появившемся диалоге New Project, в окне Project Type раскройте узел дерева под именем Visual C++ Projects и выберите узел Win32 Projects.
- В окне Templates выберите тип проекта Win32 Project.
- В окне Name задайте имя проекта: API. В окне Location задайте или оставьте без изменения местоположений новой папки с файлами решения (solution).
- Нажмите ОК и проанализируйте предлагаемые по умолчанию мастером Win32 Application Wizard настройки проекта.
- Нажмите кнопку Finish.
Запустите стартовую заготовку и убедитесь, что она создает окно с планкой меню и реагирует на shortcut-комбинацию ALT +? или ALT + /, создавая диалог About. Раскройте дерево в окне Class View студии и щелкните два раза имя глобальной переменной hlnst. Курсор переходит в окно редактора, где вы видите заготовку традиционного приложения Win32. Надо отметить, что она богаче оснащена, чем аналогичные заготовки предыдущих версий Visual C++. Кроме пяти функций здесь содержатся ресурсы (меню, диалог, значок, строки текста, и клавиатурный ускоритель). Вы можете убедиться в этом, раскрыв дерево ресурсов в окне Resource View, которое входит в блок страниц вместе с окном Class View.
Анализ и развитие этой заготовки мы произведем немного позже, а сейчас приведем листинг, который создал мастер Win32 Application Wizard.
// API.cpp: Определяет точку входа приложения // #include "stdafx.h" #include "API.h" #define MAX_LOADSTRING 100 //======== Глобальные переменные: HINSTANCE hlnst; // Текущий экземпляр TCHAR szTitle[MAX_LOADSTRING]; // Текст заголовка окна TCHAR szWindowClass[MAX_LOADSTRING]; // Текст регистрации //======== Прототипы функций, входящих в данный модуль ATOM MyRegisterClass(HINSTANCE hlnstance); BOOL Initlnstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); int APIENTRY WinMain(HINSTANCE hlnstance, HINSTANCE hPrevInstance, LPSTR IpCmdLine, int nCmdShow) { //======= TODO: Помещайте код здесь MSG msg; HACCEL hAccelTable; //======= Инициализация глобальных строк текста LoadString(hlnstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hlnstance, IDC_API, szWindowClass, MAX_LOADSTRING); //======= Вызов функции регистрации приложения MyRegisterClass(hlnstance); //======= Инициализация приложения: if (!Initlnstance (hlnstance, nCmdShow)) { return FALSE; } //======= Загрузка клавиатурных ускорителей hAccelTable = LoadAccelerators (hlnstance, (LPCTSTR)IDC_API); //======= Цикл ожидания и обработки сообщений: while (GetMessage(&msg, NULL, 0, 0)) if (!TranslateAccelerator(msg.hwnd, hAccelTable, Smsg)) { TranslateMessage(Smsg); DispatchMessage(Srasg); } } return msg.wParam; }