エディットコントロール

エディットコントロールはユーザーからの文字の入力を受け付けるコントロールです。

コントロールの作成の基本的なことはボタンコントロールの項を参照してください。

エディットコントロールの作成

エディットコントロールは「EDIT」クラスで作成します。


#define IDC_EDIT 100

CreateWindow(
	L"EDIT", L"デフォルトの文字列",
	WS_CHILD | WS_VISIBLE | WS_BORDER,
	10, 10, 250, 24,
	hWnd, (HMENU)IDC_EDIT, hInst, NULL);

標準では枠線は表示されず、どこにエディットコントロールがあるのかの見分けが付きづらいので、ウィンドウスタイルにWS_BORDERを追加して枠線を表示しています。
エディットコントロール作成時にテキストを設定すると(CreateWindow関数の第二引数)、最初からその文字列が設定された状態になります。
不要ならば空文字やNULLを指定します。
エディットコントロールの作成

この状態ですでにキーボードからの入力が可能です。
コピー&ペーストや右クリックメニューなどの基本的な機能を備えています。
もし文字入力ができない場合はメッセージループにTranslateMessage関数の処理を追加してください。
(→文字の判別)

エディットコントロールのスタイル

エディットコントロールは以下のスタイルが適用できます。

定数 説明
ES_LEFT テキストの左揃え
(デフォルト)
ES_CENTER テキストの中央揃え
ES_RIGHT テキストの右揃え
ES_MULTILINE 複数行のエディットコントロール
ES_UPPERCASE 入力文字を大文字に変換する
ES_LOWERCASE 入力文字を小文字に変換する
ES_NUMBER キー入力を数値のみに限定する
ただし数値以外の文字を貼り付けることは可能
ES_PASSWORD 入力文字の表示をアスタリスク(*)に置き換える
(パスワードなど、文字を画面に表示したくない場合に使用)
単一行エディットコントロールでのみ有効
ES_AUTOVSCROLL 最下行でEnterキーを入力すると自動で上にスクロールする
ES_AUTOHSCROLL 行末でキー入力すると自動で右にスクロールする
ES_NOHIDESEL エディットコントロールがフォーカスを失ったとき、テキストの選択状態の表示を解除しない
ES_READONLY エディットコントロールを読み取り専用にする
ES_WANTRETURN Enterキーの押下で改行する
ダイアログボックス上に作成される複数行エディットコントロール用
ES_OEMCONVERT Unicodeに対応しない古い環境用
(現在は使用しない)

既定ではエディットコントロールの幅以上の文字を入力することはできません。
ES_AUTOHSCROLLスタイルを指定すると、キー入力に合わせて内容がスクロールするようになります。

また、既定では単一行のエディットコントロールが作成されます。
複数行を入力可能にするにはES_MULTILINEスタイルを指定します。
さらに、エディットコントロールの高さ以上の入力を行う場合はES_AUTOVSCROLLスタイルを指定します。

なお、複数行のエディットコントロールにプログラムから文字列を指定する時、改行コードは「\n」ではなくWindowsで使用される「\r\n」を使用します。

その他のウィンドウスタイル

エディットコントロールはよく以下のウィンドウスタイルと組み合わせて使用されます。

定数 説明
WS_VSCROLL 垂直スクロールバーを表示する
WS_HSCROLL 水平スクロールバーを表示する
WS_EX_CLIENTEDGE 窪んだ枠線を表示
(拡張ウィンドウスタイル)

WS_VSCROLL/WS_HSCROLLスタイルはスクロールバーを表示します。
ES_AUTOVSCROLL/ES_AUTOHSCROLLスタイルのみでスクロール自体は可能ですが、キャレットの位置に応じたスクロールしかできません。
特に複数行のエディットコントロールなど、ある程度の長文を読み書きする場合はスクロールバーを表示しておくと良いでしょう。
ただしES_MULTILINEスタイルと同時に適用しないとスクロールバーは動作しません。

WS_EX_CLIENTEDGEスタイルは枠線を立体的に表示します。
多くのウィンドウアプリケーションでは文字入力欄にはこの枠線が利用されています。
これは拡張ウィンドウスタイルなので、CreateWindowEx関数で作成します。


#define IDC_EDIT1 100
#define IDC_EDIT2 101

CreateWindowEx(
	WS_EX_CLIENTEDGE,
	L"EDIT", L"WS_EX_CLIENTEDGE",
	WS_CHILD | WS_VISIBLE,
	10, 10, 250, 24,
	hWnd, (HMENU)IDC_EDIT1, hInst, NULL);

CreateWindowEx(
	WS_EX_CLIENTEDGE,
	L"EDIT", L"スクロールバースクロールバースクロールバー\r\n"
	L"スクロールバースクロールバースクロールバー\r\n"
	L"スクロールバースクロールバースクロールバー\r\n"
	L"スクロールバースクロールバースクロールバー\r\n",
	WS_CHILD | WS_VISIBLE | ES_MULTILINE |
	WS_HSCROLL | WS_VSCROLL,
	10, 50, 250, 80,
	hWnd, (HMENU)IDC_EDIT2, hInst, NULL);

エディットコントロールにスタイルを適用

上段はWS_EX_CLIENTEDGEスタイルを適用しています。
下段はスクロールバーを使用可能にしています。