Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CП.docx
Скачиваний:
9
Добавлен:
30.10.2018
Размер:
824 Кб
Скачать
☆

13. Створити простішу програму у Windows (Win32 api), яка забезпечує обробку повідомлень миші (wm_lbuttondown, wm_rbuttondown) у вікні.

#include <windows.h>

HINSTANCE hInst;

LRESULT CALLBACK WinProc (HWND hWnd, UINT Message, UINT wParam, LONG lParam )

{

// обработка сообщений

switch(Message)

{

case WM_DESTROY:

PostQuitMessage(0);

return 0;

case WM_LBUTTONDOWN:

xPos = GET_X_LPARAM(lParam);

yPos = GET_Y_LPARAM(lParam);

return 0;

case WM_RBUTTONDOWN:

xPos = GET_X_LPARAM(lParam);

yPos = GET_Y_LPARAM(lParam);

return 0;

}

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

}

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpszCmdParam, int nCmdShow)

{

HWND hWnd;

WNDCLASS WndClass;

MSG Msg;

char szClassName[] = "ResourcesDemo";

hInst = hInstance;

// регистрация окного класса

WndClass.style = CS_HREDRAW | CS_VREDRAW;

WndClass.lpfnWndProc = WinProc;

WndClass.cbClsExtra = 0;

WndClass.cbWndExtra = 0;

WndClass.hInstance = hInst ;

WndClass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);

WndClass.lpszMenuName = NULL;

WndClass.lpszClassName = szClassName;

if ( !RegisterClass(&WndClass) )

{

MessageBox(NULL,"Cannot register class", "Error", MB_OK);

return 0;

}

char szWinCaption[64];

LoadString(hInst, IDS_WINCAPTION, szWinCaption, 64);

// создает окно

hWnd = CreateWindow(szClassName, szWinCaption,

WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

NULL, NULL, hInstance,NULL);

// сообщение об ошибке

if(!hWnd)

{

MessageBox(NULL,"Cannot create window", "Error",MB_OK);

return 0;

}

/* показует наше окно */

ShowWindow(hWnd,nCmdShow);

UpdateWindow(hWnd);

/* обработка сообщений */

while(GetMessage(&Msg, NULL, 0, 0))

{

TranslateMessage(&Msg);

DispatchMessage(&Msg);

}

return Msg.wParam;

}

№ 14 Ресурси: Растрові зображення. Вивід растрових зображень.

Имеется несколько возможностей хранения растровых изображений:

• в файлах с расширением .BMP, создаваемых обычно с помощью того или иного графического редактора, например пакета CorelDraw от Corel Corporation, встроенной в Windows программы Paint (Paintbrush) или одного из универсальных редакторов ресурсов, входящих в пакеты сред программирования Borland C++ или Visual C++; файл можно также получить путем сканирования фотографии с переводом результата в формат .BMP;

• в файле ресурсов в виде таблицы чисел, которую можно получить с помощью того

же редактора ресурсов;

• непосредственно в полях данных приложения в виде массива целых чисел.

Если связь файла .BMP с приложением осуществляется посредством файла ресурсов, то в нем должна быть строка, описывающая файл с изображением:

Check BITMAP "check.bmp"

На имя этого ресурса ("Check") программа будет ссылаться при загрузке изображения в память.

Ссылка на файл .BMP в файле ресурсов может быть заменено непосредственным описанием в файле ресурсов самого изображения в виде таблицы шестнадцатеричных

Загрузка растрового изображения

Для того чтобы изображение можно было вывести на экран, оно должно находиться не в файле, а в памяти. Если исходное изображение хранится в файле .BMP, то загрузить его в память можно двумя способами. Первый требует использования файла ресурсов, в котором должно быть предложение, описывающее файл с изображением: pict BITMAP "apple.bmp" На имя этого ресурса ("pict" в данном примере) программа будет ссылаться при загрузке изображения в память. Как известно, при компиляции проекта, в который входит файл ресурсов, фактически выполняются две операции компиляции: исходного текста программы с образованием объектного файла с расширением .OBJ, и файла ресурсов с образованием второго ромежуточного файла с расширением .RES. Этот файл содержит изображение практически в том же виде, что и исходный файл .BMP. Далее файлы .OBJ и .RES обрабатываются компоновщиком, который объединяет файлы .OBJ и .RES и создает загрузочный файл .ЕХЕ, готовый к выполнению. Ресурсы (не только изображения, но и описание диалогов, меню, текстовых строк и проч.) сохраняются в файле .ЕХЕ в специальном формате, понятном редактору ресурсов. Это дает возможность редактировать ресурсы в файле .ЕХЕ, не имея исходного текста программы. Загрузка изображения-ресурса из файла .ЕХЕ в память осуществляется в программе вызовом функции Loadlmage(). После этого программа может приступить к процедуре вывода изображения в окно. Отметим, что в этом случае для выполнения программы файл .BMP уже не нужен; изображение хранится в выполнимом файле .ЕХЕ, который в силу этого может иметь значительный размер.

Другой способ загрузки Изображения в память не требует наличия файла ресурсов;

загрузка изображения осуществляется той же функцией Loadlmage() непосредственно из файла .BMP. Однако в этом случае приложение может выполняться, только если ему доступны все необходимые файлы с рисунками, поскольку в выполнимом файле рисунков нет. Легко сообразить, что именно такой метод используется в программах, позволяющих просматривать рисунки, хранящиеся на дисках

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]