ClientDC.TextOUtW应该显示的文字不能及时显示
我在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);
}