Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы


Листинг 2.7. Файл clipshow/clipshow.cpp - часть 2


aWndClass = RegisterClass(&wc); return (aWndClass != 0); } // ===================================== // Функция WndProc // ===================================== LRESULT CALLBACK _export WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rc; static HWND hwndNextViewer; HGLOBAL hglbClipData; LPSTR lpszClipBuf; HBITMAP hBitmap; static HPALETTE hPal, hOldPal; static int cxClient, cyClient; HMETAFILE hmf; LPMETAFILEPICT lpmfp;

switch (msg) { case WM_CREATE: { // Наше окно становится окном просмотра Clipboard hwndNextViewer = SetClipboardViewer(hwnd); return 0; } case WM_SIZE: { cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); return 0; } case WM_PAINT: { hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rc);

// Открываем Clipboard OpenClipboard(hwnd);

// Читаем данные в формате метафайла hmf = (HMETAFILE)GetClipboardData(CF_METAFILEPICT); if(hmf != NULL) { // Фиксируем память заголовка метафайла lpmfp = (LPMETAFILEPICT)GlobalLock(hmf); if(lpmfp != NULL) { // Сохраняем контекст отображения SaveDC(hdc);

// Устанавливаем параметры контекста отображения // в соответствии с содержимым заголовка метафайла PrepareMetaFile(hdc, lpmfp, cxClient, cyClient);

// Проигрываем метафайл PlayMetaFile(hdc, lpmfp->hMF);

// Восстанавливаем контекст отображения RestoreDC(hdc, -1);

// Освобождаем память заголовка метафайла GlobalUnlock(hmf); } } else { // Читаем данные в формате CF_BITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP); if(hBitmap != NULL) { // Читаем палитру hPal = (HPALETTE)GetClipboardData(CF_PALETTE); if(hPal) { // Если Clipboard содержит палитру, // выбираем и реализуем ее hOldPal = SelectPalette(hdc, hPal, FALSE); RealizePalette(hdc); } // Рисуем изображение в окне DrawBitmap(hdc, 0, 0, hBitmap); } // Читаем текстовые данные else { hglbClipData = GetClipboardData(CF_TEXT); if(hglbClipData) { // Фиксируем блок памяти и рисуем текст lpszClipBuf = (LPSTR)GlobalLock(hglbClipData); DrawText(hdc, lpszClipBuf, -1, &rc, DT_EXPANDTABS);




Начало  Назад  Вперед



Книжный магазин