UpdateData(TRUE)老出错 FormView类里UpdateData(TRUE)老出错。怎么办 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ASSERT出错? 你在什么地方用了UpdataData? assert出什么错了? 判断if(pFormView->m_hWnd != NULL) UpdateData(TRUE); 估计不是UpdateData本身的错,而是其他的错。贴出错误代码来 _AFX_THREAD_STATE* pThreadState = AfxGetThreadState(); HWND hWndOldLockout = pThreadState->m_hLockoutNotifyWindow; ASSERT(hWndOldLockout != m_hWnd); // must not recurse就是这 pThreadState->m_hLockoutNotifyWindow = m_hWnd; pFormView->m_hWnd 是不空的hWndOldLockout是空的hWndOldLockout实什么东西上面是MFC代码 BOOL CWnd::UpdateData(BOOL bSaveAndValidate){ ASSERT(::IsWindow(m_hWnd)); // calling UpdateData before DoModal? CDataExchange dx(this, bSaveAndValidate); // prevent control notifications from being dispatched during UpdateData _AFX_THREAD_STATE* pThreadState = AfxGetThreadState(); HWND hWndOldLockout = pThreadState->m_hLockoutNotifyWindow; ASSERT(hWndOldLockout != m_hWnd); // must not recurse pThreadState->m_hLockoutNotifyWindow = m_hWnd; BOOL bOK = FALSE; // assume failure TRY { DoDataExchange(&dx); bOK = TRUE; // it worked } CATCH(CUserException, e) { // validation failed - user already alerted, fall through ASSERT(!bOK); // Note: DELETE_EXCEPTION_(e) not required } AND_CATCH_ALL(e) { // validation failed due to OOM or other resource failure e->ReportError(MB_ICONEXCLAMATION, AFX_IDP_INTERNAL_FAILURE); ASSERT(!bOK); DELETE_EXCEPTION(e); } END_CATCH_ALL pThreadState->m_hLockoutNotifyWindow = hWndOldLockout; return bOK;} 你在什么地方调用了UpdataData? 换成以下语句试一下:if(pFormView->GetSafeHwnd()) UpdateData(TRUE); int CTempReg::ToComThread(){this->UpdateData(TRUE);return 1}ToComThread是自定义的调用ToComThread时候CTempReg已建立 上面粘错了HWND CDataExchange::PrepareCtrl(int nIDC){ ASSERT(nIDC != 0); ASSERT(nIDC != -1); // not allowed HWND hWndCtrl; m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl); if (hWndCtrl == NULL)是这出错hWndCtrl==NULL { TRACE1("Error: no data exchange control with ID 0x%04X.\n", nIDC); ASSERT(FALSE); AfxThrowNotSupportedException(); } m_hWndLastControl = hWndCtrl; m_bEditLastControl = FALSE; // not an edit item by default ASSERT(hWndCtrl != NULL); // never return NULL handle return hWndCtrl;} 估计是你的窗口没有生成或已经销毁了,这种情况下是不能调用UpdateData()的 if(pFormView->GetSafeHwnd()) UpdateData(TRUE);是不行的 谢谢大家的关心,我已找到原因了是DDX_Text函数用到了对话筐中没有的资源.以前建立的资源删了,但DDX_Text函数不会自动删给分了 平面挖洞算法 为什么勾不到“Progman”窗口的消息 关于编辑框的透明背景 征集春节祝福,有新意 请教一个CTreeCtrl拖拉复制剪切的问题 请问:关于视频修复的原理 [救命贴,在线等待,谢谢] 请问谁知道怎样把WAV和MP3转成手机可以接受的铃声格式?急!急!急!怎样把普通图片(JPG,BMP....)转成手机的LOGO图案格式???? 99 基于对话框的程序中,主对话框如何能始终在所有窗口的最上面? 【请教】如何切分窗体?? windows message 的消息格式? 为什么关闭对话框以后自己用LoadToolBar加载的工具条不见了?怎么解决? VC++编译优化问题
if(pFormView->m_hWnd != NULL) UpdateData(TRUE);
HWND hWndOldLockout = pThreadState->m_hLockoutNotifyWindow;
ASSERT(hWndOldLockout != m_hWnd); // must not recurse就是这
pThreadState->m_hLockoutNotifyWindow = m_hWnd;
hWndOldLockout是空的
hWndOldLockout实什么东西
上面是MFC代码
{
ASSERT(::IsWindow(m_hWnd)); // calling UpdateData before DoModal? CDataExchange dx(this, bSaveAndValidate); // prevent control notifications from being dispatched during UpdateData
_AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
HWND hWndOldLockout = pThreadState->m_hLockoutNotifyWindow;
ASSERT(hWndOldLockout != m_hWnd); // must not recurse
pThreadState->m_hLockoutNotifyWindow = m_hWnd; BOOL bOK = FALSE; // assume failure
TRY
{
DoDataExchange(&dx);
bOK = TRUE; // it worked
}
CATCH(CUserException, e)
{
// validation failed - user already alerted, fall through
ASSERT(!bOK);
// Note: DELETE_EXCEPTION_(e) not required
}
AND_CATCH_ALL(e)
{
// validation failed due to OOM or other resource failure
e->ReportError(MB_ICONEXCLAMATION, AFX_IDP_INTERNAL_FAILURE);
ASSERT(!bOK);
DELETE_EXCEPTION(e);
}
END_CATCH_ALL pThreadState->m_hLockoutNotifyWindow = hWndOldLockout;
return bOK;
}
if(pFormView->GetSafeHwnd()) UpdateData(TRUE);
{
this->UpdateData(TRUE);
return 1
}
ToComThread是自定义的
调用ToComThread时候CTempReg已建立
{
ASSERT(nIDC != 0);
ASSERT(nIDC != -1); // not allowed
HWND hWndCtrl;
m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
if (hWndCtrl == NULL)是这出错hWndCtrl==NULL
{
TRACE1("Error: no data exchange control with ID 0x%04X.\n", nIDC);
ASSERT(FALSE);
AfxThrowNotSupportedException();
}
m_hWndLastControl = hWndCtrl;
m_bEditLastControl = FALSE; // not an edit item by default
ASSERT(hWndCtrl != NULL); // never return NULL handle
return hWndCtrl;
}
是不行的
是DDX_Text函数
用到了对话筐中没有的资源.
以前建立的资源删了,但DDX_Text函数不会自动删
给分了