代码如下:
UINT ThreadFunction(LPVOID pParam)
{
CDlg *p=(CDlg *)pParam;
((CDlg *)pParam)->m_sThPos.Format("%f", m_dTPos);
p->UpdateData(false);//执行到此句后报错
return 0;
}
UINT ThreadFunction(LPVOID pParam)
{
CDlg *p=(CDlg *)pParam;
((CDlg *)pParam)->m_sThPos.Format("%f", m_dTPos);
p->UpdateData(false);//执行到此句后报错
return 0;
}
解决方案 »
- VC6.0 自动提示
- 动态创建的ActiceX事件处理
- 如何将字符串 保存到 IStream?
- 怎样取得MSDN中左边那个看似是ListBox但实际上不是的那个控件的某一项内容?
- 本人在DLL中使用MFC CAsyncSocket类进行UDP方式通信,但是在Close 这个CAsyncSocket类的实例时就出错了!大家帮忙啊!
- 如何处理‘=’消息?
- 如何实现一窗体在桌面图标之下就好像背景图片一样了
- 用VC 6.0 ,SQL Server ,ADO编程,如何对数据库表纪录的一行进行锁定,即在读取后尚未写入新值之前防止其他人再读此字段信息,请指教。
- 求一简单dll共pb调用
- 怎么改工程名呢?
- 半年了,"关于excel复制和删除sheet的问题"还没解决!!!!
- 如何在MFC中传递一个VARIANT数组给vbscript函数
然后添加USERUPDATE的消息映射
WM_MESSAGE(USERUPDATE, fun)在fun中
UpdateData(false);然后在线程中
CDlg *p=(CDlg *)pParam;
((CDlg *)pParam)->m_sThPos.Format("%f", m_dTPos);
p->SendMessage(USERUPDATE, 0, 0);//执行到此句后报错
如下,在Dlg.h中添加函数声明:void AssertValid() const;
在Dlg.cpp中添加函数定义:
void CDlg::AssertValid() const
{
if (m_hWnd == NULL)
return; // null (unattached) windows are valid // check for special wnd??? values
ASSERT(HWND_TOP == NULL); // same as desktop
if (m_hWnd == HWND_BOTTOM)
ASSERT(this == &CWnd::wndBottom);
else if (m_hWnd == HWND_TOPMOST)
ASSERT(this == &CWnd::wndTopMost);
else if (m_hWnd == HWND_NOTOPMOST)
ASSERT(this == &CWnd::wndNoTopMost);
else
{
// should be a normal window
ASSERT(::IsWindow(m_hWnd));
}
}
我按照你的说的方法做了,结果还是是不行,会不会还有其他地方不安合适啊 ?
不要在线程里更新窗口。。
先保存文本框句柄:
CWnd * pwnd=GetDlgItem(IDC_EDIT1)->GetSafeHwnd();线程发送消息:
SendMessage(pwnd->GetSafeHwnd(),WM_SETTEXT,0,(LPARAM)(LPCTSTR)szCaption);