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


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


// ===================================== // Функция WndProc // ===================================== LRESULT CALLBACK _export WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rc;

static HGLOBAL hglbTextCopyBuf; LPSTR lpTextCopy; static HGLOBAL hglbTextPasteBuf; LPSTR lpTextPaste; static HGLOBAL hglbClipBuf; LPSTR lpClipBuf;

switch (msg) { case WM_CREATE: { hglbTextPasteBuf = GlobalAlloc(GHND, 1); if(hglbTextPasteBuf == NULL) return -1; lpTextPaste = (LPSTR)GlobalLock(hglbTextPasteBuf); if(hglbTextPasteBuf == NULL) return -1; lpTextPaste[0] = '\0'; GlobalUnlock(hglbTextPasteBuf); return 0; } case WM_PAINT: { hdc = BeginPaint(hwnd, &ps); lpTextPaste = (LPSTR)GlobalLock(hglbTextPasteBuf); if(lpTextPaste != NULL) { GetClientRect(hwnd, &rc); DrawText(hdc, lpTextPaste, -1, &rc, DT_LEFT | DT_EXPANDTABS); GlobalUnlock(hglbTextPasteBuf); } EndPaint(hwnd, &ps); } case WM_COMMAND: { switch (wParam) { // Выполняем отложенное копирование данных case CM_EDITCOPY: { OpenClipboard(hwnd); EmptyClipboard(); SetClipboardData(CF_TEXT, NULL); CloseClipboard(); return 0; }

// Чтение текстовых данных из Clipboard case CM_EDITPASTE: { OpenClipboard(hwnd); hglbClipBuf = GetClipboardData(CF_TEXT); if(hglbClipBuf != NULL) { lpClipBuf = (LPSTR)GlobalLock(hglbClipBuf); if(lpClipBuf != NULL) { hglbTextPasteBuf = GlobalReAlloc(hglbTextPasteBuf, GlobalSize(hglbClipBuf), GMEM_NODISCARD);

lpTextPaste = (LPSTR)GlobalLock(hglbTextPasteBuf); if(lpTextPaste != NULL) { lstrcpy(lpTextPaste, lpClipBuf); InvalidateRect(hwnd, NULL, TRUE); GlobalUnlock(hglbTextPasteBuf); } else MessageBox(hwnd, "Мало памяти", (LPSTR)szWindowTitle, MB_OK | MB_ICONHAND); GlobalUnlock(hglbClipBuf); } else MessageBox(hwnd, "Мало памяти", (LPSTR)szWindowTitle, MB_OK | MB_ICONHAND); } else MessageBox(hwnd, "Формат CF_TEXT недоступен", (LPSTR)szWindowTitle, MB_OK | MB_ICONHAND); CloseClipboard(); return 0; } case CM_HELPABOUT: { MessageBox(hwnd, "Приложение CLIPTXT\n(C) Фролов А.В., 1995", (LPSTR)szWindowTitle, MB_OK | MB_ICONINFORMATION); return 0; } case CM_FILEEXIT: { DestroyWindow(hwnd); return 0; } default: return 0; } } // Копируем данные во всех форматах case WM_RENDERALLFORMATS: { OpenClipboard(hwnd); EmptyClipboard();




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



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