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


Листинг 2.1. Файл cliptxt/cliptxt.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 HGLOBAL hglbTextCopyBuf; LPSTR lpTextCopy; static HGLOBAL hglbTextPasteBuf; LPSTR lpTextPaste; static HGLOBAL hglbClipBuf; LPSTR lpClipBuf;

switch (msg) { case WM_CREATE: { // Заказываем буфер для хранения текста, // прочитанного из Clipboard. // Начальный размер этого буфера - 1 байт 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) { // Копируем строку текста в Clipboard case CM_EDITCOPY: { // Заказываем глобальный блок памяти для строки hglbTextCopyBuf = GlobalAlloc(GHND, sizeof(szClipboardText) + 1); if(hglbTextCopyBuf != NULL) { // Фиксируем блок памяти lpTextCopy = (LPSTR)GlobalLock(hglbTextCopyBuf); if(lpTextCopy != NULL) { // Копируем строку текста в блок памяти lstrcpy(lpTextCopy, szClipboardText);

// Расфиксируем блок памяти GlobalUnlock(hglbTextCopyBuf);

// Открываем Clipboard и очищаем его OpenClipboard(hwnd); EmptyClipboard();

// Записываем данные в Clipboard SetClipboardData(CF_TEXT, hglbTextCopyBuf);

// Закрываем Clipboard CloseClipboard(); } else MessageBox(hwnd, "Мало памяти", (LPSTR)szWindowTitle, MB_OK | MB_ICONHAND); } else MessageBox(hwnd, "Мало памяти", (LPSTR)szWindowTitle, MB_OK | MB_ICONHAND); return 0; }




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



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