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

RegisterClass 関数または RegisterClassEx 関数の以前の呼び出しによって作成された、null で終わる文字列またはクラス アトム。 atom は 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 は、重複するウィンドウに対してのみ有効です。ポップアップ ウィンドウまたは子ウィンドウに指定した場合、 x パラメーターと y パラメーターは 0 に設定されます。

[in] Y

型: int

ウィンドウの最初の垂直方向の位置。 重なり合ったウィンドウまたはポップアップ ウィンドウの場合、 y パラメーターはウィンドウの左上隅の初期 y 座標 (画面座標) です。 子ウィンドウの場合、 y は親ウィンドウのクライアント領域の左上隅を基準とした子ウィンドウの左上隅の初期 y 座標です。 リスト ボックス の場合、y は、親ウィンドウのクライアント領域の左上隅を基準とした、リスト ボックスのクライアント領域の左上隅の最初の y 座標です。

WS_VISIBLE スタイル のビット セットを使用して重複するウィンドウが作成され、x パラメーターが CW_USEDEFAULT に設定されている場合、y パラメーターによってウィンドウの表示方法が決まります。 y パラメーターがCW_USEDEFAULTされている場合、ウィンドウマネージャーは、ウィンドウが作成された後、SW_SHOW フラグを使用して ShowWindow を呼び出します。 y パラメーターが他の値である場合、ウィンドウ マネージャーはその値を nCmdShow パラメーターとして ShowWindow を呼び出します。

[in] nWidth

型: int

ウィンドウの幅 (デバイス単位)。 重複するウィンドウの場合、 nWidth はウィンドウの幅、画面座標、 またはCW_USEDEFAULTです。 nWidthCW_USEDEFAULT場合、システムはウィンドウの既定の幅と高さを選択します。既定の幅は、最初の x 座標から画面の右端まで拡張されます。既定の高さは、最初の y 座標からアイコン領域の上部まで拡張されます。 CW_USEDEFAULT は、重複するウィンドウに対してのみ有効です。ポップアップ ウィンドウまたは子ウィンドウ にCW_USEDEFAULT が指定されている場合、 nWidth パラメーターと nHeight パラメーターは 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 クライアント ウィンドウを作成する場合、 lpParam はCLIENTCREATESTRUCT 構造体を指す必要があります。 MDI クライアント ウィンドウが CreateWindow を 呼び出して MDI 子ウィンドウを作成する場合、 lpParam はMDICREATESTRUCT 構造体を指す必要があります。 追加のデータが必要ない場合、lpParamNULL になる可能性があります。

戻り値

型: HWND

関数が成功した場合、戻り値は新しいウィンドウへのハンドルです。

関数が失敗した場合は、返される値は NULL です。 詳細なエラー情報を得るには、GetLastError を呼び出します。

この関数は、通常、次のいずれかの理由で失敗します。

  • 無効なパラメーター値
  • システム クラスが別のモジュールによって登録されました
  • WH_CBT フックがインストールされ、エラー コードが返されます
  • ダイアログ テンプレート内のいずれかのコントロールが登録されていない場合、またはそのウィンドウ ウィンドウ プロシージャが WM_CREATE または WM_NCCREATE

注釈

CreateWindowEx 関数は、WM_NCCREATEWM_NCCALCSIZEおよびWM_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 パラメーターで指定できるリッチ エディット コントロール スタイルの表については、「リッチ エディット コントロール スタイル」を参照してください。

スクロールバー スクロール ボックスを含み、両端に方向矢印がある四角形を指定します。 スクロール バーは、ユーザーがコントロールをクリックするたびに、親ウィンドウに通知メッセージを送信します。 親ウィンドウは、必要に応じてスクロール ボックスの位置を更新します。 詳細については、「 スクロール バー」を参照してください。

dwStyle パラメーターで指定できるスクロール バー コントロール スタイルの表については、「スクロール バー コントロールのスタイル」を参照してください。

静的 他のコントロールのラベル付け、ボックス設定、または分離に使用する単純なテキスト フィールド、ボックス、または四角形を指定します。 静的コントロールは入力を受け取せず、出力も提供しません。 詳細については、「 静的コントロール」を参照してください。

dwStyle パラメーターで指定できる静的コントロール スタイルの表については、「静的コントロールのスタイル」を参照してください。

 

dwExStyleWS_EX_NOACTIVATE値は、システムによるフォアグラウンドアクティブ化を防ぎます。 ユーザーがウィンドウをクリックしたときにキューがアクティブ化されないようにするには、 WM_MOUSEACTIVATE メッセージを適切に処理する必要があります。 ウィンドウをフォアグラウンドに移動したり、プログラムでアクティブ化したりするには、 SetForegroundWindow または SetActiveWindow を使用します。 falseWM_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 をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winuser.h (Windows.h を含む)
Library 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