我正在处理MFC应用程序。我有一个带有一些编辑控件盒的CFormView。我直接将它们的值映射到类Setpoint
的对象内的变量。
typedef struct {
float fAmplitud;
float fFase;
} fasor;
class Setpoint {
public:
Setpoint() {
oV1 = oV2 = oV3 = { 0 };
}
public:
fasor oV1;
fasor oV2;
fasor oV3;
};
要阅读其值,请使用UpdateData(TRUE)
。 DoDataExchange
看起来像这样:
void View_Control::DoDataExchange(CDataExchange* pDX){
CFormView::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_oSetpoint.oV1.fAmplitud);
DDX_Text(pDX, IDC_EDIT3, m_oSetpoint.oV2.fAmplitud);
DDX_Text(pDX, IDC_EDIT5, m_oSetpoint.oV3.fAmplitud);
};
有些事情看起来像一个bug,而且就是这样:只要所有用户输入都保持整数,一切正常。
如果至少有一个数字有一个小数部分,比如说IDC_EDIT1
是1.5,那么每个小数部分的其他框也可以正常工作(即使它是1.00)。每个没有小数部分的框都会被解析错误。
例如,如果我输入:IDC_EDIT1
中的10,IDC_EDIT3
中的1和IDC_EDIT5
中的0,我会得到值10.00
,1.00
, 0.00
另一方面,如果我输入:IDC_EDIT1
中的10.1,IDC_EDIT3
中的0和IDC_EDIT5
中的0,我会得到值10.10
,{{1} },0.10
发生了什么?
更新:
0.10
_sntscanf_s
内的DDX_Text
似乎存在问题。link。一种解决方法是编辑源代码并将_sntscanf_s
替换为sscanf_s
,但出于某种原因,我无法在VS2015中看到源代码。