Код основного модуля Main.cpp приведен в листинге 10.1.
Листинг 10.1
finclude <windows.h> //Main.cpp - главная функция WinMainO #include "Main.h"
int АРI ENTRY WinMain (HINSTANCE KodPril.HINSTANCE.LPSTR.int Oknlcon) {
HWND hWnd: MSG msg; PrelnitWndO;
if (!(hWnd=InitApp(KodPril))) return 1; if (int i-PostInitWnd(hWnd))return i; while (GetMessageC (LPMSG) &msg. NULL. 0. 0) ) {
TransiateMessage(&msg); DispatchMessageC (LPMSG) &msg ); }
Finish(hWnd); return msg.message; }
Уже рассмотренная ранее функция создания окна I ni tАрр (HI NSTANCЕ ) располагается в файле InitWnd.cpp. Возвращаемый ею дескриптор окна hWnd объявлен как локальная переменная. При необходимости его значение можно переписать в глобальную переменную при помощи функции Post I n i tWnd ( hWnd ).
Функции PrelnitWnd( ) и PostlnitWnd(hWnd) предназначены для инициализации приложения. Они выполняют действия, которые необходимо произвести до или после создания окна. По окончании работы приложения вызывается функция Finish(hWnd). Она выполняет все действия, необходимые для корректного завершения работы приложения. В этой функции можно уничтожить таймер, закрыть использованные файлы или освободить динамическую память.
Скелетный проект
Рассмотренные функции располагаются в файле InitClean.cpp и контролируют работу приложения с динамически распределяемой памятью. При старте состояние блока памяти фиксируется, а при завершении приложения пользователь извещается, если запрошенная память была освобождена не полностью. Код этих функций приведен в листинге 10.2.
Листинг 10.2
finclude <windows.h> // Текст модуля InitClean.cpp #include "Main.h" #include <crtdbg.h>
static _CrtMemState cml,cm2.cm3: //Переменные для контроля состояния //динамически распределяемой памяти void GetMemState(void) {
_CrtMemCheckpoint(&cml); //Запоминание состояния памяти //Вывод контрольного сообщения
_RPT1(_CRT_WARN,"Check poi nt1 :Sul\n".cml.1 Tot a1 Count): У
void CheckMem(void) {
int Dd;
_CrtMemCheckpoint(&cm2); if(Dd = cm2.1Sizes[l]-cml.lSizes[l]) {