主線程UpdateData()函數出錯,

redghy 2005-11-29 08:17:53
//{{AFX_MSG(CAutoModeChangeDlg)
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);

LRESULT CAutoModeChangeDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(modecount==6)
{ UpdateData(TRUE);
modecount=0;
m_EDIT_H=m_strCombo6.Mid(0,4);
m_EDIT_V=m_strCombo6.Mid(5,4);
m_EDIT_F=m_strCombo6.Mid(10,2);
m_EDIT_C="32";
UpdateData(FALSE);
}
DEVMODE lpDevMode;
HDC hScrDC;
int xScrn,yScrn,cScrn,fScrn;
hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
xScrn = GetDeviceCaps(hScrDC, HORZRES);
yScrn = GetDeviceCaps(hScrDC, VERTRES);
cScrn=GetDeviceCaps(hScrDC,BITSPIXEL);
DeleteDC(hScrDC);
EnumDisplaySettings(NULL, -1,&lpDevMode);
CString str1;
str1.Format("%02d",lpDevMode.dmDisplayFrequency);
fScrn=_ttoi(str1);
if((xScrnTemp!=xScrn)||(yScrnTemp!=yScrn)||(cScrnTemp!=cScrn)
||(fScrnTemp!=fScrn))
{
CString strtemp;
xScrnTemp=xScrn;
yScrnTemp=yScrn;
cScrnTemp=cScrn;
fScrnTemp=fScrn;
strtemp.Format("%d",xScrnTemp);
m_EDIT_H=strtemp;
strtemp.Format("%d",yScrnTemp);
m_EDIT_V=strtemp;
strtemp.Format("%d",fScrnTemp);
m_EDIT_F=strtemp;
strtemp.Format("%d",cScrnTemp);
m_EDIT_C=strtemp;
UpdateData(FALSE);
return CDialog::WindowProc(message, wParam, lParam);
}
如上程序,xScrnTemp;yScrnTemp;cScrnTemp;fScrnTemp;modecount为全局变量
我重载WindowProc主线程函数,如果modecount在一线程函数中付为6时,对m_EDIT_H等四个编辑框Update,都正常的更新,然而,下面先侦测当前mode,一发生mode改变则进行
更新四个控件编辑框,编译都正确,运行则弹出错误提示:
Debug Assertion Failed!
Program:E:\automodechange\debug\automodechange.exe
File:winocc.ccp
Line:229
for information on how your program chan cause an assertion failure,see the visual
c++ documentation on asserts.
调试发现是UpdateData(FALSE)执行失败,请问为什么第一个UpdateData(FALSE)一切正常,而第二个却有该错误,为什么呢?用SetWindowText()也一样.谢谢.
...全文
102 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2005-11-30
  • 打赏
  • 举报
回复
You shouldn't call UpdateData when processing EVERY message, while UpdateData will post more messages into the message que. You produced an INFINITE LOOP yourself.
redghy 2005-11-29
  • 打赏
  • 举报
回复
所有的工作都在WindowProc()函數里,該函數里偵測mode改變的話則更新,與thread無關哈.
蒋晟 2005-11-29
  • 打赏
  • 举报
回复
Sounds like an reentry problem.
Post a custom message from your thread, and put your code in the message handler to avoid this problem.
38062708 2005-11-29
  • 打赏
  • 举报
回复
控件不存在或者被改变了

15,471

社区成员

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

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