CreateWindow
オーバーラップウィンドウ、ポップアップウィンドウ、子ウィンドウのいずれかを作成します。ウィンドウの作成にあたっては、ウィンドウクラス、ウィンドウタイトル、およびウィンドウスタイルを指定します。必要に応じて、ウィンドウの初期位置と初期サイズも指定できます。親ウィンドウまたはオーナーウィンドウも指定でき、メニューを持たせる場合はメニューも指定します。
CreateWindow 関数でサポートされているウィンドウスタイルに加えて拡張ウィンドウスタイルも使用する必要がある場合は、CreateWindowEx 関数を使ってください。
HWND CreateWindow( LPCTSTR lpClassName, // 登録されているクラス名 LPCTSTR lpWindowName, // ウィンドウ名 DWORD dwStyle, // ウィンドウスタイル int x, // ウィンドウの横方向の位置 int y, // ウィンドウの縦方向の位置 int nWidth, // ウィンドウの幅 int nHeight, // ウィンドウの高さ HWND hWndParent, // 親ウィンドウまたはオーナーウィンドウのハンドル HMENU hMenu, // メニューハンドルまたは子ウィンドウ ID HINSTANCE hInstance, // アプリケーションインスタンスのハンドル LPVOID lpParam // ウィンドウ作成データ );
パラメータ
- lpClassName
- NULL で終わる文字列へのポインタかクラスアトムを指定します。クラスアトムを指定する場合は、RegisterClass 関数または RegisterClassEx 関数の呼び出しにより作成したものを使用します。lpClassName パラメータの下位ワードにアトムを格納し、上位ワードに 0 を格納します。
lpClassName パラメータに文字列を指定する場合は、ウィンドウクラスの名前を指定します。クラス名には、RegisterClass 関数または RegisterClassEx 関数で登録した名前を指定できます。ただし、クラスを登録したモジュールとウィンドウを作成するモジュールが同一でなければなりません。クラス名には、定義済みのシステムクラス名を指定することもできます。指定できるシステムクラス名については、解説を参照してください。
- lpWindowName
- ウィンドウ名が入った、NULL で終わる文字列へのポインタを指定します。
ウィンドウスタイルでタイトルバーを指定した場合は、このパラメータに指定したウィンドウタイトルがタイトルバーに表示されます。ボタン、チェックボックス、スタティックコントロールなどのコントロールを作成する場合は、コントロールのテキストを指定します。SS_ICON スタイルを持つスタティックコントロールを作成する場合は、アイコンの名前または識別子を指定します。識別子を指定する場合は、"#num" という構文を使ってください。
- dwStyle
- 作成するウィンドウのスタイルを指定します。任意の組み合わせの に加えて、解説に示すコントロールスタイルも指定できます。
- x
- ウィンドウの横方向の初期位置を指定します。オーバーラップウィンドウまたはポップアップウィンドウを作成する場合は、ウィンドウの左上端の x 座標をスクリーン座標で指定します。子ウィンドウを作成する場合は、ウィンドウ左上端の x 座標を、親ウィンドウのクライアント領域の左上端に対する相対座標で指定します。
x パラメータに CW_USEDEFAULT を指定すると、ウィンドウの左上端には既定位置が使用され、y パラメータは無視されます。CW_USEDEFAULT を指定できるのは、オーバーラップウィンドウを作成する場合だけです。ポップアップウィンドウおよび子ウィンドウに CW_USEDEFAULT を指定すると、x パラメータと y パラメータは 0 に設定されます。
- y
- ウィンドウの縦方向の初期位置を指定します。オーバーラップウィンドウまたはポップアップウィンドウを作成する場合は、ウィンドウの左上端の y 座標をスクリーン座標で指定します。子ウィンドウを作成する場合は、ウィンドウ左上端の y 座標を、親ウィンドウのクライアント領域の左上端に対する相対座標で指定します。リストボックスの場合、y パラメータは、親ウィンドウのクライアント領域の左上端に対するリストボックスのクライアント領域の左上端の相対 y 座標の初期値となります。
スタイルの WS_VISIBLE をセットしてオーバーラップウィンドウを作成した場合、x パラメータに CW_USEDEFAULT を指定すると、y パラメータは無視されます。
- nWidth
- ウィンドウの幅をデバイス単位で指定します。オーバーラップウィンドウの場合は、スクリーン座標でのウィンドウの幅か CW_USEDEFAULT を指定します。CW_USEDEFAULT を指定すると、既定の幅と高さが使用されます。既定の幅は、初期 x 座標から画面の右端までの距離、既定の高さは、初期 y 座標からアイコン領域の上端までの距離です。CW_USEDEFAULT を指定できるのは、オーバーラップウィンドウを作成する場合だけです。ポップアップウィンドウおよび子ウィンドウに CW_USEDEFAULT を指定すると、nWidth パラメータと nHeight パラメータは 0 に設定されます。
- nHeight
- ウィンドウの高さをデバイス単位で指定します。オーバーラップウィンドウの場合は、スクリーン座標でのウィンドウの高さを指定します。nWidth パラメータに CW_USEDEFAULT を指定した場合は、nHeight パラメータは無視されます。
- hWndParent
- 作成するウィンドウの親ウィンドウまたはオーナーウィンドウのハンドルを指定します。子ウィンドウを作成する場合は、必ず有効なウィンドウハンドルを指定してください。ポップアップウィンドウを作成する場合は、このパラメータは省略可能です。
Windows 2000: を作成する場合は、HWND_MESSAGE か、または既存のメッセージ専用ウィンドウのハンドルを指定します。
- hMenu
- ウィンドウスタイルに応じてメニューまたは子ウィンドウ ID を指定します。オーバーラップウィンドウまたはポップアップウィンドウの場合は、ウィンドウと一緒に使用されるメニューのハンドルを指定します。クラスメニューを使う場合は、NULL でかまいません。子ウィンドウの場合は、子ウィンドウ ID を指定します。子ウィンドウ ID とは、ダイアログボックスコントロールがその親ウィンドウにイベントを通知するときに使用する整数値です。子ウィンドウ ID はアプリケーションで決定しますが、同じ親ウィンドウを持つ子ウィンドウの間では重複していてはなりません。
- hInstance
- Windows 95/98:ウィンドウに関連付けられたモジュールのインスタンスハンドルを指定します。
Windows NT/2000:このパラメータは無視されます。
- lpParam
- メッセージの lParam パラメータで渡される 構造体に入れてウィンドウに渡される値へのポインタを指定します。MDI クライアントウィンドウを作成する場合、 構造体へのポインタを指定しなければなりません。
戻り値
関数が成功すると、作成されたウィンドウのハンドルが返ります。
関数が失敗すると、NULL が返ります。拡張エラー情報を取得するには、 関数を使います。
この関数の失敗で考えられる一般的な原因は次のとおりです。
•パラメータに無効な値が指定された。
•システムクラスを登録したモジュールが別のモジュールである。
•WH_CBT フックがインストールされており、失敗コードを返した。
•WM_CREATE または WM_NCCREATE のウィンドウプロシージャが失敗した。
解説
この関数は、制御を戻す前にウィンドウプロシージャに メッセージを送ります。オーバーラップウィンドウ、ポップアップウィンドウ、および子ウィンドウに対しては、、、 の 3 つのメッセージを送ります。 メッセージの lParam パラメータには、 構造体へのポインタを格納します。スタイルに WS_VISIBLE を指定した場合は、さらに、ウィンドウのアクティブ化と表示に必要となるすべてのメッセージをウィンドウに送ります。
作成したウィンドウのボタンをタスクバーに表示するかどうかを指定する方法については、「」を参照してください。
lpClassName パラメータには、次に示す定義済みのシステムクラスを指定できます。dwStyle パラメータには、対応するコントロールスタイルしか指定できないので注意してください。
| システムクラス | 意味 |
| BUTTON | ユーザーがクリックしてオンにしたりオフにしたりできるボタンを表す小さな長方形の子ウィンドウです。ボタンコントロールは、単独でもグループでも使用でき、ラベルを付けることもテキストなしで表示することもできます。通常、ユーザーがボタンをクリックすると、その外観が変化します。詳細については、「」を参照してください。
dwStyle パラメータに指定できるボタンスタイルの表については、「」を参照してください。 |
| COMBOBOX | リストボックスと選択フィールドから成る、エディットコントロールに似たコントロールです。このスタイルを使う場合、リストボックスは、常に表示するかまたはドロップダウン表示することになります。リストボックスが可視状態のときに、ユーザーが選択フィールドに文字を入力すると、リストボックス内の先頭が入力した文字と一致する最初の項目が強調表示されます。逆に、ユーザーがリストボックス内の項目を選択すると、選択したテキストが選択フィールドに表示されます。詳細については、「」を参照してください。
dwStyle パラメータに指定できるコンボボックススタイルの表については、「」を参照してください。 |
| EDIT | ユーザーがキーボードからテキストを入力できる長方形の子ウィンドウです。ユーザーは、コントロールをクリックするか、または[Tab]キーを使ってコントロールを選択することにより、そのコントロールにキーボードフォーカスを与えることができます。エディットコントロール上でキャレットが点滅表示しているときには、テキストを入力できます。文字を削除するには[BackSpace]キーなどを使います。キャレットの移動、置換する文字の選択などには、マウスを使用できます。詳細については、「」を参照してください。
dwStyle パラメータに指定できるエディットコントロールスタイルの表については、「」を参照してください。 |
| LISTBOX | 文字列のリスト( 一覧)です。ユーザーに選択肢( ファイル名など)の一覧を提示する場合に使用します。ユーザーは、クリックにより文字列を選択できます。選択された文字列は強調表示されます。このとき、親ウィンドウに通知メッセージが送られます。詳細については、「」を参照してください。
dwStyle パラメータに指定できるリストボックスコントロールスタイルの表については、「」を参照してください。 |
| MDICLIENT | MDI クライアントウィンドウです。このウィンドウは、MDI アプリケーションの子ウィンドウを制御するメッセージを受け取ります。推奨されるスタイルビットは、WS_CLIPCHILDREN と WS_CHILD です。スクロールバーを付けるときは、WS_HSCROLL と WS_VSCROLL を使います。詳細については、「」を参照してください。 |
| RichEdit | Version 1.0 のリッチエディットコントロールです。このウィンドウでは、文字書式および段落書式を持つテキストを表示し、編集できます。埋め込みの COM オブジェクトも入れることができます。詳細については、「」を参照してください。
dwStyle パラメータに指定できるリッチエディットコントロールスタイルの表については、「」を参照してください。 |
| RICHEDIT_CLASS | Version 2.0 のリッチエディットコントロールです。このコントロールでは、文字書式および段落書式を持つテキストを表示し、編集できます。埋め込みの COM オブジェクトも入れることができます。詳細については、「」を参照してください。
dwStyle パラメータに指定できるリッチエディットコントロールスタイルの表については、「」を参照してください。 |
| SCROLLBAR | つまみを持ち、両端に矢印ボタンがある長方形です。ユーザーがコントロールをクリックするたびに、親ウィンドウに通知メッセージが送られます。つまみの位置の更新は、必要に応じて親ウィンドウが行います。詳細については、「」を参照してください。
dwStyle パラメータに指定できるスクロールバーコントロールスタイルの表については、「」を参照してください。 |
| STATIC | 単純なテキストフィールドやボックスとして使ったり、他のコントロールへのラベル付け、複数のコントロールのグループ化や分離などに使える長方形です。スタティックコントロールは入出力を行いません。詳細については、「」を参照してください。
dwStyle パラメータに指定できるスタティックコントロールスタイルの表については、「」を参照してください。 |
Windows 95:最大 16,364 個のウィンドウハンドルがサポートされています。
注 アプリケーションのリンク時に Windows Version 4.x を指定した場合、ウィンドウメニューを持つウィンドウでなければ、キャプションボタンを持たせることはできません。アプリケーションのリンク時に Windows Version 3.x を指定した場合は、この限りではありません。
対応情報
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装
参照
CreateWindowEx, EnableWindow, RegisterClass, RegisterClassEx, ShowWindow, , , , ,
