ダイアログボックスにエディットを付ける

VCwin32アプリケーション1

今回は、ダイアログボックスにエディット、ボタンを付けます。 ボタンを押せば、エディットに入力した文字が表示されるようにします。

エディットコントロールは、文字列を表示・編集するためのコントロールです。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 スタイル
ウインドウスタイルと、 エディットのスタイルが指定可能

VCwin32アプリケーション1

ソースコードの入力

ソースコードは下記のように入れてください。

test.cpp
#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;
}

resource.h

#define IDC_EDIT1 1001
#define IDC_BUTTON1 1002
#define IDC_STATIC1 1003
#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif

Reseditで作成した場合は、これとは異なるソースコードになります。
上記の太線で示している箇所のみ追加です。

test.rc
#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で作成した場合は、これとは異なるソースコードになります。
上記の太線で示している箇所のみ追加です。