CreateWindowExA 함수(winuser.h)

확장 창 스타일을 사용하여 겹치는, 팝업 또는 자식 창을 만듭니다. 그렇지 않으면 이 함수는 CreateWindow 함수와 동일합니다. 창을 만드는 방법에 대한 자세한 내용과 CreateWindowEx의 다른 매개 변수에 대한 자세한 내용은 CreateWindow를 참조하세요.

구문

HWND CreateWindowExA(
  [in]           DWORD     dwExStyle,
  [in, optional] LPCSTR    lpClassName,
  [in, optional] LPCSTR    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의 낮은 순서 단어에 있어야 합니다. 상위 단어는 0이어야 합니다. lpClassName이 문자열이면 창 클래스 이름을 지정합니다. 클래스 이름은 클래스 를 등록하는 모듈이 창을 만드는 모듈인 경우 RegisterClass 또는 RegisterClassEx에 등록된 모든 이름일 수 있습니다. 클래스 이름은 미리 정의된 시스템 클래스 이름일 수도 있습니다.

[in, optional] lpWindowName

형식: LPCTSTR

창 이름입니다. 창 스타일이 제목 표시줄을 지정하면 lpWindowName 이 가리키는 창 제목이 제목 표시줄에 표시됩니다. CreateWindow를 사용하여 단추, 확인란 및 정적 컨트롤과 같은 컨트롤을 만드는 경우 lpWindowName을 사용하여 컨트롤의 텍스트를 지정합니다. SS_ICON 스타일을 사용하여 정적 컨트롤을 만들 때 lpWindowName을 사용하여 아이콘 이름 또는 식별자를 지정합니다. 식별자를 지정하려면 "#num" 구문을 사용합니다.

[in] dwStyle

형식:DWORD

생성되는 창의 스타일입니다. 이 매개 변수는 창 스타일 값과 주의 섹션에 표시된 컨트롤 스타일의 조합일 수 있습니다.

[in] X

형식: int

창의 초기 가로 위치입니다. 겹치거나 팝업 창의 경우 x 매개 변수는 화면 좌표에서 창의 왼쪽 위 모서리에 있는 초기 x 좌표입니다. 자식 창의 경우 x 는 부모 창 클라이언트 영역의 왼쪽 위 모서리를 기준으로 창의 왼쪽 위 모서리에 대한 x 좌표입니다. xCW_USEDEFAULT 설정되면 시스템은 창의 왼쪽 위 모서리에 대한 기본 위치를 선택하고 y 매개 변수를 무시합니다. CW_USEDEFAULT 겹치는 창에만 유효합니다. 팝업 또는 자식 창에 지정되면 xy 매개 변수가 0으로 설정됩니다.

[in] Y

형식: int

창의 초기 세로 위치입니다. 겹치거나 팝업 창의 경우 y 매개 변수는 화면 좌표에서 창의 왼쪽 위 모서리에 있는 초기 y 좌표입니다. 자식 창의 경우 y 는 부모 창 클라이언트 영역의 왼쪽 위 모서리를 기준으로 자식 창의 왼쪽 위 모서리에 대한 초기 y 좌표입니다. 목록 상자의 경우 y 는 부모 창 클라이언트 영역의 왼쪽 위 모서리를 기준으로 목록 상자 클라이언트 영역의 왼쪽 위 모서리에 대한 초기 y 좌표입니다.

WS_VISIBLE 스타일 비트 집합을 사용하여 겹치는 창을 만들고 x 매개 변수가 CW_USEDEFAULT 설정된 경우 y 매개 변수는 창이 표시되는 방식을 결정합니다. y 매개 변수가 CW_USEDEFAULT 경우 창 관리자는 창을 만든 후 SW_SHOW 플래그를 사용하여 ShowWindow를 호출합니다. y 매개 변수가 다른 값인 경우 창 관리자는 해당 값을 사용하여 ShowWindownCmdShow 매개 변수로 호출합니다.

[in] nWidth

형식: int

창의 너비(디바이스 단위)입니다. 겹치는 창의 경우 nWidth 는 창의 너비, 화면 좌표 또는 CW_USEDEFAULT. nWidthCW_USEDEFAULT 경우 시스템은 창의 기본 너비와 높이를 선택합니다. 기본 너비는 초기 x 좌표에서 화면의 오른쪽 가장자리까지 확장됩니다. 기본 높이가 초기 y 좌표에서 아이콘 영역의 맨 위로 확장됩니다. CW_USEDEFAULT 겹치는 창에만 유효합니다. 팝업 또는 자식 창에 대해 CW_USEDEFAULT 지정하면 nWidthnHeight 매개 변수가 0으로 설정됩니다.

[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

WM_CREATE 메시지의lParam 매개 변수가 가리키는 CREATESTRUCT 구조체(lpCreateParams 멤버)를 통해 창에 전달할 값에 대한 포인터입니다. 이 메시지는 이 함수가 반환하기 전에 만든 창으로 전송됩니다.

애플리케이션이 CreateWindow 를 호출하여 MDI 클라이언트 창을 만드는 경우 lpParamCLIENTCREATESTRUCT 구조를 가리킵니다. MDI 클라이언트 창에서 CreateWindow 를 호출하여 MDI 자식 창을 만드는 경우 lpParamMDICREATESTRUCT 구조를 가리킵니다. 추가 데이터가 필요하지 않은 경우 lpParamNULL일 수 있습니다.

반환 값

형식: HWND

함수가 성공하면 반환 값은 새 창에 대한 핸들입니다.

함수가 실패하면 반환 값은 NULL입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

이 함수는 일반적으로 다음 이유 중 하나로 인해 실패합니다.

  • 잘못된 매개 변수 값
  • 시스템 클래스가 다른 모듈에 의해 등록되었습니다.
  • WH_CBT 후크가 설치되어 실패 코드를 반환합니다.
  • 대화 상자 템플릿의 컨트롤 중 하나가 등록되지 않았거나 창 프로시저가 WM_CREATE 실패하거나 WM_NCCREATE

설명

CreateWindowEx 함수는 WM_NCCREATE, WM_NCCALCSIZEWM_CREATE 메시지를 만드는 창으로 보냅니다.

만든 창이 자식 창인 경우 기본 위치는 Z 순서의 맨 아래에 있습니다. 만든 창이 최상위 창인 경우 기본 위치는 Z 순서의 맨 위에 있지만 생성된 창 자체가 맨 위에 있지 않으면 맨 위 창 아래에 있습니다.

작업 표시줄에 만든 창에 대한 단추가 표시되는지 여부를 제어하는 방법에 대한 자세한 내용은 작업 표시줄 관리 단추를 참조하세요.

창을 제거하는 방법에 대한 자세한 내용은 DestroyWindow 함수를 참조하세요.

lpClassName 매개 변수에 다음과 같은 미리 정의된 컨트롤 클래스를 지정할 수 있습니다. dwStyle 매개 변수에서 사용할 수 있는 해당 컨트롤 스타일을 확인합니다.

클래스 의미
단추 사용자가 클릭할 수 있는 단추를 나타내는 작은 사각형 자식 창을 지정하여 설정하거나 해제합니다. 단추 컨트롤은 단독으로 또는 그룹에서 사용할 수 있으며 레이블을 지정하거나 텍스트 없이 표시할 수 있습니다. 단추 컨트롤은 일반적으로 사용자가 클릭할 때 모양을 변경합니다. 자세한 내용은 단추를 참조하세요.

dwStyle 매개 변수에서 지정할 수 있는 단추 스타일의 표는 단추 스타일을 참조하세요.

Combobox 목록 상자와 편집 컨트롤과 유사한 선택 필드로 구성된 컨트롤을 지정합니다. 이 스타일을 사용하는 경우 애플리케이션은 항상 목록 상자를 표시하거나 드롭다운 목록 상자를 사용하도록 설정해야 합니다. 목록 상자가 표시되면 선택 필드에 문자를 입력하면 입력한 문자와 일치하는 첫 번째 목록 상자 항목이 강조 표시됩니다. 반대로 목록 상자에서 항목을 선택하면 선택한 텍스트가 선택 필드에 표시됩니다. 자세한 내용은 콤보 상자를 참조하세요.

dwStyle 매개 변수에서 지정할 수 있는 콤보 상자 스타일의 표는 콤보 상자 스타일을 참조하세요.

편집 사용자가 키보드에서 텍스트를 입력할 수 있는 사각형 자식 창을 지정합니다. 사용자가 컨트롤을 선택하고 Tab 키를 눌러 컨트롤을 클릭하거나 컨트롤로 이동하여 키보드 포커스를 제공합니다. 편집 컨트롤에 깜박이는 캐럿이 표시되면 사용자가 텍스트를 입력할 수 있습니다. 마우스를 사용하여 커서를 이동하거나, 바꿀 문자를 선택하거나, 문자를 삽입할 커서를 놓습니다. 또는 키를 사용하여 문자를 삭제합니다. 자세한 내용은 컨트롤 편집을 참조하세요.

dwStyle 매개 변수에서 지정할 수 있는 편집 컨트롤 스타일의 표는 컨트롤 스타일 편집을 참조하세요.

Listbox 문자열 목록을 지정합니다. 애플리케이션에서 사용자가 선택할 수 있는 파일 이름과 같은 이름 목록을 표시해야 할 때마다 이 컨트롤을 지정합니다. 사용자는 문자열을 클릭하여 선택할 수 있습니다. 선택한 문자열이 강조 표시되고 알림 메시지가 부모 창에 전달됩니다. 자세한 내용은 목록 상자를 참조하세요.

dwStyle 매개 변수에서 지정할 수 있는 목록 상자 스타일의 표는 목록 상자 스타일을 참조하세요.

MDICLIENT MDI 클라이언트 창을 지정합니다. 이 창은 MDI 애플리케이션의 자식 창을 제어하는 메시지를 받습니다. 권장되는 스타일 비트는 WS_CLIPCHILDRENWS_CHILD. WS_HSCROLLWS_VSCROLL 스타일을 지정하여 사용자가 MDI 자식 창을 보기로 스크롤할 수 있는 MDI 클라이언트 창을 만듭니다. 자세한 내용은 여러 문서 인터페이스를 참조하세요.
RichEdit Microsoft Rich Edit 1.0 컨트롤을 지정합니다. 이 창에서는 사용자가 문자 및 단락 서식을 사용하여 텍스트를 보고 편집할 수 있으며 포함된 COM(구성 요소 개체 모델) 개체를 포함할 수 있습니다. 자세한 내용은 서식 있는 편집 컨트롤을 참조하세요.

dwStyle 매개 변수에서 지정할 수 있는 서식 있는 편집 컨트롤 스타일의 표는 서식 있는 편집 컨트롤 스타일을 참조하세요.

RICHEDIT_CLASS Microsoft Rich Edit 2.0 컨트롤을 지정합니다. 이 컨트롤을 사용하면 사용자가 문자 및 단락 서식을 사용하여 텍스트를 보고 편집할 수 있으며 포함된 COM 개체를 포함할 수 있습니다. 자세한 내용은 서식 있는 편집 컨트롤을 참조하세요.

dwStyle 매개 변수에서 지정할 수 있는 서식 있는 편집 컨트롤 스타일의 표는 서식 있는 편집 컨트롤 스타일을 참조하세요.

Scrollbar 스크롤 상자가 있고 양쪽 끝에 방향 화살표가 있는 사각형을 지정합니다. 스크롤 막대는 사용자가 컨트롤을 클릭할 때마다 부모 창에 알림 메시지를 보냅니다. 부모 창은 필요한 경우 스크롤 상자의 위치를 업데이트합니다. 자세한 내용은 스크롤 막대를 참조하세요.

dwStyle 매개 변수에서 지정할 수 있는 스크롤 막대 컨트롤 스타일의 표는 스크롤 막대 컨트롤 스타일을 참조하세요.

정적 레이블 지정, 상자 또는 다른 컨트롤을 구분하는 데 사용되는 간단한 텍스트 필드, 상자 또는 사각형을 지정합니다. 정적 컨트롤은 입력을 사용하지 않으며 출력을 제공하지 않습니다. 자세한 내용은 정적 컨트롤을 참조하세요.

dwStyle 매개 변수에서 지정할 수 있는 정적 컨트롤 스타일의 표는 정적 컨트롤 스타일을 참조하세요.

 

dwExStyleWS_EX_NOACTIVATE 값은 시스템에 의한 포그라운드 활성화를 방지합니다. 사용자가 창을 클릭할 때 큐 활성화를 방지하려면 WM_MOUSEACTIVATE 메시지를 적절하게 처리해야 합니다. 창을 포그라운드로 가져오거나 프로그래밍 방식으로 활성화하려면 SetForegroundWindow 또는 SetActiveWindow를 사용합니다. WM_NCACTIVATE FALSE를 반환 하면 창에서 큐 활성화가 손실되지 않습니다. 그러나 반환 값은 활성화 시 무시됩니다.

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
헤더 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