「Windows API」の版間の差分

GetWindowText() 関数
(ボタンコントロールが押されたときの処理の記述方法)
(GetWindowText() 関数)
 
<source lang=c>
 
case WM_COMMAND:
{
 
さて、われわれが行いたいのは、エディットボックスの文字列の取得ですから、上述の MessageBox() の代わりにエディットボックスの文字列を取得するコードを記述する必要があります。
 
まず、エディットボックスに名前をつける必要があります。どのエディットボックスから文字を読みこむか指定するためです。
 
とりあえず editbox1 という名前をつけたとしましょう。
 
エディットボックスに名前をつけるには、エディットボックスの作成時に、下記のように代入する必要があります。
 
<source lang=c>
case WM_CREATE:
editbox1 = CreateWindow(TEXT("EDIT"), TEXT("ここに名前を入力"), // この行の冒頭が変わった。
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,
10, 10, 200, 40, hWnd, (HMENU)1, hInst, NULL);
 
CreateWindow(
TEXT("BUTTON"), TEXT("決定"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
110, 70, 100, 50, hWnd, (HMENU)BUTTON_ID1, hInst, NULL);
</source>
 
 
エディットボックスにある文字列を取得するには、GetWindowText() 関数を使います。
 
GetWindowText() 関数の第1引数で、どのコントロールから取得するかを指定するので、そこに 先ほど名づけたエディットボックスの名前を入れます。また、取得した変数を代入するための変数として、事前に文字列型を定義しておきます。下記のコードでは、エディットボックスから取得した文字列を、 変数 kakunou に格納します。
 
<source lang=c>
case BUTTON1_ID:
GetWindowText(editbox1, kakunou, 100);
InvalidateRect(hWnd, NULL, FALSE);
UpdateWindow(hWnd);
</source>
 
これだけだとエラーになってしまいますので、次のようなコードをソース冒頭のグローバル領域に追加します。
 
<source lang=c>
static HWND editbox1;
TCHAR kakunou[256];
</source>
 
 
 
文字を取得しただけでは、まだ画面の描画内容の更新は行われません。
 
ボタンコントロールを押した場合にかぎらず、一般にwin32APIで画面の更新をするには、さらに下記の InvalidateRect 命令と UpdateWindow 命令が必要です。
 
<source lang=c>
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
</source>
は決まり文句ですので、鵜呑みにしてください。
 
 
また、 case WM_PAINT: に、描画内容を書く必要があります。
 
たとえば case WM_PAINT: に、
<source lang=c>
TextOut(hdc, 200, 200, kakunou, lstrlen(kakunou));
</source>
のコードを追加したりします。
 
上述のこれらのコードを記述すれば、エディットボックスの入力結果を、ウィンドウに表示できます。
 
 
20,382

回編集