Поделиться через


Функция 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-завершенной строкой или атомом класса.

Если строка null-terminated, указывает имя класса окна. Имя класса может быть любым именем, зарегистрированным в функции RegisterClass или RegisterClassEx, если модуль, регистрирующий класс, также является модулем, создающим окно. Имя класса также может быть любым из предопределенных системного класса имен.

Если атом класса, созданный предыдущим вызовом RegisterClass или RegisterClassEx, его необходимо преобразовать с помощью макроса MAKEINTATOM. (Атом должен находиться в слове с низким порядком lpClassName; слово с высоким порядком должно быть равно нулю.)

[in, optional] lpWindowName

Тип: LPCTSTR

Имя окна. Если стиль окна задает строку заголовка, в строке заголовка отображается название окна, на которое указывает lpWindowName. При использовании CreateWindow для создания элементов управления, таких как кнопки, флажки и статические элементы управления, используйте lpWindowName, чтобы указать текст элемента управления. При создании статического элемента управления с помощью стиля SS_ICON используйте lpWindowName, чтобы указать имя значка или идентификатор. Чтобы указать идентификатор, используйте синтаксис "#число".

[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 определяет, как отображается окно. Если параметр yCW_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 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.

Класс Значение
BUTTON Указывает небольшое прямоугольное дочернее окно, представляющее кнопку, которую пользователь может щелкнуть, чтобы включить или отключить его. Элементы управления кнопками можно использовать отдельно или в группах, и они могут быть помечены или отображаться без текста. Элементы управления кнопкой обычно изменяют внешний вид, когда пользователь щелкает их. Дополнительные сведения см. в разделе Кнопки.

Таблица стилей кнопки, которые можно указать в параметре dwStyle, см. стили кнопок.

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

Таблицу стилей полей со списком можно указать в параметре dwStyle, см. стили полей со списком.

EDIT Задает прямоугольное дочернее окно, в которое пользователь может вводить текст с клавиатуры. Пользователь выбирает элемент управления и дает ему фокус клавиатуры, щелкнув его или переместив его, нажав клавишу TAB. Пользователь может вводить текст, когда элемент управления редактирования отображает мигающий курсор; используйте мышь для перемещения курсора, выбора символов для замены или размещения курсора для вставки символов; или используйте ключ для удаления символов. Дополнительные сведения см. в разделе Изменение элементов управления.

Таблица стилей элементов управления редактирования, которые можно указать в параметре dwStyle, см. стилей элементов управления.

LISTBOX Задает список символьных строк. Укажите этот элемент управления всякий раз, когда приложение должно представлять список имен, таких как имена файлов, из которых пользователь может выбрать. Пользователь может выбрать строку, щелкнув ее. Выделена выбранная строка, и сообщение уведомления передается родительскому окну. Дополнительные сведения см. в списков.

Таблица стилей списков, которые можно указать в параметре dwStyle, см. в разделе стили списков.

MDICLIENT Указывает окно клиента MDI. Это окно получает сообщения, управляющие дочерними окнами приложения MDI. Рекомендуемые биты стиля — WS_CLIPCHILDREN и WS_CHILD. Укажите стили WS_HSCROLL и WS_VSCROLL, чтобы создать окно клиента MDI, позволяющее пользователю прокручивать дочерние окна MDI в представление. Дополнительные сведения см. в интерфейса нескольких документов.
RichEdit Задает элемент управления Microsoft Rich Edit 1.0. Это окно позволяет пользователю просматривать и изменять текст с помощью форматирования символов и абзаца и включать внедренные объекты объектной модели компонентов (COM). Дополнительные сведения см. в разделе Расширенные элементы управления редактированием.

Таблица стилей элементов управления расширенными изменениями, которые можно указать в параметре dwStyle, см. стили элементов управления rich Edit Control.

RICHEDIT_CLASS Задает элемент управления Microsoft Rich Edit 2.0. Эти элементы управления позволяют пользователю просматривать и редактировать текст с помощью форматирования символов и абзаца и включать внедренные COM-объекты. Дополнительные сведения см. в разделе Расширенные элементы управления редактированием.

Таблица стилей элементов управления расширенными изменениями, которые можно указать в параметре dwStyle, см. стили элементов управления rich Edit Control.

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 или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка winuser.h (включая Windows.h)
библиотеки User32.lib
DLL User32.dll
набор API ext-ms-win-ntuser-window-l1-1-0 (представлено в Windows 8)

См. также

о интерфейса нескольких документов

CLIENTCREATESTRUCT

CREATESTRUCT

концептуальные

CreateWindow

DestroyWindow

EnableWindow

другие ресурсы

Справочник

RegisterClass

RegisterClassEx

SetActiveWindow

SetForegroundWindow

SetWindowLong

SetWindowPos

ShowWindow

WM_CREATE

WM_NCCALCSIZE

WM_NCCREATE

WM_PAINT

WM_PARENTNOTIFY

Windows