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

Rating
  • SiYu
    Lv 5
    1 decade ago
    Favorite 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

Still have questions? Get your answers by asking now.