CreateWindowEx(A)

オーバーラップウィンドウ、ポップアップウィンドウ、子ウィンドウのいずれかを、拡張ウィンドウスタイル付きで作成します。拡張ウィンドウスタイルを指定する以外は、CreateWindow関数と同等です。

HWND CreateWindowExA(
    DWORD  dwExStyle,     // extended window style
    PCTSTR pszClassName,  // window class
    PCTSTR pszWindowName, // window name
    DWORD  dwStyle,       // window style
    int    x,             // x-position
    int    y,             // y-position
    int    nWidth,        // width
    int    nHeight,       // height
    HWND   hWndParent,    // parent window
    HMENU  hMenu,         // menu handle or control ID
    HINSTANCE hInstance,  // instance handle
    PVOID  pParam         // CREATESTRUCT structure
);

USER32.DLL

引数

dwExStyle

ウィンドウの拡張スタイルを指定します。

pszClassName

以前のRegisterClass関数またはRegisterClassEx関数の呼び出しにより作成されたウィンドウクラスの名前を表す文字列へのポインタまたはクラスアトムを指定します。アトムを指定する場合には、このパラメータの下位ワードがアトムとなるようにし、上位ワードはゼロになるようにしなければいけません。文字列を指定する場合には、ウィンドウクラス名を指定します。ウィンドウクラスの名前は、RegisterClass関数またはRegisterClassEx関数で登録されたクラス名か、システムの定義済みコントロールのクラス名を指定することができます。クラス名の大文字・小文字は区別されません。

システムの定義済みコントロールのクラス名は、以下のものがあります。

"BUTTON"
ボタンコントロール
"COMBOBOX"
コンボボックス
"EDIT"
エディットボックス
"LISTBOX"
リストボックス
"MDICLIENT"
MDIクライアントウィンドウ
"SCROLLBAR"
スクロールバー
"STATIC"
スタティックコントロール
"RichEdit"
リッチエディット1.0コントロール

Riched32.dllをロードしておく必要があります。

"RichEdit20A" (RICHEDIT_CLASSA) (ANSI版)
"RichEdit20W" (RICHEDIT_CLASSW) (Unicode版)
リッチエディット2.0コントロール

Riched20.dllをロードしておく必要があります。

コモンコントロールライブラリにより、次のコモンコントロールクラスが提供されます。これらを使用するには、InitCommonControls関数またはInitCommonControlsEx関数を呼び出して、使用するコントロールのクラスを登録しておく必要があります。

"SysAnimate32" (ANIMATE_CLASS)
アニメーションコントロール
"msctls_hotkey32" (HOTKEY_CLASS)
ホットキーコントロール
"msctls_progress32" (PROGRESS_CLASS)
プログレスバー
"msctls_statusbar32" (STATUSCLASSNAME)
ステータスバー
"ToolbarWindow32" (TOOLBARCLASSNAME)
ツールバー
"tooltips_class32" (TOOLTIPS_CLASS)
ツールチップコントロール
"msctls_trackbar32" (TRACKBAR_CLASS)
トラックバー
"msctls_updown32" (UPDOWN_CLASS)
アップダウンコントロール
"ComboBoxEx32" (WC_COMBOBOXEX)
拡張コンボボックス
"SysHeader32" (WC_HEADER)
ヘッダーコントロール
"SysListView32" (WC_LISTVIEW)
リストビュー
"SysTabControl32" (WC_TABCONTROL)
タブコントロール
"SysTreeView32" (WC_TREEVIEW)
ツリービュー
"SysDateTimePick32" (DATETIMEPICK_CLASS)
Comctl32.dll Version 4.70 以降: DTP コントロール
"SysMonthCal32" (MONTHCAL_CLASS)
Comctl32.dll Version 4.70 以降: 月間予定表コントロール
"ReBarWindow32" (REBARCLASSNAME)
Comctl32.dll Version 4.70 以降: レバーコントロール
"SysIPAddress32" (WC_IPADDRESS)
Comctl32.dll Version 4.71 以降: IPアドレスコントロール
"SysPager" (WC_PAGESCROLLER)
Comctl32.dll Version 4.71 以降: ページャーコントロール
pszWindowName

ウィンドウ名を表す文字列へのポインタを指定します。タイトルバーを持つウィンドウスタイルが指定されている場合には、この文字列がタイトルバーに表示されます。ボタン、チェックボックス、スタティックコントロールなどのコントロールを作成する場合には、この文字列がコントロールテキストになります。SS_ICONスタイルを持つスタティックコントロールを作成する場合、この文字列を使用してアイコン名またはIDを指定します。IDを指定する場合は、"#num"numはIDを表す整数)の形式で指定します。

dwStyle

作成されるウィンドウスタイルを指定します。

定義済みコントロールには、特有のスタイルを持つものがあります。システム定義済みコントロールを作成する場合は、上記のスタイルの他にコントロール固有のスタイルを組み合わせて指定することができます。コモンコントロールを作成する場合は、上記のスタイルの他にコモンコントロール固有のスタイルを組み合わせて指定することができます。

x, y

作成するウィンドウの座標を指定します。オーバーラップウィンドウやポップアップウィンドウを作成するときはスクリーン座標で、子ウィンドウを作成するときはクライアント座標で指定します。

オーバーラップウィンドウを作成する際に、xパラメータに0x80000000 (CW_USEDEFAULT) を指定すると、デフォルトの位置にウィンドウを作成します。このとき、yパラメータは無視されます。その他のウィンドウを作成する際にCW_USEDEFAULTを指定すると0に設定されます。

nWidth, nHeight

作成するウィンドウのサイズを指定します。

オーバーラップウィンドウを作成する際に、nWidthパラメータに0x80000000 (CW_USEDEFAULT) を指定すると、デフォルトの幅と高さが使用されます。このとき、nHeightパラメータは無視されます。その他のウィンドウの場合は0に設定されます。

hWndParent

作成されるウィンドウの親ウィンドウのハンドルを指定します。子ウィンドウまたはポップアップウィンドウを作成するには、有効なウィンドウハンドルを指定しなければいけません。ポップアップウィンドウを作成する場合は、このパラメータを指定するかどうかは任意です。親ウィンドウを持たないウィンドウを作成する場合は0 (NULL) を指定します。

Windows 2000/XP: メッセージ専用ウィンドウを作成するには、-3 (HWND_MESSAGE) または既存のメッセージ専用ウィンドウのハンドルを指定します。

hMenu

ウィンドウスタイルに応じて、メニューハンドルまたは子ウィンドウIDを指定します。

オーバーラップウィンドウやポップアップウィンドウを作成する場合は、ウィンドウで使用されるメニューのハンドルを指定します。クラスメニューを使用する場合は0 (NULL) を指定します。

子ウィンドウ(コントロール)を作成する場合は子ウィンドウID(コントロールID)を指定します。子ウィンドウIDは、子ウィンドウがその親ウィンドウにイベントを通知する際のウィンドウ識別値です。子ウィンドウIDはアプリケーションにより決定されます。同じ親ウィンドウを持つすべての子ウィンドウは、それぞれ固有のIDを持つ必要があります。

hInstance

Windows 95/98/Me: ウィンドウに関連付けられるモジュールのインスタンスハンドルを指定します。

Windows NT/2000/XP: このパラメータは無視されます。

pParam

WM_CREATEメッセージのlParamパラメータとして渡される、CREATESTRUCT構造体へのポインタを指定します。MDIクライアントウィンドウを作成する場合は、CLIENTCREATESTRUCT構造体へのポインタを指定します。不要な場合は0 (NULL) を指定します。

戻り値

成功すると、作成されたウィンドウのハンドルが返ります。

失敗すると 0 (NULL) が返ります。拡張エラー情報を取得するには、GetLastError関数を使います。

解説

CreateWindowEx関数は、作成しようとしているウィンドウにWM_NCCREATE, WM_NCCALCSIZE, WM_CREATEメッセージを送信します。

子ウィンドウを作成した場合には、デフォルトの位置は最下層のZオーダーになります。トップレベルウィンドウを作成した場合には、デフォルトの位置は最上位のZオーダーになります。ただし、作成ウィンドウ自身が最上位スタイルを持たない限り、ほかの最上位ウィンドウよりも下におかれます。

Windows 95/98/Me: システムは最大16,364個のウィンドウハンドルをサポートします。

Windows NT/2000/XP: dwExStyleパラメータにWS_EX_NOACTIVATEを指定すると、システムによるフォアグラウンドアクティブ化がされないようになります。ユーザーがウィンドウをクリックした際にキューアクティブ化されないようにするには、WM_MOUSEACTIVATEメッセージを処理する必要があります。ウィンドウをフォアグラウンド化またはアクティブ化するには、SetActiveWindow関数またはSetForegroundWindow関数を使用します。WM_NCACTIVATEメッセージにFALSEを返すことによってウィンドウのキューアクティブが失われないようにすることはできます。ただし、アクティブ化される時の戻り値は無視されます。

対応情報

Windows 95 以降 / Windows NT 3.1 以降