Стили окон winapi c

Стили окон winapi c

Стили окна определяют вид окна. Данные стили используются в основном при создании окна. Но некоторые стили можно попробовать изменить во время работы программы. Стили окна можно комбинировать

Общие стили окна

Стили, применимые почти ко всем окнам WS_BORDER = &H800000 Окно имеет рамку WS_CAPTION = &HC00000 Окно имеет заголовак WS_CHILD = &H40000000 Окно является дочерним WS_CHILDWINDOW = &H40000000 Аналогично WS_CHILD WS_CLIPCHILDREN = &H2000000 Запрещает родительскому окну рисовать поверх дочернего окна WS_CLIPSIBLINGS = &H4000000 Запрещает дочернему окну рисовать поверх другого дочернего окна WS_DISABLED = &H8000000 Окно заблокировано WS_DLGFRAME = &H400000 Окно имеет рамку, как у диалогового окна и не имеет заголовка WS_GROUP = &H20000 Окно является началом группы элементов WS_HSCROLL = &H100000 Окно имеет горизонтальную полосу прокрутки WS_ICONIC = &H20000000 Аналогично WS_MINIMIZE WS_MAXIMIZE = &H1000000 Окно развернуто WS_MAXIMIZEBOX = &H10000 Имеется кнопка Восстановить в правой части заголовка. Нельзя комбинировать с расширенным стилем WS_EX_CONTEXTHELP. Можно дополнительно определить стиль WS_SYSMENU WS_MINIMIZE = &H20000000 Окно свернуто WS_MINIMIZEBOX = &H20000 Окно имеет кнопку Свернуть в правой части заголовка. Нельзя комбинировать с расширенным стилем WS_EX_CONTEXTHELP. Можно дополнительно определить стиль WS_SYSMENU WS_OVERLAPPED = &H0 По умолчанию создается перекрывающее окно с заголовком и рамкой WS_OVERLAPPEDWINDOW = &HCF0000 Создается перекрывающее окно с заголовком, изменяющей рамкой, системное меню, кнопки развертывания и сворачивания WS_POPUP = &H80000000 Всплывающее окно. Нельзя использовать с WS_CHILD WS_POPUPWINDOW = &H80880000 Всплывающее окно, имеющее рамку и системное меню WS_SIZEBOX = &H40000 Аналогично WS_THICKFRAME. WS_SYSMENU = &H80000 Окно имеет системное меню. Можно дополнительно определить стиль WS_CAPTION WS_TABSTOP = &H10000 Возможно использование клавиши табуляции для получения фокуса WS_THICKFRAME = &H40000 Окно имеет рамку, позволяющую изменять размеры окна WS_TILED = &H0 Аналогично WS_OVERLAPPED. WS_TILEDWINDOW = &HCF0000 Аналогично WS_OVERLAPPEDWINDOW. WS_VISIBLE = &H10000000 Окно видимо WS_VSCROLL = &H200000 Окно имеет вертикальную полосу прокрутки

Читайте также:  Дизайн ногтей экстравагантные стиль

Стили для класса Button


Стили Combo Box

Стили, применимые к элементу «COMBOBOX» CBS_AUTOHSCROLL = &H40 Автоматическое прокручивание текста вправо при достижении конца строки CBS_DISABLENOSCROLL = &H800 Отображение вертикальной полосы прокрутки, даже если она требуется CBS_DROPDOWN = &H2 Список отображается при щелчке на кнопке раскрытия списка CBS_DROPDOWNLIST = &H3 Аналогично CBS_DROPDOWN, но при этом пользователь не может менять содержимое выделенной строки CBS_HASSTRINGS = &H200 Список прорисовывается приложением и содержит строку. Также нужно определить CBS_OWNERDRAWFICED или CBS_OWNERDRAWVARIABLE CBS_LOWERCASE = &H4000 Текст в списке конвертируется в нижний регистр CBS_NOINTEGRALHEIGHT = &H400 Произвольный размер списка CBS_OEMCONVERT = &H80 Текст преобразуется в кодировку OEM CBS_OWNERDRAWFIXED = &H10 Прорисовка осуществляется приложением CBS_OWNERDRAWVARIABLE = &H20 Прорисовка осуществляется приложением CBS_SIMPLE = &H1 Список отображается все время CBS_SORT = &H100 Автоматическая сортировка строк CBS_UPPERCASE = &H2000 Текст конвертируется в верхний регистр

Источник

Стили окон winapi c

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

Описание

WS_BORDER

Создает окно с рамкой из тонких линий.

WS_CAPTION

Создает окно, которое имеет область заголовка (включает в себя стиль WS_BORDER ).

WS_CHILD

Создает дочернее окно. Окно с этим стилем не может иметь горизонтальное меню. Этот стиль не может быть использован со стилем WS_POPUP .

WS_CHILDWINDOW

То же самое, что и WS_CHILD.

WS_CLIPCHILDREN

Исключает область, занятую дочерними окнами при прорисовке внутри родительского окна. Используйте этот стиль при создании родительского окна.

WS_CLIPSIBLINGS

Закрепляет дочерние окна относительно друг друга; то есть когда отдельное дочернее окно принимает сообщение WM_PAINT , стиль WS_CLIPSIBLINGS вырезает все другие перекрывающие дочерние окна вне области дочернего окна, которое нужно модифицировать. Если стиль WS_CLIPSIBLINGS не определен, и дочерние окна перекрываются, то, возможно, что при прорисовке внутри рабочей области в одном из дочерних окон, произойдет прорисовка внутри рабочей области другого соседнего дочернего окна.

WS_DISABLED

Создает окно, которое первоначально заблокировано. Заблокированное окно не может принимать вводимую информацию от пользователя. Чтобы изменить это после, окно должно быть создано с использованием EnableWindow .

WS_DLGFRAME

Создает окно, которое имеет рамку стиля, обычно используемую диалоговыми окнами. Окно с этим стилем не может иметь строку заголовка.

WS_GROUP

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

Вы можете переключать этот стиль включенное и выключенное состояние, чтобы изменить передвижение по блоку диалога. Чтобы изменить этот стиль после, когда окно было создано, используйте функцию SetWindowLong .

WS_HSCROLL

Создает окно, которое имеет горизонтальную линейку прокрутки.

WS_ICONIC

Создает окно, которое вначале свернуто. То же самое, что и стиль WS_MINIMIZE .

WS_MAXIMIZE

Создает окно, которое первоначально развернуто.

WS_MAXIMIZEBOX

Создает окно, которое имеет кнопку развертывания окна. Стиль не может быть объединен со стилем WS_EX_CONTEXTHELP . Стиль WS_SYSMENU должен также быть определен.

WS_MINIMIZE

Создает окно, которое первоначально свернуто. То же самое, что и стиль WS_ICONIC .

WS_MINIMIZEBOX

Создает окно, которое имеет кнопку свертывания окна. Стиль не может быть объединен со стилем WS_EX_CONTEXTHELP . Стиль WS_SYSMENU должен также быть определен.

WS_OVERLAPPED

Создает перекрывающее окно. Перекрывающее окно имеет заголовок и рамку. То же самое, что и стиль WS_TILED .

WS_OVERLAPPEDWINDOW

Создает перекрывающее окно со стилями WS_OVERLAPPED , WS_CAPTION , WS_SYSMENU , WS_THICKFRAME , WS_MINIMIZEBOX и WS_MAXIMIZEBOX . То же самое, что и стиль WS_TILEDWINDOW .

WS_POPUP

Создает выскакивающее окно. Этот стиль не может использоваться со стилем WS_CHILD .

WS_POPUPWINDOW

Создает выскакивающее окно со стилями WS_BORDER , WS_POPUP и WS_SYSMENU . Стили WS_CAPTION и WS_POPUPWINDOW должны объединяться, чтобы сделать меню окна видимым.

WS_SIZEBOX

Создает окно, которое имеет рамку изменения размеров. Одно и то же, что и стиль WS_THICKFRAME .

WS_SYSMENU

Создает окно, которое имеет меню окна в своей строке заголовка. Должен быть также определен стиль WS_CAPTION .

WS_TABSTOP

Устанавливает орган управления, который может получать фокус клавиатуры, когда пользователь нажимает клавишу TAB. Нажатие клавиши TAB переводит фокус клавиатуры в следующий орган управления со стилем WS_TABSTOP .

Вы можете включать и выключать этот стиль, чтобы изменить порядок передвижения по диалоговому окну. Чтобы изменить этот стиль после того, как окно было создано, используйте функцию SetWindowLong .

WS_THICKFRAME

Создает окно, которое имеет рамку изменения размеров. Одно и то же, что и стиль WS_SIZEBOX .

WS_TILED

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

WS_TILEDWINDOW

Создает перекрывающее окно со стилями WS_OVERLAPPED , WS_CAPTION , WS_SYSMENU , WS_THICKFRAME , WS_MINIMIZEBOX и WS_MAXIMIZEBOX . Одно и то же, что и стиль WS_OVERLAPPEDWINDOW .

WS_VISIBLE

Создает окно, которое первоначально видимое.

Этот стиль может быть включен и выключен при помощи использования функции ShowWindow или SetWindowPos .

WS_VSCROLL

Создает окно, которое имеет вертикальную линейку прокрутки.

Следующие стили могут быть определены в параметре dwExStyle функции CreateWindowEx .

Описание WS_EX_ACCEPTFILES Определяет, что окно, созданное с этим стилем принимает файлы информационной технологии «перетащи и вставь» (drag-and-drop) . WS_EX_CONTEXTHELP

Включает вопросительный знак в строку заголовка окна. Когда пользователь щелкает мышью по вопросительному знаку, курсор изменяется на указатель с вопросительным знаком. Если пользователь затем щелкает мышью по дочернему окну, оно принимает сообщение WM_HELP . Дочернее окно должно передать сообщение в родительскую оконную процедуру, которая должна вызвать функцию WinHelp , использующую команду HELP_WM_HELP . Прикладная программа Справка (Help) отображает на экране выскакивающее окно, которое обычно содержит справку для дочернего окна. WS_EX_CONTEXTHELP не может использоваться со стилями WS_MAXIMIZEBOX или WS_MINIMIZEBOX .

Позволяет пользователю перемещаться по дочерним окнам родительского окна, используя клавишу табуляции TAB .

Создает окно с двойной рамкой. В отличие от стиля WS_DLGFRAME , прикладная программа может также определять стиль WS_CAPTION , чтобы создать область заголовка для окна.

Определяет, что дочернее окно, созданное с этим стилем не будет посылать сообщение WM_PARENTNOTIFY своему родительскому окну, когда создается или разрушается.

Создает окно с трехмерным стилем рамки, предназначаемым для использования элементов, в которые нет доступа для вводимой информации пользователем.

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

Источник

Структура оконного приложения

Оконные приложения строятся по принципам событийно-управляемого программирования (event-driven programming) — стиля программирования, при котором поведение компонента системы определяется набором возможных внешних событий и ответных реакций компонента на них. Такими компонентами в Windows являются окна.

С каждым окном в Windows связана определенная функция обработки событий – оконная функция . События для окон называются сообщениями . Сообщение относится к тому или иному типу, идентифицируемому определенным кодом (32-битным целым числом), и сопровождается парой 32-битных параметров ( WPARAM и LPARAM ), интерпретация которых зависит от типа сообщения.

Задача любого оконного приложения — создать главное окно и сообщить Windows функцию обработки событий для этого окна. Все самое интересное для приложения будет происходить именно в функции обработки событий главного окна.

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

Классическое оконное приложение, как правило, состоит по крайней мере из двух функций:

Стартовая функция WinMain

В консольной программе на С точкой входа является функция main() . С этого места программа начинает выполняться.
Точкой входа программы для Windows является функция WinMain() .

Эта функция использует последовательность вызовов API и при завершении возвращает операционной системе целое число.
Аргументы функции:

  • hInstance – дескриптор процесса (instance handle) – число, идентифицирующее программу, когда она работает под Windows. Если одновременно работают несколько копий одной программы, каждая копия имеет свое значение hInstance .
  • hPrevInstance — предыдущий дескриптор процесса (previous instance) — в настоящее время устарел, всегда равен NULL.
  • szCmdLine — указатель на оканчивающуюся нулем строку, в которой содержатся параметры, переданные в программу из командной строки. Можно запустить программу с параметром командной строки, вставив этот параметр после имени программы в командной строке.
  • iCmdShow — целое константное значение, показывающее, каким должно быть выведено на экран окно в начальный момент. Задается при запуске программы другой программой. В большинстве случаев число равно 1 ( SW_SHOWNRMAL ).
Имя Значение Описание
SW_HIDE 0 Скрывает окно и делает активным другое окно
SW_SHOWNORMAL 1 Отображает и делает активным окно в его первоначальном размере и положении.
SW_SHOWMINIMIZED 2 Активизирует окно и отображает его в свернутом виде
SW_SHOWMAXIMIZED 3 Активизирует окно и отображает его в полноэкранном виде
SW_SHOWNOACTIVATE 4 Отображает окно аналогично SW_SHOWNORMAL , но не активизирует его
SW_SHOW 5 Отображает и делает активным окно с текущим размером и положением.
SW_MINIMIZE 6 Сворачивает текущее окно и делает активным следующее окно в порядке очереди.
SW_SHOWMINNOACTIVE 7 Сворачивает окно аналогично SW_SHOWMINIMIZED , но не активизирует его.
SW_SHOWNA 8 Отображает окно в текущей позиции аналогично SW_SHOW , но не активизирует его.
SW_RESTORE 9 Отображает и активизирует окно. Если окно было свернуто или развернуто во весь экран, оно отображается в своем первоначальном положении и размере.
SW_SHOWDEFAULT 10 Отображает окно способом, заданным по умолчанию.
SW_FORCEMINIMIZE 11 Применяется для минимизации окон, связанных с различными потоками.

В структуре стартовой функции Windows можно выделить следующие операции, образующие «скелет» программы:

Регистрация класса окна

Регистрация класса окна осуществляется функцией

Члены структуры
style — устанавливает стиль(и) класса. Этот член структуры может быть любой комбинацией стилей класса.

Имя Значение Описание
CS_VREDRAW 0x01 Вертикальная перерисовка: осуществлять перерисовку окна при перемещении или изменении высоты окна.
CS_HREDRAW 0x02 Горизонтальная перерисовка: осуществлять перерисовку окна при перемещении или изменении ширины окна.
CS_KEYCVTWINDOW 0x04 В окне будет выполняться преобразование виртуальных клавиш.
CS_DBLCLKS 0x08 Окну будут посылаться сообщения о двойном щелчке кнопки мыши.
CS_OWNDC 0x20 Каждому экземпляру окна присваивается собственный контекст изображения.
CS_CLASSDC 0x40 Классу окна присваивается собственный контекст изображения,который можно разделить между копиями.
CS_PARENTDC 0x80 Классу окна передается контекст изображения родительского окна.
CS_NOKEYCVT 0x100 Отключается преобразование виртуальных клавиш.
CS_NOCLOSE 0x200 Незакрываемое окно: в системном меню блокируется выбор пункта закрытия окна.
CS_SAVEBITS 0x800 Часть изображения на экране, закрытая окном, сохраняется.
CS_BYTEALIGNCLIENT 0x1000 Выравнивание клиентской области окна: использование границы по байту по оси x.
CS_BYTEALIGNWINDOW 0x2000 Выравнивание окна: bспользование границы по байту по оси x.
CS_PUBLICCLASS CS_GLOBALCLASS 0x4000 Определяется глобальный класс окон.

lpfnWndProc — указатель на оконную процедуру.

cbClsExtra — устанавливает число дополнительных байт, которые размещаются вслед за структурой класса окна. Система инициализирует эти байты нулями, в большинстве случаев равен 0.

cbWndExtra — устанавливает число дополнительных байтов, которые размещаются вслед за экземпляром окна. Система инициализирует байты нулями.

hInstance — дескриптор экземпляра, который содержит оконную процедуру для класса.

hIcon — дескриптор значка класса, дескриптор ресурса значка. Если этот член структуры — NULL, система предоставляет заданный по умолчанию значок.

hCursor — дескриптор курсора класса, дескриптор ресурса курсора. Если этот член структуры — NULL, приложение устанавливает форму курсора всякий раз, когда мышь перемещается в окно прикладной программы.

hbrBackground — дескриптор кисти фона класса, дескриптор физической кисти, которая используется, чтобы красить цветом фона, или код цвета, преобразованный к типу HBRUSH .

lpszMenuName — указатель на символьную строку с символом конца строки ( ‘\0’ ), которая устанавливает имя ресурса меню класса. Можно использовать целое число, чтобы идентифицировать меню с помощью макроса MAKEINTRESOURCE( int ) . Если этот член структуры — NULL , окна, принадлежащие этому классу, не имеют заданного по умолчанию меню.

lpszClassName — указатель на символьную строку с именем класса, оканчивающуюся ‘\0’ .

Создание окна

Создание окна осуществляется функцией

Прототип функции находится в файле библиотеки user32.dll.
Возвращаемое значение – дескриптор создаваемого окна. В случае невозможности создать окно возвращается NULL.

Аргументы функции :
lpClassName – указывает на строку с ‘\0’ в конце, которая определяет имя класса окна. Имя класса может быть зарегистрированным функцией RegisterClass или любым из предопределенных имен класса элементов управления.

lpWindowName — указывает на строку с ‘\0’ в конце, которая определяет имя окна.

dwStyle — определяет стиль создаваемого окна.

Имя Значение Описание
WS_BORDER 0x00800000 Окно имеет тонкую границу в виде линии.
WS_CAPTION 0x00C00000 Окно имеет строку заголовка.
WS_CHILD 0x40000000 Окно является дочерним.
WS_DISABLED 0x08000000 Окно является изначально неактивным.
WS_GROUP 0x00020000 Окно группирует другие управляющие элементы.
WS_HSCROLL 0x00100000 Окно содержит горизонтальную полосу прокрутки.
WS_MAXIMIZE 0x01000000 Исходный размер окна – во весь экран.
WS_MINIMIZE 0x20000000 Исходно окно свернуто.
WS_OVERLAPPED 0x00000000 Окно может быть перекрыто другими окнами.
WS_POPUP 0x80000000 Всплывающее окно.
WS_SYSMENU 0x00080000 Окно имеет системное меню в строке заголовка.
WS_VISIBLE 0x10000000 Окно изначально видимое.
WS_VSCROLL 0x00200000 Окно имеет вертикальную полосу прокрутки.

x — определяет координату левой стороны окна относительно левой стороны экрана. Измеряется в единицах измерения устройства, чаще всего в точках (pt). Для дочернего окна определяет координату левой стороны относительно начальной координаты родительского окна. Если установлен как CW_USEDEFAULT , Windows выбирает заданную по умолчанию позицию окна.

у – определяет координату верхней стороны окна относительно верхней стороны экрана. Измеряется в единицах измерения устройства, чаще всего в точках (pt). Для дочернего окна определяет координату верхней стороны относительно начальной координаты родительского окна.

nWidth – определяет ширину окна в единицах измерения устройства. Если параметр соответствует CW_USEDEFAULT , Windows выбирает заданную по умолчанию ширину и высоту для окна.

nHeight – определяет высоту окна в единицах измерения устройства.

hWndParent – дескриптор родительского окна.

hMenu – идентифицирует меню, которое будет использоваться окном. Этот параметр может быть NULL , если меню класса будет использовано.

hInstance — идентифицирует экземпляр модуля, который будет связан с окном.

lpParam — указывает на значение, переданное окну при создании.

Отображение и перерисовка окна

Отображение окна осуществляется функцией

Прототип функции находится в файле библиотеки user32.dll.
Возвращаемое значение: 1 – успешное отображение окна, 0 – ошибка.

Аргументы функции :
hWnd – дескриптор отображаемого окна.

nCmdShow – константа, определяющая, как будет отображаться окно согласно таблице.

Перерисовка окна осуществляется функцией

Прототип функции находится в файле библиотеки user32.dll.
Возвращаемое значение: 1 – успешная перерисовка окна, 0 – ошибка.
Аргумент функции hWnd – дескриптор окна.

Цикл обработки сообщений

После вызова функции UpdateWindow , окно окончательно выведено на экран. Теперь программа должна подготовить себя для получения информации от пользователя через клавиатуру и мышь. Windows поддерживает «очередь сообщений» (message queue) для каждой программы, работающей в данный момент в системе Windows. Когда происходит ввод информации, Windows преобразует ее в «сообщение», которое помещается в очередь сообщений программы. Программа извлекает сообщения из очереди сообщений, выполняя блок команд, известный как «цикл обработки сообщений» (message loop):

Для получения сообщения из очереди используется функция:

Прототип функции находится в файле библиотеки user32.dll.
В случае получения из очереди сообщения, отличного от WM_QUIT , возвращает ненулевое значение.

Аргументы функции :
lpMsg — указатель на структуру сообщения.

Структура POINT имеет вид

hWnd — дескриптор окна, очередь для которого просматривается.

wMsgFilterMin — нижняя граница фильтра идентификаторов сообщений.

wMsgFilterMax — верхняя граница фильтра идентификаторов сообщений.

передает аргумент — структуру msg обратно в Windows для преобразования какого-либо сообщения с клавиатуры. Возвращает ненулевое значение в случае успешной расшифровки сообщения, 0 – ошибка.

передает аргумент — структуру msg обратно в Windows. Windows отправляет сообщение для его обработки соответствующей оконной процедуре — таким образом, Windows вызывает соответствующую оконную функцию, указанную при регистрации класса окна.

После того, как оконная функция обработает сообщение, оно возвращается в Windows, которая все еще обслуживает вызов функции DispatchMessage . Когда Windows возвращает управление в стартовую функцию WinMain() к следующему за вызовом DispatchMessage коду, цикл обработки сообщений в очередной раз возобновляет работу, вызывая GetMessage .
Возвращает значение, определяемое оконной функцией, которое чаще всего игнорируется.
Прототипы функций находятся в файле библиотеки user32.dll.

Пример стартовой функции, создающей и выводящей окно размером 500х300 точек:

Примечание : Для корректной сборки приложения используется многобайтовая кодировка.

Оконная функция — обработка сообщений окна

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

4 аргумента оконной функции идентичны первым четырем полям структуры сообщения MSG .

В примере обрабатывается только один тип сообщения WM_DESTROY , которое передается оконной функции при закрытии окна.

Вызов функции DefWindowProc() обрабатывает по умолчанию все сообщения, которые не обрабатывает оконная процедура.
Функция PostQuitMessage() сообщает Windows, что данный поток запрашивает завершение. Аргументом является целочисленное значение, которое функция вернет операционной системе.

Результат выполнения программы, выводящей окно:

Комментариев к записи: 13

/*WinAPI приложение. Минимальный
набор функций для отображения окна.
Эта программа станет базовой заготовкой для всех последующих программ*/
#include
//Создаём прототип функции окна
LRESULT CALLBACK WndProc( HWND , UINT , WPARAM , LPARAM );
//объявляем имя программы
char szProgName[]=&qout;Имя программы&qout;;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
<
HWND hWnd; //идентификатор окна
MSG lpMsg;
WNDCLASS w; //создаём экземпляр структуры WNDCLASS и начинаем её заполнять
w.lpszClassName=szProgName; //имя программы
w.hInstance=hInstance; //идентификатор текущего приложения
w.lpfnWndProc=WndProc; //указатель на функцию окна
w.hCursor=LoadCursor( NULL , IDC_ARROW); //загружаем курсор в виде стрелки
w.hIcon=0; //иконки у нас не будет пока
w.lpszMenuName=0; //и меню пока не будет
w.hbrBackground=( HBRUSH )GetStockObject(WHITE_BRUSH); //цвет фона окна — белый
w.style= CS_HREDRAW | CS_VREDRAW ; //стиль окна — перерисовываемое по х и по у
w.cbClsExtra=0;
w.cbWndExtra=0;
//Если не удалось зарегистрировать класс окна — выходим
if (! RegisterClass (&w))
return 0;
//Создадим окно в памяти, заполнив аргументы CreateWindow
hWnd= CreateWindow (szProgName, //Имя программы
«Моя первая программа!» , //Заголовок окна
WS_OVERLAPPEDWINDOW , //Стиль окна — перекрывающееся
100, //положение окна на экране по х
100, //по у
500, //размеры по х
400, //по у
( HWND ) NULL , //идентификатор родительского окна
( HMENU ) NULL , //идентификатор меню
( HINSTANCE )hInstance, //идентификатор экземпляра программы
( HINSTANCE ) NULL ); //отсутствие дополнительных параметров
//Выводим окно из памяти на экран
ShowWindow(hWnd, nCmdShow);
//Обновим содержимое окна
UpdateWindow(hWnd);
//Цикл обработки сообщений
while ( GetMessage (&lpMsg, NULL , 0, 0)) < //Получаем сообщение из очереди
TranslateMessage(&lpMsg); //Преобразуем сообщения клавиш в символы
DispatchMessage (&lpMsg); //Передаём сообщение соответствующей функции окна
>
return (lpMsg.wParam);
>

//Функция окна
LRESULT CALLBACK WndProc( HWND hWnd, UINT messg,
WPARAM wParam, LPARAM lParam)
<
HDC hdc; //создаём контекст устройства
PAINTSTRUCT ps; //создаём экземпляр структуры графического вывода
//Цикл обработки сообщений
switch (messg)
<
//сообщение рисования
case WM_PAINT :
//начинаем рисовать
hdc=BeginPaint(hWnd, &ps);
//здесь вы обычно вставляете свой текст:
TextOut(hdc, 150,150, «Здравствуй, WIN 32 API. » , 26);
//закругляемся
//обновляем окно
ValidateRect(hWnd, NULL );
//заканчиваем рисовать
EndPaint(hWnd, &ps);
break ;
//сообщение выхода — разрушение окна
case WM_DESTROY :
PostQuitMessage(0); //Посылаем сообщение выхода с кодом 0 — нормальное завершение
break ;
default:
return ( DefWindowProc (hWnd, messg, wParam, lParam));
//освобождаем очередь приложения от нераспознаных
>
return 0;
>

Источник

Оцените статью
Поделиться с друзьями