奇怪的UpdateData(FALSE)

fenghen407 2009-04-22 01:00:17
我编写了一个测试软件,在数据交换时候发现一个很奇怪的问题.当我选中一个CHECKBOX时,本想让其它CHECKBOX全部选中,我是定义了很多跟CHECKBOX相关联的BOOL变量,可是在UpdataData(FALSE)时候发现在wincore.cpp的3113行出现ASSERT FAILED!,我进入到该文件跟踪发现主要出现在这句:
ASSERT(hWndOldLockout != m_hWnd);
但我查不到pThreadState->m_hLockoutNotifyWindow是什么意思,获得一个当前线程的句柄?
最后没办法,只好调用GetDlgItem(IDC_)->SetCheck(1)解决了~
但我还是不明白,为什么在参数为TRUE时候没问题,参数变为FALSE更新到界面时就出错呢?
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;
}
...全文
125 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧