Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы по теории.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
140.8 Кб
Скачать

Проект firstApplication Файл firstApplication.Cpp

// firstApplication.cpp : определяет точку входа приложения

// Defines the entry point for the application.

#include "stdafx.h"

#include "firstApplication.h"

#define MAX_LOADSTRING 100

// Global Variables:

HINSTANCE hInst; // current instance (дескриртор экземпляра приложения

TCHAR szTitle[MAX_LOADSTRING];// The title bar text (строка заголовка)

TCHAR szWindowClass[MAX_LOADSTRING];// the main window class name

//(строка имени оконного класса)

// Forward declarations of functions included in this code module:

// описания функций, используемых в этом модуле

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPTSTR lpCmdLine,

int nCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

// TODO: Place code here.

MSG msg;

HACCEL hAccelTable;

// Initialize global strings

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

// загружаем имя приложения в строку szTitle

LoadString(hInstance, IDC_FIRSTAPPLICATION, szWindowClass,

MAX_LOADSTRING); // загружаем имя класса в строку szWindowClass

MyRegisterClass(hInstance);

// создается и регистрируется класс главного окна

// Perform application initialization:

// создание окна как структуры на основе его класса

// и отображение окна на экране

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

// загрузка горячих клавиш Alt,Alt + /, Alt + F4

hAccelTable =LoadAccelerators(hInstance,AKEINTRESOURCE(IDC_FIRSTAPPLICATION));

// Main message loop:

// параметры GetMessage адрес структуры сообщ, деск. окна,

// принимающего сообщение, минимальный номер принимемого сообщения

while (GetMessage(&msg, NULL, 0, 0))// возвращает 0 только при извлечении

{ // сообщ. WM_QUIT

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{

TranslateMessage(&msg);// функция преобразует пару сообщений

// WM_KEYDOWN,WM_KEYUP в WM_CHAR

DispatchMessage(&msg); // передает сообщение обратно Windows,

//для того чтобы Windows отправила это сообщение

// соответствующей оконной процедуре

//Следует обратить внимание, что сообщение передается

// оконной процедуре именно того

//окна, которому оно было адресовано

// После обработки сообщения в оконной процедуре Windows

// передает управление оператору, следующему

// за функцией DispatchMessage, т.е. в начало цикла while

}

}

return (int) msg.wParam;

}

// FUNCTION: MyRegisterClass()

// PURPOSE: Registers the window class.

// создается и регистрируется класс главного окна

// COMMENTS:

// This function and its usage are only necessary if you want this code

// to be compatible with Win32 systems prior to the 'RegisterClassEx'

// function that was added to Windows 95. It is important to call this

// function

// so that the application will get 'well formed' small icons associated

// with it.

//

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

// инициализируются данные структуры wcex

wcex.cbSize = sizeof(WNDCLASSEX); // размер данного объекта

wcex.style = CS_HREDRAW | CS_VREDRAW; // стиль окна –

// перерисовывается по горизонтали

// и вертикали, если изменяется размер окна

wcex.lpfnWndProc = WndProc; // имя функции окна

wcex.cbClsExtra = 0; // дополнительная информация

wcex.cbWndExtra = 0; // дополнительная информация

wcex.hInstance = hInstance; // дескриптор данного экземпляра

// приложения

wcex.hIcon = LoadIcon(hInstance,

MAKEINTRESOURCE(IDI_FIRSTAPPLICATION));

// большая пиктограмма

wcex.hCursor = LoadCursor(NULL, IDC_ARROW); // форма курсора

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); // цвет фона окна

wcex.lpszMenuName = MAKEINTRESOURCE(IDC_FIRSTAPPLICATION); // стиль меню

wcex.lpszClassName = szWindowClass; // имя класса окна

wcex.hIconSm = LoadIcon(wcex.hInstance,

MAKEINTRESOURCE(IDI_SMALL));//малая пиктограмма

return RegisterClassEx(&wcex); // регистрация оконного класса в Windows

}

// FUNCTION: InitInstance(HINSTANCE, int)

// PURPOSE: Saves instance handle and creates main window

// создание окна как структуры на основе его класса и прорисовывание

// окна на экране

// COMMENTS:

// In this function, we save the instance handle in a global variable and

// create and display the main program window.

//

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

// имя зарегистрированного класса, имя окна, стиль окна

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,

// x и y позиции, ширина и высота окна,

NULL, NULL, hInstance, NULL);

//дескр. род. окна, дескр. меню, дескр. экз. приложения,

// указатель на данные предаваемые в сообщении WM_CREATE

if (!hWnd)

{

return FALSE;

}

// nCmdShow определяет в каком виде будет показано окно

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd); //посылает оконной процедуре сообщение WM_PAINT,

//заставляющее окно перерисовать свою клиентскую область

return TRUE;

}

//Реальная работа осуществляется в оконной процедуре

// здесь определяется, что будет выводиться в клиентское окно

// и то, как реагировать на пользовательский ввод

// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)

// PURPOSE: Processes messages for the main window.

//

// WM_COMMAND - process the application menu

// WM_PAINT - Paint the main window

// WM_DESTROY - post a quit message and return

//

// Четыре параметра оконной процедуры идентичны первым полям структуры MSG

// 1 -Дескриптор окна, получаюещего сообщение, 2- Идентификатор сообщения

// (целые от 0 до 1024)

// 3 и 4 содержит дополнительную информацию, которая распознается системой в

// зависимости от полученного сообщения

LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam, LPARAM lParam)

{

int wmId, wmEvent;

PAINTSTRUCT ps;

HDC hdc;

switch (message)

{

case WM_COMMAND:// сообщение посылается, если пользователь выбирает

// команду меню или команду из элемента управления

wmId = LOWORD(wParam);

// макрос извлекает младшее слово из 32-разрядного аргумента

wmEvent = HIWORD(wParam);

// макрос извлекает старшее слово из 32-разрядного аргумента

// Parse the menu selections:

switch (wmId)

{

case IDM_ABOUT:

DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

break;

case IDM_EXIT:

DestroyWindow(hWnd);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

break;

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

// TODO: Add any drawing code here...

EndPaint(hWnd, &ps);

break;

case WM_DESTROY: // Обработка этого сообщения не обязательна:

// если оно отсутствуе, то функция DefWindowProc вызовет по умолчанию

// функцию DestroyWindow

// но здесь хорошее место каки-либо предупреждащих сообщений

PostQuitMessage(0);// осуществляет корректное разрушение окна

// и посылает сообщение WM_QUIT

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

// Получает все сообщения, которые не обрабатываются этой оконной процедурой

}

return 0;// возвращает 0, если сообщение обрабатывалось в этой процедуре

}

///////////////////////////////////////////////////

// Message handler for about box.

// // FUNCTION: CALLBACK About()

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

UNREFERENCED_PARAMETER(lParam);

switch (message)

{

case WM_INITDIALOG:

return (INT_PTR)TRUE;

case WM_COMMAND:

if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

{

EndDialog(hDlg, LOWORD(wParam));

return (INT_PTR)TRUE;

}

break;

}

return (INT_PTR)FALSE;

}