VC2015で、double変数ddx_textのトラブル
Visual Studio 2015 Community EditionのMFCでwin32ダイアログベースアプリを作成していて、release版でのddx_textの不可解な挙動に困っています。Debug版では正常に見えます。
以下、double変数を表示するエディットボックス3個と更新用ボタン1個をもつアプリをbugcheck.exeとして、挙動を説明します。
アプリ起動直後、エディットボックスにはdouble変数f1, f2, f3の初期値が表示されます(f3は0)。
f2のエディットボックスに0を入力するとその表示は0になります。
しかしその後ボタンを押してダイアログをUpdateData(false)すると、f2とf3の表示値が5になります。(入れた場所と数字で若干バリエーションあり)
どうやらDDX_Text(pDX, IDC_EDIT1, m_f1)等の第三パラメーターに0を入れると結果がおかしくなる場合があるのではないかと辺りを付けましたが、0を使わない訳には行かないので、困っています。
以下bugcheckについて、自動生成部分からの差分相当のコードを示します。
--bugcheckDlg.h--
class CbugcheckDlg : public CDialogEx
{
略
public:
double m_f1;
double m_f2;
double m_f3; // Read only
afx_msg void OnBnClickedButton1(); //Update controls
afx_msg void OnEnChangeEdit1();
afx_msg void OnEnChangeEdit2();
}
--bugcheckDlg.cpp--
CbugcheckDlg::CbugcheckDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_BUGCHECK_DIALOG, pParent)
, m_f1(1.5)
, m_f2(0.1)
, m_f3(0.0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CbugcheckDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_f1);
DDX_Text(pDX, IDC_EDIT2, m_f2);
DDX_Text(pDX, IDC_EDIT3, m_f3);
}
BEGIN_MESSAGE_MAP(CbugcheckDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CbugcheckDlg::OnBnClickedButton1)
ON_EN_CHANGE(IDC_EDIT1, &CbugcheckDlg::OnEnChangeEdit1)
ON_EN_CHANGE(IDC_EDIT2, &CbugcheckDlg::OnEnChangeEdit2)
END_MESSAGE_MAP()
void CbugcheckDlg::OnBnClickedButton1()
{
UpdateData(false);
}
void CbugcheckDlg::OnEnChangeEdit1()
{
UpdateData(true);
}
void CbugcheckDlg::OnEnChangeEdit2()
{
UpdateData(true);
}
--resource.h--
#define IDC_EDIT1 1000
#define IDC_BUTTON1 1001
#define IDC_EDIT2 1002
#define IDC_EDIT3 1003
--bugcheck.rc--
IDD_BUGCHECK_DIALOG DIALOGEX 0, 0, 202, 129
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
EXSTYLE WS_EX_APPWINDOW
CAPTION "bugcheck"
FONT 9, "MS UI Gothic", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,67,91,50,14
PUSHBUTTON "キャンセル",IDCANCEL,121,91,50,14
EDITTEXT IDC_EDIT1,44,31,40,14,ES_AUTOHSCROLL
PUSHBUTTON "UpdateData(false)",IDC_BUTTON1,99,33,63,14
EDITTEXT IDC_EDIT2,44,52,40,14,ES_AUTOHSCROLL
EDITTEXT IDC_EDIT3,44,71,40,14,ES_AUTOHSCROLL | ES_READONLY
LTEXT "f1",IDC_STATIC,28,34,8,8
LTEXT "f2",IDC_STATIC,29,55,8,8
LTEXT "f3",IDC_STATIC,30,75,8,8
END
--ソースはここまで--