[Win 32 SDK基本]Edit Controlの詳細


本文はCSDNユーザーzuishikonghuanが作成したもので、転載は出典を明記してください.http://blog.csdn.net/zuishikonghuan/article/details/46773455 
Win 32ウィンドウコントロールについてもいろいろお話ししましたが、今日は編集ボックスEdit Controlコントロールについてお話しします.
MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/bb775458(v=vs.85).aspx
実はまだサブウィンドウで、staticのあの節ははっきり言って、繰り返しないで、このコントロールのクラス名はEditです
2つのedit controlを作成します.
やはり私のブログ「ウィンドウの詳細」(住所:http://blog.csdn.net/zuishikonghuan/article/details/46378475)のコードを元に書き続ける
HWND edit1 = 0;
HWND edit2 = 0;
		edit1 = CreateWindow(TEXT("Edit"), TEXT("Edit Control"), WS_CHILD | WS_VISIBLE | ES_LEFT, 200, 260, 100, 20, hwnd, (HMENU)8, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
		SendMessage(edit1, WM_SETFONT, (WPARAM)GetStockObject(17), 0);

		edit2 = CreateWindow(TEXT("Edit"), TEXT("  Edit Control\r
Edit Control"), WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL | ES_AUTOVSCROLL, 250, 300, 150, 80, hwnd, (HMENU)8, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL); SendMessage(edit2, WM_SETFONT, (WPARAM)GetStockObject(17), 0);

効果図:
[Win32SDK基本]Edit Control详解_第1张图片
一、スタイルスタイルスタイル:
1.複数行編集ボックスES_MULTILINE
2.整列方式ES_CENTER(中央)ES_LEFT(左揃え)ES_RIGHT(右揃え)注意:右揃えの複数行編集コントロールはES_AUTOHSCROLLスタイルではなく、つまり水平にスクロールできない.
3.テキストと入力方式ES_LOWERCASE:すべての大文字を編集コントロールに入力して小文字に変換します.
ES_UPPERCASE:すべての小文字を大文字に変換します.
ES_NUMBER:数字入力のみ許可
ES_READONLY:編集コントロールを読み取り専用状態に変更します.
ES_PASWORD:(パスワード編集ボックス)単行編集コントロールのすべての文字をアスタリスクとして表示します.アプリケーションでは、EM_SETPASSWORDCHARメッセージを使用して異なる表示文字を定義できます.編集コントロールがCoctl 32.dllバージョン6を使用している場合は、黒い円のデフォルト文字を使用します.編集コントロールが以前のバージョンの共通コントロールから、デフォルトの文字はアスタリスクです.
ES_OEMCONVERT:編集コントロールにテキストを入力してWindowsから文字をOEM文字セットに変換し、Windowsロールセットに戻ります.これにより、アプリケーションがCharToOem関数を呼び出すと、コントロールOEM文字を編集するWindowsの文字列が適切に変換されます.ES_OEMCONVERTの最も有用な編集コントロールには、Unicodeがサポートされていないファイル名が含まれています.
4.Receive Return Key:複数行の編集ボックスで有効です.ES_WANTRETURN:ユーザーがリターンキーを押すと改行します.ESがありませんWANTRETURNの場合、ユーザーはCTRL+ENTERキーを押してリターンを挿入する必要があります.
5.その他:WS_VSCOLL:垂直スクロールバー付きWS_HSCROLL:水平スクロールバー付きES_AUTOHSCROLL:単行入力のテキスト幅が編集ボックスの幅より大きい場合、自動的に水平スクロールES_AUTOVSCOLL:入力したテキストの高さが編集ボックスの高さより大きい場合、自動的に垂直にスクロールする
また、拡張スタイルWS_EX_CLIENTEDGE用途:3 Dボーダー付き
コード:
		edit3 = CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("Edit"), TEXT("Edit Control"), WS_CHILD | WS_VISIBLE | ES_LEFT, 200, 180, 100, 20, hwnd, (HMENU)8, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
		SendMessage(edit3, WM_SETFONT, (WPARAM)GetStockObject(17), 0);

効果図:
システムスタイルを開くとき:
[Win32SDK基本]Edit Control详解_第2张图片
オープンしていません:
[Win32SDK基本]Edit Control详解_第3张图片
二、EN_CHANGE通知メッセージ
edit controlコンテンツが変更された場合、EN_を送信するCHANGEは、親ウィンドウ(WM_COMMANDメッセージを介して)に通知する.
MSDN: wParam The LOWORD contains the identifier of the edit control. The HIWORD specifies the notification code. (下位16ビットは編集ボックスのID、上位16ビットは通知コード)
lParam A handle to the edit control.(編集ボックスのハンドル)
三、制御メッセージ:
1.EM_GETSEL取得選択部の開始と終了文字位置
wParamはDWORD値を指すポインタであり、受信の開始位置である.このパラメータはNULLであってもよい.
lParamは、DWORD値を指すポインタであり、受信した終了位置(the position of the first unselected character after the end of the selection.拙劣な翻訳:選択領域後の最初の選択された文字がない位置).このパラメータはNULLであってもよい.
選択されていない場合、開始値と終了値は現在のシンボルの位置です.
2.EM_SETSELは、wParamのDWORD値の一部を選択し、位置を開始します.
lParamはDWORD値で、終了位置です.
開始が0、終了が-1の場合、すべてのテキストが選択されます.開始が-1の場合、選択したすべての部分が削除されます.
3.切り取り削除貼り付けのコピー
WM_COPY:選択したテキストWM_をコピーCUT:選択したテキストWM_を切り取るCLEAR:選択したテキストWMを削除PASTE:クリップボードのテキストを現在の入力位置に貼り付ける
4. EM_REPLACESEL:選択したテキストの代わりに他のテキストを使用します.たとえば、SendMessage(hedit,EM_REPLACESEL,0,(LPARAM)文字列ポインタ).
5.EM_GETLINECOUNT:入力された行数を統計する例:行数=SendMessage(hedit,EM_GETLINECOUNT,0,0);
四、テキストの設定/テキストの取得
1.テキストの設定
関数のプロトタイプ:
BOOL WINAPI SetWindowText(
  _In_     HWND    hWnd,
  _In_opt_ LPCTSTR lpString
);
パラメータ1:edit control(または他のウィンドウ)のハンドル
パラメータ2:文字列ポインタ
2.テキスト長を取得する
関数のプロトタイプ:
int WINAPI GetWindowTextLength(
  _In_ HWND hWnd
);

パラメータ1:edit control(または他のウィンドウ)のハンドル戻り値:テキスト長
3.GetWindowTextの取得
関数のプロトタイプ:
int WINAPI GetWindowText(
  _In_  HWND   hWnd,
  _Out_ LPTSTR lpString,
  _In_  int    nMaxCount
);

パラメータ1:edit control(または他のウィンドウ)のハンドルパラメータ2:テキストを受信するバッファへのポインタパラメータ3:バッファ内に保存する文字の最大個数戻り値:実際に取得した文字個数を返します.