首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

UpdateData导致的Assertion Failure~解决方法

2012-01-12 
UpdateData导致的Assertion Failure~~界面上有三个Edit控件,分别控制R,G,B值,用如下函数确定颜色:voidCCCo

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是否写错了

热点排行