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


Листинг 2.1. Файл cliptxt/cliptxt.cpp - часть 3


// Чтение текстовых данных из Clipboard case CM_EDITPASTE: { // Открываем Clipboard OpenClipboard(hwnd);

// Получаем идентификатор блока памяти, // содержащего текстовые данные Clipboard hglbClipBuf = GetClipboardData(CF_TEXT);

// Если в Clipboard есть данные в текстовом // формате, читаем их if(hglbClipBuf != NULL) { // Фиксируем блок памяти Clipboard lpClipBuf = (LPSTR)GlobalLock(hglbClipBuf); if(lpClipBuf != NULL) { // Изменяем размер буфера, предназначенного для // хранения данных, прочитанных из Clipboard, // устанавливая его равным размеру блока // данных Clipboard hglbTextPasteBuf = GlobalReAlloc(hglbTextPasteBuf, GlobalSize(hglbClipBuf), GMEM_NODISCARD);

// Фиксируем буфер в памяти и переписываем // в него содержимое Clipboard 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);

// Расфиксируем блок памяти Clipboard GlobalUnlock(hglbClipBuf); } else MessageBox(hwnd, "Мало памяти", (LPSTR)szWindowTitle, MB_OK | MB_ICONHAND); } else MessageBox(hwnd, "Формат CF_TEXT недоступен", (LPSTR)szWindowTitle, MB_OK | MB_ICONHAND);

// Закрываем Clipboard 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_DESTROY: { // Освобождаем буфер, предназначенный для хранения // данных, прочитанных из Clipboard if(hglbTextPasteBuf != NULL) GlobalFree(hglbTextPasteBuf);

PostQuitMessage(0); return 0; } default: break; } return DefWindowProc(hwnd, msg, wParam, lParam); }

Обработчик сообщения WM_CREATE заказывает буфер hglbTextPasteBuf, в который будет записан текст, вставленный из Clipboard.


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



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