问个简单的问题,线程中发送消息,当前类不能接受,而主窗口能够接受,为什么呢???
#define WM_MYMESS WM_USER+1
class CMyClass : public CWnd
{
public:
CMyClass();
public:
static UINT WorkThread(LPVOID P);
void StartThread();
void SendMyMessage();
public:
virtual ~CMyClass();
protected:
afx_msg void RecvMessage(WPARAM wParam,LPARAM lParam);
DECLARE_MESSAGE_MAP()
};
实现:.cpp
CMyClass::CMyClass()
{
if(Create(NULL,"mywindow",WS_CHILD,CRect(0,0,0,0),AfxGetMainWnd(),1000) == 0)
{
AfxMessageBox("create error!");
return;
}
}
BEGIN_MESSAGE_MAP(CMyClass, CWnd)
ON_MESSAGE(WM_MYMESS,RecvMessage)
END_MESSAGE_MAP()
UINT CMyClass::WorkThread(LPVOID P)
{
HWND my_hand = (HWND)P;
if(::PostMessage(my_hand,WM_MYMESS,NULL,NULL) == 0)
{
AfxMessageBox("PostMessage error!");
DWORD i = GetLastError();
int j = 0;
}
return 1;
}
void CMyClass::StartThread()
{
AfxBeginThread(&WorkThread,(LPVOID)this->m_hWnd);
}
void CMyClass::SendMyMessage()
{
::SendMessage(m_hWnd,WM_MYMESS,NULL,NULL);
}
void CMyClass::RecvMessage(WPARAM wParam,LPARAM lParam)
{
AfxMessageBox("recv mess!");
}
在SDI的VIEW中:
void CTest1View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMyClass my;
my.StartThread();
//my.SendMyMessage();
CView::OnLButtonDown(nFlags, point);
}
问题是:
1。在OnLButtonDown中 PostMessage(my_hand,WM_MYMESS,NULL,NULL) =0,而GetLastError() = 0(ERROR_SUCCESS),RecvMessag并没有执行
2。如果直接使用下面的:直接在成员函数中发送消息就会被相应:
void CTest1View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMyClass my;
my.SendMyMessage();
CView::OnLButtonDown(nFlags, point);
}
RecvMessag就会执行,
3。在线程中,发送给主窗口也能相应:(主窗口中也有该消息的相应函数)
UINT CMyClass::WorkThread(LPVOID P)
{
HWND my_hand = (HWND)P;
if(::PostMessage(AfxGetMainWnd()->m_hWnd,WM_MYMESS,NULL,NULL) == 0)
{
AfxMessageBox("PostMessage error!");
DWORD i = GetLastError();
int j = 0;
}
return 1;
}
疑问在于:线程中的消息不能发送给当前的类??