はじめまして。ちょっと行き詰った事項が出来たので質問させてください。
いま、ダイアログベースでタブコントロールを使ったプログラムをしていますが、タブ
ウィンドウ内の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)
すみません。上記の、
wsprintf(str, _T(%d), n);
Edit_SetText(GetDlgItem(hDlg, IDC_EDIT1), n);
は誤りです。ソースからの抜粋は下記のとおりです。
wsprintf(str, _T(%d), n);
Edit_SetText(GetDlgItem(hDlg, IDC_EDIT1), str);
よろしくお願いします。
# Edit_SetTextとか正しいかは俺はしらん
親ウィンドウは1つだけである。
TextBoxがタブウィンドウの子ウィンドウなら
GetDlgItem等ではタブウィンドウとIDC_EDIT1を指定しなければ無理。
自己解決しました。
悩んだ挙句、タブウィンドウ内の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;
}
}
----------------------------------------------------------------*/
どうもお騒がせしました。
wclrp ( 'o')さんも書いてますがGetDlgItemIntの一番目の引数を
ダイアログに貼り付けた子ウインドウのハンドルに変えるだけでOKですよ。