LPSTR lpCmdLine

HINSTANCE hPrevInstance,

Чтобы восстановить на экране изображение, необходимо вызвать BitBlt второй раз, устанавливая совместимый контекст устройства как источниковый DC, а контекст устройства окна (или принтера) как целевой DC.

Далее необходимо выбрать созданный точечный рисунок в этот контекст устройства при помощи вызова функции SelectObject.

Захват изображения

Вы можете использовать точечный рисунок, чтобы захватить изображение, сохранить захваченное изображение в памяти, показать его на экране в другом месте окна приложения, или показать его на экране в другом окне.

1) Чтобы вывести изображение экрана в окно необходимо в первую очередь создать контекст для устройства DISPLAY с помощью функции CreateDC("DISPLAY", NULL, NULL, NULL) или GetDC(NULL);

1) Далее создаётся совместимый контекст в памяти для устройства DISPLAY с помощью функции CreateCompatibleDC. При этом создаётся контекст устройства (DC), который является совместимым с текущим контекстом устройства DISPLAY.

2) После того, как создан совместимый контекст устройства для дисплея, необходимо создать точечный рисунок с соответствующими размерами при помощи вызова функции CreateCompatibleBitmap;

4) Далее можно сделать захват изображения с помощью функции BitBlt. Эта функция выполняет пересылку блока битов - то есть она копирует данные с исходного точечного рисунка в принимающий точечный рисунок. В качестве параметров BitBlt принимает дескрипторы, которые идентифицируют два контекста устройства и копирует растровые данные с точечного рисунка, выбранного в источниковом DC в точечный рисунок, выбранный в целевом DC (целевой DC - совместимый контекст устройства). Таким образом когда BitBlt завершает передачу, изображение сохраняется в памяти.


Пример_1: Разработать Windows-приложение, которое захватывает изображение всего рабочего стола и выводит это изображение в главное окно приложения. (В программе есть ошибка, которую студенты должны исправить самостоятельно).

#include "stdafx.h"

#include "resource.h"

#define MAX_LOADSTRING 100

// Global Variables:

HINSTANCE hInst;

TCHAR szTitle[MAX_LOADSTRING];

TCHAR szWindowClass[MAX_LOADSTRING];

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

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

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

int APIENTRY WinMain(HINSTANCE hInstance,

int nCmdShow)

{

// TODO: Place code here.

MSG msg;

HACCEL hAccelTable;

// Initialize global strings

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_PRINTSCREEN, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);

// Perform application initialization:

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_PRINTSCREEN);

// Main message loop:

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

{

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

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

return msg.wParam;

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: