今回は、ダイアログボックスにエディット、ボタンを付けます。 ボタンを押せば、エディットに入力した文字が表示されるようにします。
エディットコントロールは、文字列を表示・編集するためのコントロールです。Windowsのメモ帳に相当します。
ボタン(ダイアログ) - インコのWindowsSDK で作成したソースを修正します。
ここでは、Reseditで作成する方法も説明します。
流れ
WM_COMMAND
1.ボタンが押されたときに、WM_COMMANDメッセージがきます。
このとき、ウィンドウプロシージャ(メッセージを処理する関数)の3番目の引数(wParam)のうち、下位16ビットは、リソースIDなので、これを処理します。
LOWORD()で、32ビットから下位16ビットを取り出します。
2.GetDlgItemText()でテキストデータを取得します。
ここでは、エディットからテキストデータを取得して、ポインタ型変数 szBuf_edit1 (下記の場合は、lpString)に格納されます。
UINT GetDlgItemText( HWND hDlg, // ダイアログボックスのハンドル int nIDDlgItem, // コントロールID LPTSTR lpString, // テキストを受け取るバッファへのポインタ int nMaxCount // 文字列の最大サイズ );
3.SetDlgItemText()で取得したテキストデータを表示
リソースファイル
1.ダイアログボックスにエディット[EDITTEXT]を追加
EDITTEXT id, x0, y0, width, height, style
id | コントロールID |
x0 | エディット左上のx座標 |
y0 | エディット左上のy座標 |
width | エディットの幅 |
height | エディットの高さ |
style |
スタイル ウインドウスタイルと、 エディットのスタイルが指定可能 |
ソースコードの入力
ソースコードは下記のように入れてください。
#include <windows.h> #include "resource.h" // グローバル変数: TCHAR szBuf_edit1[1024]; // このコード モジュールに含まれる関数の宣言を転送します: BOOL CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow ) { DialogBox(hInstance, TEXT("DIALOG_BOX"), NULL, DialogProc); return 0; } BOOL CALLBACK DialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { UINT wmId; switch (msg) { case WM_CLOSE: EndDialog(hWnd, IDOK); break; case WM_COMMAND: wmId = LOWORD(wParam); switch (wmId) { case IDC_BUTTON1: GetDlgItemText(hWnd, IDC_EDIT1, (LPTSTR)szBuf_edit1, (int)sizeof(szBuf_edit1)); SetDlgItemText(hWnd, IDC_STATIC1, (LPCTSTR)szBuf_edit1); break; } break; } return FALSE; }
#define IDC_EDIT1 1001
#define IDC_BUTTON1 1002
#define IDC_STATIC1 1003
#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif
Reseditで作成した場合は、これとは異なるソースコードになります。
上記の太線で示している箇所のみ追加です。
#include <windows.h>
#include "resource.h"
/////////////////////////////////////////////////////////////////////////////
//
// ダイアログ
//
DIALOG_BOX DIALOG 0, 0, 170, 62
FONT 9, "MS UI Gothic"
CAPTION "ダイアログ"
BEGIN
EDITTEXT IDC_EDIT1, 2, 2, 166, 13, ES_AUTOHSCROLL
PUSHBUTTON "描写", IDC_BUTTON1, 132, 17, 26, 13
LTEXT "",IDC_STATIC1,4,40,114,8
END
Reseditで作成した場合は、これとは異なるソースコードになります。
上記の太線で示している箇所のみ追加です。