Функция CreateWindowExW (winuser.h)
Создает перекрывающееся, всплывающее или дочернее окно с расширенным стилем окна; В противном случае эта функция идентична функции CreateWindow . Дополнительные сведения о создании окна и полное описание других параметров CreateWindowEx см. в статье CreateWindow.
Синтаксис
HWND CreateWindowExW(
[in] DWORD dwExStyle,
[in, optional] LPCWSTR lpClassName,
[in, optional] LPCWSTR lpWindowName,
[in] DWORD dwStyle,
[in] int X,
[in] int Y,
[in] int nWidth,
[in] int nHeight,
[in, optional] HWND hWndParent,
[in, optional] HMENU hMenu,
[in, optional] HINSTANCE hInstance,
[in, optional] LPVOID lpParam
);
Параметры
[in] dwExStyle
Тип: DWORD
Расширенный стиль создаваемого окна. Список возможных значений см. в разделе Расширенные стили окна.
[in, optional] lpClassName
Тип: LPCTSTR
Строка, завершающаяся значением NULL, или атом класса, созданный при предыдущем вызове функции RegisterClass или RegisterClassEx . Атом должен быть в нижнем порядке слово lpClassName; Слово высокого порядка должно быть равно нулю. Если lpClassName является строкой, она указывает имя класса окна. Имя класса может быть любым именем, зарегистрированным с помощью RegisterClass или RegisterClassEx, при условии, что модуль, регистрирующий класс, также является модулем, создающим окно. Имя класса также может быть любым из предопределенных имен системных классов .
[in, optional] lpWindowName
Тип: LPCTSTR
Имя окна. Если стиль окна задает строку заголовка, заголовок окна, на который указывает lpWindowName , отображается в строке заголовка. При использовании CreateWindow для создания элементов управления, таких как кнопки, поля проверка и статические элементы управления, используйте lpWindowName, чтобы указать текст элемента управления. При создании статического элемента управления со стилем SS_ICON используйте lpWindowName , чтобы указать имя или идентификатор значка. Чтобы указать идентификатор, используйте синтаксис "#num".
[in] dwStyle
Тип: DWORD
Стиль создаваемого окна. Этот параметр может быть сочетанием значений стиля окна, а также стилей элементов управления, указанных в разделе Примечания.
[in] X
Тип: int
Начальное горизонтальное положение окна. Для перекрывающегося или всплывающего окна параметр x — это начальная координата X левого верхнего угла окна в виде экранных координат. Для дочернего окна x — это координата X левого верхнего угла окна относительно левого верхнего угла клиентской области родительского окна. Если для параметра x задано значение CW_USEDEFAULT, система выбирает позицию по умолчанию для левого верхнего угла окна и игнорирует параметр y . CW_USEDEFAULT допустимо только для перекрывающихся окон; Если он указан для всплывающего или дочернего окна, то для параметров x и y устанавливается нулевое значение.
[in] Y
Тип: int
Начальное вертикальное положение окна. Для перекрывающегося или всплывающего окна параметр y — это начальная координата Y левого верхнего угла окна в виде экранных координат. Для дочернего окна y — это начальная координата Y левого верхнего угла дочернего окна относительно левого верхнего угла клиентской области родительского окна. Для поля со списком y — это начальная координата Y левого верхнего угла клиентской области поля списка относительно левого верхнего угла клиентской области родительского окна.
Если создается перекрывающееся окно с битом стиля WS_VISIBLE , а параметр x имеет значение CW_USEDEFAULT, то параметр y определяет способ отображения окна. Если параметр y имеет значение CW_USEDEFAULT, диспетчер окон вызывает ShowWindow с флагом SW_SHOW после создания окна. Если параметр y является другим значением, диспетчер окон вызывает ShowWindow с этим значением в качестве параметра nCmdShow .
[in] nWidth
Тип: int
Ширина окна в единицах устройства. Для перекрывающихся окон nWidth — это ширина окна, в координатах экрана или CW_USEDEFAULT. Если nWidthCW_USEDEFAULT, система выбирает ширину и высоту окна по умолчанию; ширина по умолчанию простирается от начальных координат X до правого края экрана; Высота по умолчанию простирается от начальной координаты Y до верхней части области значка. CW_USEDEFAULT допустимо только для перекрывающихся окон; Если для всплывающего или дочернего окна указано CW_USEDEFAULT, то для параметров nWidth и nHeight задано значение ноль.
[in] nHeight
Тип: int
Высота окна в единицах устройства. Для перекрывающихся окон nHeight — это высота окна в виде экранных координат. Если параметр nWidth имеет значение CW_USEDEFAULT, система игнорирует nHeight.
[in, optional] hWndParent
Тип: HWND
Дескриптор для родительского окна или окна владельца создаваемого окна. Чтобы создать дочернее окно или собственное окно, укажите допустимый дескриптор окна. Этот параметр является необязательным для всплывающих окон.
Чтобы создать окно только для сообщений, предоставьте HWND_MESSAGE или дескриптор существующему окну только для сообщений.
[in, optional] hMenu
Тип: HMENU
Дескриптор меню или задает идентификатор дочернего окна в зависимости от стиля окна. Для перекрывающегося или всплывающего окна hMenu определяет меню для использования с окном; Значение может иметь значение NULL , если требуется использовать меню класса. Для дочернего окна hMenu задает идентификатор дочернего окна, целочисленное значение, используемое элементом управления диалогового окна для уведомления родительского элемента управления о событиях. Приложение определяет идентификатор дочернего окна; оно должно быть уникальным для всех дочерних окон с одинаковым родительским окном.
[in, optional] hInstance
Тип: HINSTANCE
Дескриптор экземпляра модуля, связанного с окном.
[in, optional] lpParam
Тип: LPVOID
Указатель на значение, передаваемое в окно через структуру CREATESTRUCT (член lpCreateParams ), на которую указывает параметр lParamсообщения WM_CREATE . Это сообщение отправляется в созданное окно этой функцией перед возвратом.
Если приложение вызывает CreateWindow для создания клиентского окна MDI, lpParam должен указывать на структуру CLIENTCREATESTRUCT . Если окно клиента MDI вызывает CreateWindow для создания дочернего окна MDI, lpParam должен указывать на структуру MDICREATESTRUCT . Если дополнительные данные не требуются, lpParam может иметь значение NULL.
Возвращаемое значение
Тип: HWND
Если функция выполняется успешно, возвращаемое значение является дескриптором для нового окна.
Если функция завершается сбоем, возвращается значение NULL. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Обычно эта функция завершается сбоем по одной из следующих причин:
- недопустимое значение параметра
- системный класс зарегистрирован другим модулем
- Установлен обработчик WH_CBT и возвращает код сбоя.
- Если один из элементов управления в шаблоне диалогового окна не зарегистрирован или его оконная процедура завершается сбоем WM_CREATE или WM_NCCREATE
Комментарии
Функция CreateWindowEx отправляет сообщения WM_NCCREATE, WM_NCCALCSIZE и WM_CREATE в создаваемое окно.
Если созданное окно является дочерним, его положение по умолчанию находится в нижней части Z-порядка. Если созданное окно является окном верхнего уровня, его положение по умолчанию находится в верхней части Z-порядка (но под всеми верхними окнами, если только созданное окно не является самым верхним).
Сведения об управлении отображением кнопки для созданного окна на панели задач см. в разделе Управление кнопками панели задач.
Сведения об удалении окна см. в разделе Функция DestroyWindow .
В параметре lpClassName можно указать следующие стандартные классы элементов управления. Обратите внимание на соответствующие стили элементов управления, которые можно использовать в параметре dwStyle .
Класс | Значение |
---|---|
КНОПКУ |
Обозначает небольшое прямоугольное дочернее окно, представляющее кнопку, которую пользователь может нажать, чтобы включить или отключить ее. Элементы управления "Кнопки" можно использовать как отдельно, так и в группах, и они могут быть помечены или отображаться без текста. Элементы управления "Кнопка" обычно изменяют внешний вид, когда пользователь щелкает их. Дополнительные сведения см. в разделе Кнопки.
Таблицу стилей кнопок, которые можно указать в параметре dwStyle , см. в разделе Стили кнопки. |
COMBOBOX |
Обозначает элемент управления, состоящий из списка и поля выбора, аналогичного элементу управления редактирования. При использовании этого стиля приложение должно постоянно отображать список или включать раскрывающийся список. Если список отображается, при вводе символов в поле выделения выделяется первая запись в списке, соответствующая введенным символам. И наоборот, при выборе элемента в списке отображается выделенный текст в поле выбора. Дополнительные сведения см. в разделе Поля со списком.
Таблицу стилей полей со списком, которые можно указать в параметре dwStyle , см. в разделе Стили полей со списком. |
РЕДАКТИРОВАТЬ |
Обозначает прямоугольное дочернее окно, в которое пользователь может вводить текст с клавиатуры. Пользователь выбирает элемент управления и передает ему фокус клавиатуры, щелкнув его или перейдя к нему, нажав клавишу TAB. Пользователь может вводить текст, когда элемент управления редактированием отображает мигающую курсорку; используйте мышь для перемещения курсора, выбора заменяющихся символов или размещения курсора для вставки символов; или используйте ключ для удаления символов. Дополнительные сведения см. в разделе Изменение элементов управления.
Таблицу стилей редактирования элементов управления, которые можно указать в параметре dwStyle , см. в разделе Изменение стилей элементов управления. |
LISTBOX |
Задает список символьных строк. Укажите этот элемент управления всякий раз, когда приложение должно представить список имен, например имен файлов, из которых пользователь может выбрать. Пользователь может выбрать строку, щелкнув ее. Выделенная строка будет выделена, а уведомление передается в родительское окно. Дополнительные сведения см. в разделе Списки.
Таблицу стилей списков, которые можно указать в параметре dwStyle , см. в разделе Стили списков. |
MDICLIENT | Задает окно клиента MDI. Это окно получает сообщения, управляющие дочерними окнами приложения MDI. Рекомендуемые биты стилей : WS_CLIPCHILDREN и WS_CHILD. Укажите стили WS_HSCROLL и WS_VSCROLL , чтобы создать окно клиента MDI, позволяющее пользователю прокручивать дочерние окна MDI в поле зрения. Дополнительные сведения см. в разделе Интерфейс нескольких документов. |
Richedit |
Задает элемент управления Microsoft Rich Edit 1.0. Это окно позволяет пользователю просматривать и редактировать текст с форматированием символов и абзацей, а также может включать внедренные объекты модели COM. Дополнительные сведения см. в разделе Rich Edit Controls.
Таблицу стилей элементов управления с широкими возможностями редактирования, которые можно указать в параметре dwStyle , см. в разделе Стили элементов управления rich Edit. |
RICHEDIT_CLASS |
Задает элемент управления Microsoft Rich Edit 2.0. Эти элементы управления позволяют пользователю просматривать и редактировать текст с форматированием символов и абзацей, а также могут включать внедренные COM-объекты. Дополнительные сведения см. в разделе Rich Edit Controls.
Таблицу стилей элементов управления с широкими возможностями редактирования, которые можно указать в параметре dwStyle , см. в разделе Стили элементов управления rich Edit. |
SCROLLBAR |
Обозначает прямоугольник, который содержит поле прокрутки и имеет стрелки направления на обоих концах. Полоса прокрутки отправляет уведомление в родительское окно всякий раз, когда пользователь щелкает элемент управления. Родительское окно при необходимости отвечает за обновление положения поля прокрутки. Дополнительные сведения см. в разделе Полосы прокрутки.
Таблицу стилей элементов управления полосой прокрутки, которые можно указать в параметре dwStyle , см. в разделе Стили элементов управления полосы прокрутки. |
СТАТИЧЕСКИЙ |
Обозначает простое текстовое поле, поле или прямоугольник, используемые для маркировки, поля или разделения других элементов управления. Статические элементы управления не принимают входные данные и не предоставляют выходные данные. Дополнительные сведения см. в разделе Статические элементы управления.
Таблицу стилей статических элементов управления, которые можно указать в параметре dwStyle , см. в разделе Статические стили элементов управления. |
Значение WS_EX_NOACTIVATEдля dwExStyle предотвращает активацию переднего плана системой. Чтобы предотвратить активацию очереди, когда пользователь щелкает окно, необходимо соответствующим образом обработать WM_MOUSEACTIVATE сообщение. Чтобы перевести окно на передний план или активировать его программным способом, используйте SetForegroundWindow или SetActiveWindow. Если вернуть значение FALSEв WM_NCACTIVATE , окно не потеряет активацию очереди. Однако возвращаемое значение игнорируется во время активации.
Если WS_EX_COMPOSITED задано, все потомки окна получают порядок рисования снизу вверх с помощью двойной буферизации. Порядок рисования снизу вверх позволяет окну-потомку иметь эффекты прозрачности (альфа) и прозрачности (цветовая клавиша), но только в том случае, если в окне-потомке также задан бит WS_EX_TRANSPARENT . Двойная буферизация позволяет закрасить окно и его потомки без мерцания.
Пример
В следующем примере кода показано использование CreateWindowExA.
BOOL Create(
PCWSTR lpWindowName,
DWORD dwStyle,
DWORD dwExStyle = 0,
int x = CW_USEDEFAULT,
int y = CW_USEDEFAULT,
int nWidth = CW_USEDEFAULT,
int nHeight = CW_USEDEFAULT,
HWND hWndParent = 0,
HMENU hMenu = 0
)
{
WNDCLASS wc = {0};
wc.lpfnWndProc = DERIVED_TYPE::WindowProc;
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = ClassName();
RegisterClass(&wc);
m_hwnd = CreateWindowEx(
dwExStyle, ClassName(), lpWindowName, dwStyle, x, y,
nWidth, nHeight, hWndParent, hMenu, GetModuleHandle(NULL), this
);
return (m_hwnd ? TRUE : FALSE);
}
Примечание
Заголовок winuser.h определяет CreateWindowEx в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | winuser.h (включая Windows.h) |
Библиотека | User32.lib |
DLL | User32.dll |
Набор API | ext-ms-win-ntuser-window-l1-1-0 (представлено в Windows 8) |
См. также раздел
Сведения об интерфейсе нескольких документов
Основные понятия
Другие ресурсы
Справочные материалы