Trending News
MFC讀取和輸出Edit BOX 的問題
我的運行環境是Visual C++ 6.0 在MFC界面下
程式碼問題簡化如下:
/////////////////////////////////////////////////////////////
float a = GetDlgItemInt(IDC_Edit1,NULL,TRUE);
(a經過一串加減乘除後)
SetDlgItemInt(IDC_Edit2,a,TRUE);
//////////////////////////////////////////////////////////////
由於我在Edit1的輸入會有小數,所以我的Edit1在Class Wizard就已經宣告成float,但MFC讀取Edit的指令GetDlgItemInt只能讀到整數-.- (試過GetDlgItemText搭配atof 或atoi 也沒用 而且從C就有的atof和atoi不能編譯 相當詭異),運算完之後的a輸出到Edit2的指令SetDlgItemInt也只能輸出整數,造成我讀進來和送出去的值會被兩次四捨五入-.-變整數,我希望讀進來的值是浮點數並且經過浮點數運算後輸出也是浮點數,請大大幫幫忙吧!!
以下為整段程式碼:
//////////////////////////////讀取
float Vimin = GetDlgItemInt(IDC_Vimin_EDIT,NULL,TRUE);
float Vimax = GetDlgItemInt(IDC_Vimax_EDIT,NULL,TRUE);
float deltaVo = GetDlgItemInt(IDC_deltaVo_EDIT,NULL,TRUE);
float Iimax = GetDlgItemInt(IDC_Iimax_Edit,NULL,TRUE);
float Vo = GetDlgItemInt(IDC_Vo_EDIT,NULL,TRUE);
float fs = GetDlgItemInt(IDC_fs_EDIT,NULL,TRUE);
float Iomin = GetDlgItemInt(IDC_Iomin_EDIT,NULL,TRUE);
float Iomax = GetDlgItemInt(IDC_Iomax_EDIT,NULL,TRUE);
///////////////////////////////運算
float Dmax = 1-(Vimin/Vo);
float Dmin = 1-(Vimax/Vo);
float tonmin = Dmin/fs;
float tonmax = Dmax/fs;
float toffmin = (1-Dmax)/fs;
float toffmax = (1-Dmin)/fs;
float Lmin = Vo*Dmin*(1-Dmin)*(1-Dmin)*1.05/(2*fs*Iomin);
float Comin = Iomax*Dmax/((fs*deltaVo*Vo/100));
float ILmax = (Iomax/(1-Dmax))+((Vimin*Dmax)/(2*fs*Lmin));
float deltaIL = (Vimin*Dmax)/(fs*Lmin);
float IDIQmax = ILmax;
float VDVQmax = Vo;
////////////////////////////////輸出
SetDlgItemInt(IDC_Lmin_Edit,Lmin,TRUE);
SetDlgItemInt(IDC_Comin_Edit,Comin,TRUE);
SetDlgItemInt(IDC_IDIQmax_Edit,IDIQmax,TRUE);
SetDlgItemInt(IDC_VDVQmax_Edit,VDVQmax,TRUE);
SetDlgItemInt(IDC_ILmax_Edit,ILmax,TRUE);
SetDlgItemInt(IDC_Dmin_EDIT,Dmin,TRUE);
SetDlgItemInt(IDC_Dmax_EDIT,Dmax,TRUE);
SetDlgItemInt(IDC_tonmin_EDIT,tonmin,TRUE);
SetDlgItemInt(IDC_tonmax_EDIT,tonmax,TRUE);
SetDlgItemInt(IDC_toffmin_EDIT,toffmin,TRUE);
SetDlgItemInt(IDC_toffmax_EDIT,toffmax,TRUE);
SetDlgItemInt(IDC_deltaIL_Edit,deltaIL,TRUE);
}
若有需要完整的h檔和cpp檔請留下mail。
2 Answers
- SiYuLv 51 decade agoFavorite Answer
for example :
CString txt;
int l=GetDlgItemText(IDC_EDIT1,txt); // 取得edit 上的字串
if( l!=0 ) // 如果有字 l 不會是0
{
double ff=atof(txt); // 呼叫atof 轉換成 double
CString out;
out.Format("%f",ff); // double 轉成字串
GetDlgItem(IDC_EDIT2)->SetWindowText(out); // 設給另一個edit box
}
Source(s): msdn library - 1 decade ago
從 edit box 中 獲得浮點數的方法
將 edit box 中 ES_NUMBER 和 ES_MULTILINE 的 屬性移除
用 GetWindowText() 得到 string
再用 atof 轉成 浮點數
在 edit box 中 顯示浮點數的方法
將 edit box 中 ES_NUMBER 和 ES_MULTILINE 的 屬性移除
浮點數轉成字串 ( api 用 wsprintf(), Class 用 String.Format() ), 再用 SetWindowText() 顯示 string
SetDlgItemInt 只能顯示整數, 有 ES_NUMBER 屬性的 edit box 也只能顯示整數
2010-06-28 17:39:29 補充:
使用 atof() 需要 include 和
2010-06-28 17:39:53 補充:
math.h 和 stdlib.h