Инструменты пользователя

Инструменты сайта


winapi

WinAPI

Windows API - построен на С. Поэтому используются только функции и указатели, нет никаких классов С++.

Проекты писать только на Unicode. Для этого в Microsoft Visual Studio Unicode нужно выставить в свойствах проекта или в теле программы определить макрос UNICODE.

Алгоритм создания окна приложения на WinAPI:

  1. Регистрируем класс главного окна в Windows. (Для встроенных классов (например BUTTON) регистрация не нужна)
  2. Создаем окно
  3. Обрабатываем очередь сообщений

Элементы управления создаются только при помощи функции CreateWindow. Они имеют для каждого класса свои сообщения, нотификационные сообщения WM_NOTIFY.

Примеры

Сообщения Windows

Система отправляет сообщение оконной процедуре с набором четырех параметров: дескриптор окна, код сообщения, и два значения называемые параметрами сообщения (message parameters). Дескриптор окна (window handle) идентифицирует окно, для которого предназначено сообщение. Система использует его, чтобы установить какая оконная процедура должна принять сообщение. Код (идентификатор) сообщения (message identifier) - именованная константа, которая идентифицирует цель сообщения. Когда оконная процедура принимает сообщение, она использует код сообщения, чтобы установить, как обработать его. Например, код сообщения WM_PAINT сообщает оконной процедуре, что рабочая область окна изменилась и должна быть перерисована. Параметры сообщения определяют данные или расположение данных, использованных оконной процедурой при обработке сообщения. Предназначение и значение параметров сообщения зависят от содержания сообщения. Параметр сообщения может содержать целое число, упакованные битовые флажки, указатель на структуру, содержащую дополнительные данные и так далее. Когда сообщение не использует параметры сообщения, они обычно устанавливаются в значение ПУСТО (NULL). Оконная процедура должна проверить код сообщения, чтобы установить, как интерпретировать параметры сообщения.

ABM	Панель инструментов рабочего стола программы
BM	Кнопка органа управления
CB	Орган управления - комбинированное окно  
CBEM	Орган управления - улучшенное комбинированное окно 
CDM	Стандартное диалоговое окно
DBT	Устройство
DL	 Окно списка с перетаскиваемыми элементами
DM	Заданная по умолчанию командная кнопка органа управления
EM	Средства редактирования
HDM	Орган управления заголовком
HKM	Орган управления "горячими" клавишами
IPM	Орган управления IP - адресом
LB 	Орган управления - окно со списком
LVM	Орган управления - просмотр списка
MCM	Орган управления -  календарь на месяц
PBM	Индикатор хода выполнения процесса
PGM	Орган управления - пейджер
PSM	Окно свойств
RB	Орган управления - панель управления браузером Интернет
SB	Строка состояния окна
SBM	Орган управления - полоса прокрутки
STM	Статический орган управления
TB	Панель инструментов
TBM	Панель задач
TCM	Орган управления - вкладка
TTM	Орган управления - подсказка
TVM	Орган управления - дерево просмотра 
UDM	Орган управления - полоса прокрутки поля редактирования
WM	Окно вообще

Маршрутизация сообщений (синхронные,асинхронные)

Система использует два метода отправки сообщения по маршруту оконной процедуре:

  • постановка сообщения в очередь "первым пришел", "первым вышел", называемый очередью сообщений (message queue), синхронные сообщения
  • определяемый системой объект памяти, который временно сохраняет сообщения и посылает их непосредственно оконной процедуре. Асинхронные сообщения

Сообщения, помещенные в очередь сообщений, называются поставленные в очередь (синхронные) сообщения (queued messages). Они появляются, прежде всего, как результат ввода данных пользователем через мышь или клавиатуру, такие сообщения как WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_KEYDOWN и WM_CHAR. Другие поставленные в очередь сообщения включают таймер, рисование и выход из программы: WM_TIMER, WM_PAINT иWM_QUIT. Большинство других сообщений, которые отправляются непосредственно оконной процедуре, называются не поставленные в очередь (асинхронные) сообщения (nonqueued messages).

  • PostMessage (отсылает синхронные сообщения)помещает (вставляет в очередь) сообщение в очередь сообщений, связанную с потоком, который создал заданное окно и возвращает значение без ожидания потока, который обрабатывает сообщение.
  • SendMessage (отсылает асинхронные сообщения) отправляет заданное сообщение окну или окнам. Функция вызывает оконную процедуру для заданного окна и не возвращает значение до тех пор, пока оконная процедура не обработает сообщение.

Функции WinAPI

  • CreateWindowEx дополнительный параметр dwExStyle определяющий расширенный стиль создаваемого окна. Обычные стили окна:
    CS_BYTEALIGNCLIENT	Выстраивает клиентскую часть окна на границу байта, что позволяет достичь большей производительности при отрисовке
    CS_BYTEALIGNWINDOW	То же что и CS_BYTEALIGNCLIENT, только увеличивает производительность при перемежении окна
    CS_CLASSDC	Создает контекст устройства, которые разделяется между всема наследнками этого класса.Все окна, созданные на базе класса, имеющего стиль 				
    			CS_CLASSDC, будут использовать один общий контекст отображения.
    CS_DBLCLKS	Разрешает обработку сообщений о двойном щелчке мыши
    CS_DROPSHADOW	Отбрасывать тень
    CS_GLOBALCLASS	Разрешает создание окон с независимыми идентификаторами приложений, если этот флаг не указан, то значение hInstance
    при создании окна должно быть таким же как и при регистрации класса RegisterClass.
    CS_HREDRAW	Перерисовывает окно при его перемещении по горизонтали
    CS_NOCLOSE	Убирает команду закрыть из системного меню окна
    CS_OWNDC	Создает уникальный контекст устройства для каждого вновь создаваемого окна
    CS_PARENTDC	У дочернего окна будет область отсечения от родительского. Повышает производительность. 
    CS_SAVEBITS	Позволяет сохранять область экрана в виде битовой матрицы закрытую в данный момент другим окном, используется для восстановления экрана.
    CS_VREDRAW	Перерисовывает окно при его перемещении по вертикали
  • GetDlgItem извлекает дескриптор органа управления в заданном диалоговом окне.
  • Многопоточность: CreateProcess, CreateThread.
  • AllocConsole - Пример: из графического приложения запускается консоль, в которую можно выводить например отладочную информацию.
winapi.txt · Последние изменения: 2011/05/29 14:41 (внешнее изменение)

Яндекс.Метрика