「Windows API」の版間の差分

ボタンコントロールが押されたときの処理の記述方法
(確定ボタンの配置)
(ボタンコントロールが押されたときの処理の記述方法)
という意味です。
 
 
後の処理のために、このボタンを呼び出すためのIDをつける必要があります。
 
後ろから3番目の引数(hWnd, NULL, hInst のNULL の部分)がIDです。IDは数字でなければ、なりません。
 
通常、 define マクロで定義するのが慣例です。
 
例えば、
<source lang=c>
CreateWindow(
TEXT("BUTTON"), TEXT("決定"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
110, 70, 100, 50, hWnd, (HMENU)BUTTON1_ID, hInst, NULL);
</source>
と書いたら、
さらにソースファイルの冒頭の、defineマクロのある箇所に、
 
<source lang=c>
#define BUTTON1_ID 10
</source>
 
のように定義して、BUTTON1_ID に任意の数字を与えます。
 
なお HMENU は型名であり、ハンドルの識別番号をあらわす型です。
 
==== 文字列の取得 ====
上述のように、ウィンドウ上に、ボタンコントロールで作成した決定ボタンを配置したとしましょう。
 
まず、ボタンコントロールが押されたときの処理は、
 
<source lang=c>
case WM_COMMAND:
</source>
 
の段落に書きます。この段落は、既にウィザードによって自動作成されています。
 
既に、
 
<source lang=c>
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// 選択されたメニューの解析:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
break;
</source>
 
というようなコードが自動生成されているので、
 
 
 
<source lang=c>
 
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// 選択されたメニューの解析:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
 
case BUTTON1_ID: // このcaseが追加された
MessageBox(hWnd, TEXT("決定ボタンが押されました。"), TEXT("テスト"), MB_OK);
break;
 
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
break;
</source>
 
のように、case ボタンID を追加するだけです。
 
さて、われわれが行いたいのは、エディットボックスの文字列の取得ですから、上述の MessageBox() の代わりにエディットボックスの文字列を取得するコードを記述する必要があります。
 
 
20,382

回編集