UpdateData导致的Assertion Failure~~
界面上有三个Edit控件,分别控制R,G,B值,用如下函数确定颜色:
void CCComboDlgDlg::OnChangeEdit()
{
// 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();
m_ForeColor=RGB(m_Rvalue,m_Gvalue,m_Bvalue);
Draw();
}
=====================
想通过UpdateData()从Edit控件得到R,G,B值到m_Rvalue,m_Gvalue,m_Bvalue,但是执行到这里总会Assertion Failure,
void AFXAPI DDX_Control(CDataExchange* pDX, int nIDC, CWnd& rControl)
{
if (rControl.m_hWnd == NULL) // not subclassed yet
{
ASSERT(!pDX-> m_bSaveAndValidate); //=============这里出错
省略若干.......
}
}
==================
我的DoDataExchange内容如下:
void CCComboDlgDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCComboDlgDlg)
DDX_Control(pDX, IDC_SPIN3, m_Bspin);
DDX_Control(pDX, IDC_SPIN2, m_Gspin);
DDX_Control(pDX, IDC_SPIN1, m_Rspin);
DDX_Control(pDX, IDC_PATTERN, m_PatCom);
DDX_Text(pDX, IDC_EDIT1, m_Rvalue);
DDV_MinMaxInt(pDX, m_Rvalue, 0, 255);
DDX_Text(pDX, IDC_EDIT2, m_Gvalue);
DDV_MinMaxInt(pDX, m_Gvalue, 0, 255);
DDX_Text(pDX, IDC_EDIT3, m_Bvalue);
DDV_MinMaxInt(pDX, m_Bvalue, 0, 255);
DDX_CBString(pDX, IDC_PATTERN, m_Pattern);
//}}AFX_DATA_MAP
}
==============================
急盼解决~望各位达人鼎力相助~:)
[解决办法]
这几天我也遇到了类似的问题,我怀疑是由于在对话框创建完成前调用了UpdateData()函数,导致程序出错。
我的解决方法是:
1、为CCComboDlgDlg类添加bool m_Finish
2、在构造函数中为m_Finish赋值为false
3、在OnInitDialog()初始化函数中添加m_Finish=true;
4、修改你的代码为
if(m_Finish)
{
UpdateData();
.........
}
[解决办法]
资源id是否写错了