Text String Dialog

Date: 05-Jun-2000
(c) Copyright 1997-2000 by H.Fujii

[前へ][次へ]

前回の Dialog は、単にボタンが押されたことを 知るだけのものでした。実際のプログラムでは、Dialog から文字列を取得 したい場合が多々あります。ここでは、Dialog から文字列を取得します。

Dialog の中に文字列取得を組み込むには、EDITTEXTが便利です。 しかし、この場合 OK や Cancel ボタンなどとは違って、システムに用意された ID を使うわけにはいかないので、別に用意する必要があります。ここでは 今まで使ってきた resource.h に、IDC_EDIT_MYCMND を つけ加えましょう。

/* resource.h */

#define ID_FILE_EXIT     10001
#define ID_FILE_CMND     10002

#define IDC_EDIT_MYCMND  12001
また、リソースファイルの MyCmndDlg の部分は、例えば
MyCmndDlg DIALOG DISCARDABLE 0, 0, 128, 64
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "My Command Dialog"
BEGIN
  EDITTEXT IDC_EDIT_MYCMND, 24, 10, 96, 12, ES_AUTOHSCROLL
  DEFPUSHBUTTON "Ok", IDOK, 24, 24, 48, 12
  PUSHBUTTON "Cancel", IDCANCEL, 72, 24, 48, 12
END
としましょう。とりあえず、これで文字列を入力する窓を持った Dialog が開きます。


いま用意した文字列入力窓に設定された値を取り出すには GetDlgItemText() 関数を、また初期値などを設定するには、SetDlgItemText()関数を使います。

さて、ここで受け取った文字列を保存する必要があります。これは、このプログラム 全体で共通に使います。今後も、このような変数が増えてきますので、 ヘッダファイル myvariab.h を作っておきます。

/* myvariab.h */
#ifndef MYVARIAB_H_INCLUDED
#define MYVARIAB_H_INCLUDED

#ifdef MY_MAIN
#define EXTERN
#else
#define EXTERN extern
#endif

#define MY_MAXCMNDLEN 1024
EXTERN TCHAR mycmndstr[MY_MAXCMNDLEN];
EXTERN UINT mycmndlen;

#endif  /* MYVARIAB_H_INCLUDED */
ここで、TCHARという型は、コンパイルオプションにより charwchar_t に切り替わります。

文字列を mycmndstr に 受け取るように MyCmndProc() を次のように書き換えます。

/* mycmnd.c */

#define STRICT
#include <windows.h>
#include "resource.h"
#include "myvariab.h"

BOOL CALLBACK MyCmndProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
  WORD wNotifyCode;
  WORD wID;

  switch( uMsg )
  {
  case WM_COMMAND:
    wNotifyCode = HIWORD( wParam );
    wID = LOWORD( wParam );
    if( wID == IDOK )
    {
      mycmndlen =
        GetDlgItemText( hDlg, IDC_EDIT_MYCMND, mycmndstr, MY_MAXCMNDLEN );
      EndDialog( hDlg, (int)wID );
      return TRUE;
    }
    else if( wID == IDCANCEL )
    {
      EndDialog( hDlg, (int)wID );
      return TRUE;
    }
    break;
  default:
     break;
  }
  return FALSE;
}


[前へ][次へ]