Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Переменные cbClsExtra и cbWndExtra можно использовать для выделения под оконный класс или для каждого экземпляра окна некоторой дополнительной памяти. Приложения могут пользоваться ею для хранения некоторой собственной информации, имеющей отношение к оконному классу или конкретным окнам.

Особенно важны первые две переменные структуры WNDCLASS. Большая часть свойств, делающих окно уникальным и сложным объектом, управляется именно этими переменными. В них хранится стиль (style) оконного класса и адрес оконной процедуры (lpfnWndProc).

Оконная процедура – это функция, ответственна за обработку всех сообщений, получаемых окном. Она может обрабатывать эти сообщения самостоятельно, или передавать их оконной процедуре "по умолчанию", DefWindowProc. Сообщения несут самую разнообразную информацию: об изменении размеров и местоположения окна, о событиях мыши, клавиатуры, командах пользователя, требования перерисовки, события таймера и других аппаратных устройств и т. п.

Существует аналог DefWindowProc, применяемый для диалоговых окон – функция DefDlgProc. Эта оконная процедура "по умолчанию" разработана специально для диалоговых окон. Она обеспечивает обслуживание элементов управления, например, переключение фокуса ввода.

С помощью стиля оконного класса, переменной style, задаются некоторые глобальные свойства оконного класса. Значение стиля является комбинацией значений битовых флагов (эта комбинация получается с помощью побитовой операции ИЛИ, т. е. оператора |). Например, флаг CS_DBLCLKS указывает Windows, что для окон данного класса надо генерировать сообщения о двойном щелчке мышью. Пара флагов CS_HREDRAW и CS_VREDRAW означают, что окно должно полностью перерисовываться после любого изменения горизонтального или вертикального размера.

НЕ нашли? Не то? Что вы ищете?

4.2 Создание окна с помощью функции CreateWindow

Регистрация нового оконного класса – это только первый шаг в создании окна. Затем приложения обычно создают окна с помощью функции CreateWindow. Параметры этой функции задают более частные свойства экземпляра нового окна, например, его размеры, местоположение и внешний вид.

HWND CreateWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName,

DWORD dwStyle, int x, int y, int nWidth, int nHeight,

HWND hWndParent, HMENU hMenu, HANDLE hInstance,

LPVOID lpParam );

Параметр lpClassName – это имя класса, чье поведение и свойства унаследует новое окно. Это может быть класс, зарегистрированный функцией RegisterClass, или один из стандартных оконных классов (например, классы элементов управления: BUTTON, COMBOBOX, EDIT, SCROLLBAR, STATIC).

Параметр dwStyle задает стиль окна. Его не следует путать со стилем оконного класса, который при регистрации оконного класса передается функции RegisterClass внутри структуры WNDCLASS. Стиль класса задает некоторые постоянные свойства окон данного класса, общие для всех окон. Стиль окна, передаваемый в CreateWindow, используется для инициализации более кратковременных свойств конкретного окна. Например, dwStyle можно применять для задания начального вида окна (свернутое, развернутое, видимое или скрытое). Как и для стиля класса, стиль окна обычно является комбинацией битовых флагов (которая строится с помощью оператора |). Кроме общих флагов, имеющих смысл для окон всех классов, некоторые флаги имеют смысл только для стандартных оконных классов. Например, стиль BS_PUSHBUTTON используется для окон класса BUTTON, которые должны выглядеть как нажимаемые кнопки и посылать по щелчку мыши своим родительским окнам сообщения WM_COMMAND.

Стили WS_POPUP и WS_OVERLAPPED задаются окнам верхнего уровня. Основное различие в том, что у окон WS_OVERLAPPED всегда есть заголовок, а у окон WS_POPUP он не обязателен. Перекрывающиеся окна обычно используются в качестве главных окон приложений, а всплывающие окна – как диалоговые окна.

При создании окна верхнего уровня вызывающее приложение задает его родительское окно с помощью параметра hwndParent. Родительским окном для окна верхнего уровня служит окно рабочего стола.

Дочерние окна создаются с использованием стиля WS_CHILD. Основное различие между дочерним окном и окном верхнего уровня в том, что дочернее окно заключено внутри клиентской области своего родительского окна.

В Windows определены некоторые комбинации стилей, удобные для создания "типичных" окон. Стиль WS_OVERLAPPEDWINDOW является комбинацией флагов WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX и WS_MAXIMIZEBOX. Такая комбинация применяется при создании типичного главного окна приложения. Стиль WS_POPUPWINDOW является комбинацией флагов WS_POPUP, WS_BORDER и WS_SYSMENU. Этот стиль применяется для создания диалоговых окон.

5. Рисование содержимого окна

Рисование в окне выполняется с помощью функций модуля GDI. Приложение обычно получает дескриптор контекста устройства, связанного с клиентской областью окна, (например, с помощью функции GetDC) и затем вызывает функции GDI вроде LineTo, Rectangle или TextOut.

5.1 Сообщение WM_PAINT

Сообщение WM_PAINT посылается окну, когда его части нуждаются в перерисовке и при этом в очереди сообщений потока-владельца окна больше нет никаких сообщений. Приложения выполняют обработку WM_PAINT с помощью функций рисования, вызываемых между вызовами функций BeginPaint и EndPaint. Функция BeginPaint возвращает набор параметров в виде структуры PAINTSTRUCT:

typedef struct tagPAINTSTRUCT {

HDC hdc;

BOOL fErase;

RECT rcPaint;

BOOL fRestore;

BOOL fIncUpdate;

BYTE rgbReserved[32];

} PAINTSTRUCT;

BeginPaint при необходимости выполняет очистку фона окна. Для этого приложению посылается синхронное сообщение WM_ERASEBKGND. Функция BeginPaint должна вызываться только для обработки сообщения WM_PAINT. Каждому вызову BeginPaint должен соответствовать последующий вызов EndPaint.

Приложения могут использовать переменную этой структуры hDC для рисования в клиентской области окна. Переменная rcPaint хранит координаты наименьшего прямоугольника, описывающего область, нуждающуюся в перерисовке. Ограничивая отрисовку этой областью, приложения могут ускорить процесс отображения.

5.2 Перерисовка окна по требованию

Функции InvalidateRect и InvalidateRgn позволяют приложению объявить все окно или его части "недействительными". В ответ Windows пошлет приложению сообщение WM_PAINT с требованием перерисовать эти области.

Данные функции обеспечивают приложениям эффективный способ полного или частичного обновления содержимого окон. Вместо немедленной перерисовки окна, приложение может объявить область окна недействительной. При обработке сообщения WM_PAINT приложение может учесть координаты обновляемого участка (переменную rcPaint в структуре PAINTSTRUCT) и перерисовать элементы только внутри этой области.

6. Часто используемые сообщения управления окнами

Типичное окно реагирует не только на WM_PAINT, но и на многие другие сообщения. Некоторые наиболее часто используемые сообщения перечислены ниже.

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

WM_DESTROY. Это сообщение посылается в оконную процедуру окна, которое уже удалено с экрана и вскоре будет уничтожено.

WM_CLOSE. Сообщение посылается в окно как признак того, что оно должно быть закрыто. При обработке по умолчанию в DefWindowProc вызывается DestroyWindow. Приложение может, например, вывести окно подтверждения выхода и вызвать DestroyWindow только если пользователь подтвердит закрытие окна.

WM_QUIT. Это сообщение является требованием завершения приложения и обычно является последним сообщением, которое получает главное окно приложения. При его получении функция GetMessage возвращает FALSE, что в большинстве приложений приводит к завершению цикла обработки сообщений. WM_QUIT генерируется в результате вызова функции PostQuitMessage.

WM_QUERYENDSESSION. Сообщение уведомляет приложение о том, что сеанс работы Windows будет завершен. В ответ приложение может вернуть FALSE, чтобы предотвратить закрытие Windows. После обработки WM_QUERYENDSESSION Windows посылает всем приложениям сообщение WM_ENDSESSION с результатами обработки сообщения WM_QUERYENDSESSION.

WM_ENDSESSION. Сообщение посылается всем приложениям после обработки сообщения WM_QUERYENDSESSION. Оно уведомляет приложения, что Windows будет закрыта или что процесс закрытия был прерван. Если закрытие состоится, то оно может произойти в любой момент после того, как сообщение WM_ENDSESSION будет обработано всеми приложениями. Поэтому важно, чтобы приложения завершали все свои действия для обеспечения безопасного завершения работы.

WM_ACTIVATE. Сообщение уведомляет окно верхнего уровня о том, что оно станет активным или неактивным. При смене активного окна это сообщение сначала посылается окну, которое будет неактивным, а потом окну, которое станет активным.

WM_SHOWWINDOW. Это сообщение извещает окно о том, что оно будет скрыто или показано на экране. Окно м. б. скрыто путем вызова функции ShowWindow или в результате перекрытия другим развернутым окном.

WM_ENABLE. Посылается окну, когда оно разрешается или запрещается. Окно может быть разрешено или запрещено с помощью функции EnableWindow. В запрещенном состоянии окно не получает сообщений мыши и клавиатуры.

WM_MOVE. Извещает окно об изменении его местоположения на экране.

WM_SIZE. Сообщение WM_SIZE уведомляет окно об изменении его размеров.

WM_SETFOCUS. Это сообщение извещает окно о том, что оно получило клавиатурный фокус ввода. Приложение может в ответ на это сообщение включить клавиатурный курсор.

WM_KILLFOCUS. Уведомляет окно о потере клавиатурного фокуса ввода. Если приложение включало курсор, то при обработке WM_KILLFOCUS его надо выключить.

WM_GETTEXT. Сообщение посылается окну как запрос на копирование текста окна в буфер. У большинства окон текст окна – это его заголовок. Для элементов управления вроде кнопок, строк ввода, статического текста и т. п. текст окна – это текст, отображаемый в элементе управления. Это сообщение обычно обрабатывается процедурой по умолчанию DefWindowProc.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32