Операционная система Microsoft Windows 3.1 для программиста -том 3


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


// Вызываем функцию DefWindowProc и проверяем // возвращаемое ей значение lRetVal = DefWindowProc(hwnd, msg, wParam, lParam);

// Если курсор мыши находится на одном из // элементов толстой рамки, предназначенной // для изменения размера окна, возвращаем // неизмененное значение, полученное от // функции DefWindowProc if(lRetVal == HTLEFT lRetVal == HTRIGHT lRetVal == HTTOP lRetVal == HTBOTTOM lRetVal == HTBOTTOMRIGHT lRetVal == HTTOPRIGHT lRetVal == HTTOPLEFT lRetVal == HTBOTTOMLEFT) { return lRetVal; }

// В противном случае возвращаем значение // HTCAPTION, которое соответствует // заголовку окна. else { return HTCAPTION; } }

case WM_DESTROY: { // Перед завершением работы приложения // удаляем перехватчики RemoveKbHook();

PostQuitMessage(0); return 0; }

// Это сообщение приходит от DLL-библиотеки // при переключении раскладки клавиатуры case WM_KBHOOK: { // Получаем флаг раскладки bCyrillic = (BOOL)wParam;

// Выдаем звуковой сигнал MessageBeep(0);

// Перерисовываем окно приложения InvalidateRect(hwnd, NULL, FALSE); return 0; }

case WM_PAINT: { BYTE szBuf[10]; RECT rc;

// Получаем контекст отображения hdc = BeginPaint(hwnd, &ps);

// Выбираем шрифт с фиксированной шириной букв SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));

// Получаем координаты и размер окна GetClientRect(hwnd, &rc);

// В зависимости от состояния флага раскладки // клавиатуры выбираем надпись для // отображения в окне if(bCyrillic) lstrcpy(szBuf, (LPCSTR)"CYRILLIC"); else lstrcpy(szBuf, (LPCSTR)"DEFAULT ");

// Выводим надпись в центре окна DrawText(hdc, (LPSTR)szBuf, 8, &rc, DT_CENTER | DT_VCENTER | DT_NOCLIP | DT_SINGLELINE);

EndPaint(hwnd, &ps); } } return DefWindowProc(hwnd, msg, wParam, lParam); }

После запуска приложения функция WinMain определяет размеры окна DeskTop, которые равны размеру экрана, и создает главное окно приложения в виде временного окна с толстой рамкой для изменения размера без заголовка и системного меню (такое окно имеет стиль WS_POPUPWINDOW | WS_THICKFRAME).




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