我在CMyView.h中定义了:static DWORD WINAPI StartMythread(LPVOID lpParameter);
在CMyView. cpp中响应鼠标左键消息:
void CLEDView::OnLButtonDown(UINT nFlags, CPoint point)
{
GetDlgItem(IDC_NUM_CLEAR)->EnableWindow(FALSE);
HANDLE hThread = CreateThread(NULL, 0, StartMythread, this, 0, NULL);
CloseHandle(hThread);
}
当在软件可视界面单击鼠标左键后,线程被终止。如果把GetDlgItem(IDC_NUM_CLEAR)->EnableWindow(FALSE)注释掉,就可以。
请问是不是不能在View类是用GetDlgItem(IDC_NUM_CLEAR)->EnableWindow(FALSE)不对?
求大家帮帮忙,谢谢!
在CMyView. cpp中响应鼠标左键消息:
void CLEDView::OnLButtonDown(UINT nFlags, CPoint point)
{
GetDlgItem(IDC_NUM_CLEAR)->EnableWindow(FALSE);
HANDLE hThread = CreateThread(NULL, 0, StartMythread, this, 0, NULL);
CloseHandle(hThread);
}
当在软件可视界面单击鼠标左键后,线程被终止。如果把GetDlgItem(IDC_NUM_CLEAR)->EnableWindow(FALSE)注释掉,就可以。
请问是不是不能在View类是用GetDlgItem(IDC_NUM_CLEAR)->EnableWindow(FALSE)不对?
求大家帮帮忙,谢谢!
"stop"键响应函数:
void CLEDView::OnBtnStop()
{
// TODO: Add your control notification handler code here
m_StopFlag = TRUE;
}线程函数:
void CLEDView::StartMythread()
{
while (!m_StopFlag)
{
......
}
}
m_StopFlag不是static的,是一个BOOL变量,这有什么问题吗?
UINT __cdecl ThreadProc(LPVOID lParam)
{
HWND hWnd = (HWND)lParam;
ASSERT(hWnd);
....
::SendMessage(hWnd, UM_MESSAGE, (WPARAM).., (LPARAM)...);//发送自定义的消息到窗口
return 0;
}//创建线程
AfxBeginThread(ThreadProc, (LPVOID)GetSafeHwnd()); // 这里传递的是窗口的句柄#define UM_MESSAGE WM_USER+11
afx_msg LRESULT OnHandleMessage(WPARAM wParam, LPARAM lParam);BEGIN_MESSAGE_MAP(..., ...)
..
ON_MESSAGE(UM_MESSAGE, &CXXX::OnHandleMessage)
END_MSSAGE_MAP()LRESULT CXX::OnHandleMessage(WPARAM wParam, LPARAM lParam)
{
...
return 0;
}
还有代码里那里是将MFC类的指针传递给线程函数?
你是建议我这样做吗?#define UM_MESSAGE WM_USER+11
afx_msg LRESULT OnHandleMessage(WPARAM wParam, LPARAM lParam);BEGIN_MESSAGE_MAP(..., ...)
..
ON_MESSAGE(UM_MESSAGE, &CXXX::OnHandleMessage)
END_MSSAGE_MAP()LRESULT CXX::OnHandleMessage(WPARAM wParam, LPARAM lParam)
{
m_StopFlag = TRUE;
return 0;
}void CLEDView::OnBtnStop()
{
// TODO: Add your control notification handler code here
::SendMessage(this, UM_MESSAGE, (WPARAM).., (LPARAM)...);
}