Читайте также:
|
|
Битовый образ представляет собой находящуюся в памяти компьютера, и, следовательно, невидимую графическую поверхность, на которой программа может сформировать изображение. Содержимое битового образа (картинка) легко и, что особенно важно, быстро может быть выведено на поверхность формы или области вывода иллюстрации (image). Поэтому в программах битовые образы обычно используются для хранения небольших изображений, например, картинок командных кнопок. При хранении битовых образов в отдельном файле обычно используется расширение BMP (это единственный растровый формат, который напрямую поддерживается Windows). Часто они хранятся и в ресурсах.
В MFC битовые образы описываются классом CBitmap. Для их создания можно использовать либо ресурсный редактор, либо импортировать в ресурсы готовые файлы BMP, созданные при помощи графических пакетов. Битовый образ является таким же ресурсом, как иконка или диалог. Нужно помнить, что область ресурсов с битовыми образами в EXE-файле может занимать большой размер. Но это не очень страшно, так как ресурсы автоматически не загружаются в память.
Когда битовый образ помещен в ресурсы, его можно выводить на экран. Но этот процесс не такой уж и простой.
Сначала необходимо создать объект типа CBitmap и с помощью функции LoadBitmap() загрузить в него битовый образ из ресурсов. Прототип функции таков:
BOOL CBitmap::LoadBitmap(LPCSTR ResourceName);
Способы добавления битовых образов незначительно отличаются от способов добавления курсоров или пиктограмм, но включают вызовы нескольких новых функций.
Для создания данного приложения при помощи компилятора С/С++ потребуются файл проекта, файл с исходным текстом программы на языке С, файл ресурсов и новый битовый образ. Битовый образ создается в редакторе ресурсов и в данном примере сохранен в файле BMP.BMP. Для данного примера необходимо разработать свой оригинальный курсор. Предупреждение: не делайте битовый образ слишком большим; иначе все файлы могут не поместиться на один диск!
Ниже приведен листинг файла ресурсов BMP.RC:
#include "windows.h"
BMImage BITMAP bmp.bmp
В данном листинге имя ресурса курсора (ВМР.ВМР) связывается с именем BMImage. Имя BMImage будет использоваться в файле с исходным текстом программы.
Ниже приведен полный листинг файла с исходным Текстом программы ВМР.С:
// bmp.с
// Приложение, выводящее битовый образ
// в определенной зоне окна пользователя.
// Copyright (с) Chris Н. Pappas and William Н. Murray, 1995
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
char szProgName[]="ProgName";
char szBMName[]="BMImage";
HBITMAP hBitmap;
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPreInst, LPSTR lpszCmdLine,int nCmdShow)
HWND hWnd;
MSG lpMsg;
WNDCLASS wcApp;
hBitmap=LoadBitmap(hInst,szBMName);
if {!hPrelnst) {
wcApp.lpszClassName =szProgName;
=hInst;
=WndProc;
=LoadCursor(NULL;IDC_ARROW);
=NULL;
=NULL;
wcApp.hbrBackground =GetStockObject(WHITE BRUSH);
wcApp.style =CS_HREDRAW|CS_VREDRAW;
wcAppIcbClsExtra =0;
wcApp.cbWndExtra =0;
if (!RegisterClass (&wcApp))
return 0;
}
hWnd=CreateWindow(szProgName,"Drawing a Bitmap",
WS OVERLAPPEDWINDOW,CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT,(HWND)NULL,(HMENU)NULL,
(HANDLE)hInst, (LPSTR)NULL);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&lpMsg,NULL,0,0)) {
TranslateMessage(&lpMsg);
DispatchMessage(&lpMsg);
}
return(lpMsg.wParam);
}
LRESULT CALLBACK WndProc(HWND hWndfUINT messg,
WPARAM wParam,LPARAM lParam)
{
HDC hdc;
HDC hmdc;
PAINTSTRUCT ps;
BITMAP bm;
switch (messg) { case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
//------------- Начало фрагмента пользователя ----------------
hmdc=CreateCompatibleDC(hdc);
SelectObject(hmdc,hBitmap);
GetObject(hBitmap,sizeof(bm),(LPSTR) &bm);
BitBlt(hdc,50,50,bm.bmWidth,bm.bmHeight, hmdc, 0,0,SRCCOPY);
DeleteDC(hmdc);
//------------- Конец фрагмента пользователя -----------------
ValidateRect(hWnd,NULL);
EndPaint(hWnd,&ps);
break;
case WM_DESTROY:
DeleteObject(hBitmap);
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd,messg,wParam, lParam));
}
return(0);
}
В данном примере вызов функции LoadBitmap() (после описания данных функции WinMain()) возвращает идентификатор битового образа. Формат вызова функции совпадает с форматом функций LoadIcon() и LoadCursor(), которые использовались в предыдущих примерах.
Windows может выводить любой битовый образ при вызове функции BitBit(). Однако перед выводом битового образа на экран необходимо создать контекст памяти, совместимый с контекстом отображения устройства вывода, и выбрать битовый образ. Это позволяют сделать следующие четыре строки текста WndProc():
hmdc=CreateCompatibleDC(hdc);
SelectObject(hmdc, hBitmap);
GetObject(hBitmap, sizeof(bm), (LPSTR) &bm);
BitBit(hdc, 50, 50, bm.bmWidth, bm.bmHeight, hmdc, 0, 0,
SRCCOPY);
При вызове функции CreateCompatibleDC() создается контекст памяти, совместимый с контекстом отображения устройства вывода. Функция SelectObject() служит для выбора битового образа, идентифицируемого nBitmap, в контекст памяти hmdc.
Вызов третьей функции, GetObject(), возвращает характеристики bm.bmWidth и bm.bmHeight битового образа. Данные характеристики требуются для вызова функции BitBit(). Последняя функция производит копирование битового образа из контекста памяти в совместимый контекст отображения устройства вывода и помещает битовый образ в точку (50, 50). Затем копируется весь битовый образ с характеристиками bm.bmWidth и bm.bmHeight.
Дата добавления: 2015-09-03; просмотров: 171 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Добавление курсоров | | | Разработка ресурсов меню и акселераторов клавиатуры. Файл заголовков (resource.h). Файл ресурсов (MENU3.RC). Файл приложения (MENU3.CPP). |