ClientDC.TextOUtW应该显示的文字不能及时显示

xqlu2007 2015-01-23 02:12:08
我在VS2012的MFC应用程序里设计了一个测试程序,有一个线程序函数和一个菜单命令用于启动线程,还设计了两个鼠标事件(左键按下和右键按下),用于向线程发送事件信号,线程在启动时显示s1的文字,在用户单击左键后显示s2的文字,在用户单击右键后显示s3的文字.
用AfxMessageBox来显示完全正确, 但如果把三个 AfxMessageBox注释掉, 而去掉它上面相应的注释(即用TextOut来显示)就不正常, 不能按指定的方式显示出来, 请高手指点一下.
UINT MyEventThread(LPVOID pParam)
{
BOOL runThread=TRUE;
CString s1;s1="Thread begin running";
CString s2;s2="Thread Unlocked,thread continue run";
CString s3;s3="Thread end";
// CClientDC ClientDC(CWnd::FromHandle(*(HWND*)pParam));
// ClientDC.TextOutW(30,30,s1,s1.GetLength());
AfxMessageBox(s1);
eventObj.Lock();
// ClientDC.TextOutW(30,100,s2,s2.GetLength());
AfxMessageBox(s2);
while(runThread)
{
int returnCode=::WaitForSingleObject(eventEnd.m_hObject,0);
if(returnCode==WAIT_OBJECT_0)
runThread=FALSE;
}
// ClientDC.TextOutW(30,170,s3,s3.GetLength());
AfxMessageBox(s3);
return 0;
}


void CMFCApplication1View::OnEventthread()
{
// TODO: 在此添加命令处理程序代码
AfxBeginThread(MyEventThread,&m_hWnd);
}


void CMFCApplication1View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
eventObj.SetEvent();
CView::OnLButtonDown(nFlags, point);
}


void CMFCApplication1View::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
eventEnd.SetEvent();
CView::OnRButtonDown(nFlags, point);
}
...全文
214 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-01-23
  • 打赏
  • 举报
回复
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx

15,473

社区成员

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

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