EditBox を使う

EditBox から二件のデータを取得して、加算を行います。
DialogBox に [EditControl] や [Button] を貼り付けたように、ウインドウにも Control を貼り付けることができます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの作成

  1. DialogBox のプログラムと同じように、EditControl からタイプ入力したデータを使って加算を行います。
    DialogBox ではビジュアル的に Box を配置できますが、今回はソースコードで配置しなければなりません。
    DialogBox のプログラムは EditControl を使ったデータ入力と表示 を参照して下さい。
  2. テンプレートを使って新規プロジェクト(Sample)を作成して下さい。
    プロジェクトの作成は Windows プログラムを自動的に作成する を参照して下さい。
  3. Sample.cpp を表示して #define の続きに Button のIDを定義して下さい。
        #define IDM_COMPUTE (WM_APP + 0)
        #define IDM_END     (WM_APP + 1)
        
  4. 「グローバル変数:」の所に次のコードを追加して下さい。
    EditControl と Button の HANDLE です。
        HWND    g_hEdit1;
        HWND    g_hEdit2;
        HWND    g_hEdit3;
        HWND    g_hButton1;
        HWND    g_hButton2;
        
  5. ウインドウの見栄えを良くするために、背景色をライトグレーに変更します。
    MyRegisterClass() 関数を表示して、hbrBackground に LTGRAY_BRUSH を設定します。
        ATOM MyRegisterClass(HINSTANCE hInstance)
        {
            ・・・
            wcex.hbrBackground  = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
        
  6. ウインドウのサイズが大きすぎるので、Box に合わせてサイズを小さくします。
        BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
        {
            ・・・
            hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
                CW_USEDEFAULT, CW_USEDEFAULT, 340, 320, NULL, NULL, hInstance, NULL);
        
  7. CALLBACK WndProc( ) 関数を表示して、計算に使用する作業領域を定義します。
        LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
        {
            ・・・
            char work[20];
            int  v1,v2;
        
  8. CALLBACK WndProc() 関数の続きです。
    WM_CREATE: を追加して、ウインドウに EditControl と Button を貼り付けます。
    WS_CHILD が子ウインドウを意味し、hWnd が親のウインドウです。
    「20, 70, 120, 25」などが Control を配置する座標で、X座標, Y座標, 幅, 高さです。
    g_hButton1 に IDM_COMPUTE が、g_hButton2 に IDM_END が設定されていることに注目して下さい。
    g_hButton1 が「加算」ボタンで、g_hButton2 が「終了」ボタンです。
        switch (message)
        {
        case WM_CREATE:
            // EDITウインドウの生成
            g_hEdit1 = CreateWindow("EDIT", NULL, (WS_CHILD | WS_VISIBLE | WS_BORDER),
                                    20, 70, 120, 25, hWnd, NULL, hInst, NULL);
            g_hEdit2 = CreateWindow("EDIT", NULL, (WS_CHILD | WS_VISIBLE | WS_BORDER),
                                    180, 70, 120, 25, hWnd, NULL, hInst, NULL);
            g_hButton1 = CreateWindow("BUTTON", NULL, WS_CHILD | WS_VISIBLE,
                                    80, 120, 80, 30, hWnd, (HMENU)IDM_COMPUTE, hInst, NULL);
            SetWindowText(g_hButton1,"加算");
            g_hButton2 = CreateWindow("BUTTON", NULL, WS_CHILD | WS_VISIBLE,
                                    170, 120, 80, 30, hWnd, (HMENU)IDM_END, hInst, NULL);
            SetWindowText(g_hButton2,"終了");
            g_hEdit3 = CreateWindow("EDIT", NULL, (WS_CHILD | WS_VISIBLE | WS_BORDER),
                                    20, 180, 120, 25, hWnd, NULL, hInst, NULL);
            break;
        
  9. CALLBACK WndProc() 関数の続きです。
    case IDM_EXIT: の次に case IDM_END: を追加すると g_hButton2 のクリックでプログラムが終了します。
        case IDM_EXIT:
        case IDM_END:
            DestroyWindow(hWnd);
            break;
        
  10. CALLBACK WndProc() 関数の続きです。
    g_hButton1 のクリックで加算を行います。
    GetWindowText() で EditControl にタイプされた文字列を取得します。
    atoi(work) で文字列(数字)を int に変換します。
    計算結果を文字列編集して、EditControl に表示します。
    wsprintf() は sprintf() の Windows 版です。
        case IDM_COMPUTE:
            GetWindowText(g_hEdit1,work,20);
            v1 = atoi(work);
            GetWindowText(g_hEdit2,work,20);
            v2 = atoi(work);
            wsprintf(work,"%10d",v1+v2);
            SetWindowText(g_hEdit3,work);
            break;
        
  11. Windows 10 でも W32 EditControl を使っています。
    また W32 Gcm Lcm では、最大公約数(GCM)と最小公倍数(LCM)を計算します。

【演習】

  1. [EditControl] や [Button] のサイズや配置を変更して下さい。
  2. 加算 Button を 減算 Button に変更して、減算結果を表示して下さい。
  3. 加算 Button と 減算 Button と終了 Button を配置して下さい。
    加算がクリックされると加算結果を、減算がクリックされると減算結果を表示して下さい。
  4. EditControl を使ったデータ入力と表示 に習って GCM と LCM を計算して下さい。
  5. 生年月日を入力して、曜日と生存日数を表示 に習って曜日と生存日数を計算して下さい。

超初心者のプログラム入門(Win32API C++)