我用对话框做一个简单的计算器,有3个EDIT控件,ID分别为IDC_EDIT1,IDC_EDIT2,IDC_EDIT3,关联了3个double类型的控件变量,对应的为m_Para1,m_Para2,m_Result;一个STATIC控件,ID为IDC_Process,关联一个CString控件变量,我想做的工作是向IDC_EDIT1输入一个带小数点的数,然后在文本控件中实时的显示出来,但是只要一点小数点,小数点就会跑到第一个字符那去,不管前面已经输入多少位了,怎么解决,不知道我表达的清楚了没。相关代码如下:
void modeldlg::OnParaEdit1() 
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.

// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_Display.Format("%f",m_Para1);
GetDlgItem(IDC_Process)->SetWindowText(m_Display);

UpdateData(FALSE);
}

解决方案 »

  1.   

    m_Para1关联为‘Value’,类型float
      

  2.   

    能解释下为什么double类型的不行吗? 另外改为float后,输入的第一个字符总是随着字符是输入仍在第一个字符?什么原因
      

  3.   

    double类型可以,你把你加的程序如读先去掉。
    或者另加一个edit,试试。不应该有问题的
      

  4.   

    试了下,用edit也不行,跟用static text 效果一样,就是输入的一个字符有问题,没搞懂
      

  5.   

    逐步调试的结果是,如果是m_Display.Format("%f",(float)m_Para1);的话,输入第一个字符后,插入符的位置自动在第一个字符的前面,但是接着输入的话插入符会跟着字符走。如果
    m_Display.Format("%f",m_Para1);的话也有上面的情况,并且按下小数点后,插入符会跑到所有字符的前面,何解?
      

  6.   

    例如:
    UpdateData(TRUE);
    double data=10.1111111;
    m_Display.Format("%.1f",data);
    GetDlgItem(IDC_Process)->SetWindowText(m_Display);UpdateData(FALSE);
    "%.1f"就能实现只保留一位小数
      

  7.   

    用SetSel调整一下光标位置
    另外
    类似的东西我做过
    不觉得不要关联double或float
    也不用UpdateData更新
    直接做字符限制
    处理字符串即可
      

  8.   

    我叫你去掉你的处理,如m_Display.Format
    先用键盘输入看看对不对,问题在你的处理中,为什么一个一个数字处理等用户输入完后你读出就行了。