タブコントロールによるGetDlgItemIntでのテキスト取得について、

[戻る]
まさ 2007/10/18(木) 23:51:17
はじめまして。ちょっと行き詰った事項が出来たので質問させてください。

いま、ダイアログベースでタブコントロールを使ったプログラムをしていますが、タブ
ウィンドウ内のTextBoxの値を、メインウィンドウからGetDlgItemIntを使って取得しよ
うと思っていますが取得できません。

やりたいのは、タブウィンドウ内のTextBoxに入力した値をメインウィンドウ上のボタン
押下(WM_COMMAND)で、GetDlgItemIntを使って変数に代入したいのですが、変数の値は
0のままで、値を取ってきてくれません。

/*-----------------------------------------------------

(タブウィンドウ)
bool CALLBACK TabProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
    int n = 1111;
    ・
  ・
    wsprintf(str, _T("%d"), n);
    Edit_SetText(GetDlgItem(hDlg, IDC_EDIT1), n);
  ・
  ・
  ・
}

(メインウィンドウ)
LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
    ・
  ・

        case WM_COMMAND:
            switch(LOWORD(wp)){
                 case IDC_BUTTON1:
                     int num = (int)GetDlgItemInt(hDlg, IDC_EDIT1, &num, 
false);
  ・
  ・
  ・
}

------------------------------------------------------*/

たぶん僕の無知からくる記述ミスや知識不足だと思いますが、"ここがおかしい"とか指
摘してくださると助かります。
よろしくお願いします。

環境:WinXP(Pro)SP2、VC++2005(SDK)

まさ 2007/10/18(木) 23:56:29
すみません。上記の、

   wsprintf(str, _T("%d"), n);
   Edit_SetText(GetDlgItem(hDlg, IDC_EDIT1), n);

は誤りです。ソースからの抜粋は下記のとおりです。

   wsprintf(str, _T("%d"), n);
   Edit_SetText(GetDlgItem(hDlg, IDC_EDIT1), str);


よろしくお願いします。

wclrp ( 'o') 2007/10/19(金) 07:37:51
# Edit_SetTextとか正しいかは俺はしらん

親ウィンドウは1つだけである。
TextBoxがタブウィンドウの子ウィンドウなら
GetDlgItem等ではタブウィンドウとIDC_EDIT1を指定しなければ無理。

まさ 2007/10/20(土) 00:53:50
[[解決]]
自己解決しました。

悩んだ挙句、タブウィンドウ内のWM_COMMANDメッセージで、wParamでEN_UPDATEを送る事
で、親ウィンドウに通知する事が出来ました。

/*---------------------------------------------------------------

   case WM_COMMAND:
       if(LOWORD(wp) == IDC_EDIT1){
           switch(HIWORD(wp)){
              case EN_UPDATE:
                  int num = (int)GetDlgItemInt(hDlg, IDC_EDIT1, &num, false);
                  break;
           }
       }

----------------------------------------------------------------*/

どうもお騒がせしました。

subaru 2007/10/20(土) 02:05:05
wclrp ( 'o')さんも書いてますがGetDlgItemIntの一番目の引数を
ダイアログに貼り付けた子ウインドウのハンドルに変えるだけでOKですよ。

古いスレッドには追加発言できません。