在子线程的 中,给主线程发消息 如何实现?
在子线程的 中,给主线程发消息 怎么实现??
我的程序是个一个DIALOG 对话框程序,在对话框上的A按钮中有:
CRecThread* pRecThread=(CRecThread*)AfxBeginThread(RUNTIME_CLASS(CRecThread),THREAD_PRIORITY_HIGHEST,0,CREATE_SUSPENDED,NULL);
pRecThread-> ResumeThread();
子线程类如下
class CRecThread : public CWinThread
{
DECLARE_DYNCREATE(CRecThread)
public:
CRecThread(void);
~CRecThread(void);
protected:
DECLARE_MESSAGE_MAP()
public:
virtual int ExitInstance();
virtual BOOL InitInstance();
virtual int Run();
};
在
int CRecThread::Run()
{
。。。。。。。。。。。
while(true)
{
................
//CODE A
........................
}
。。。。。。。。。。。。。。。。
RETURN 0
}
在CODE A处 给主线程序中发消息,
用 类似::PostMessage((HWND)(GetMainWnd()-> GetSafeHwnd()),WM_DISPLAY,nTmpt,NULL);
可以实现吗, 给我具体讲一下。。。(WM_DISPLAY自定义消息)
我的开发环境是VC++2003。。。我在VC6里的例子好用,可是在VC++2003里面不好用,请问这是为什么,我该注意那些细节呢??
谢谢!!
------解决方案--------------------
在MainFram类中用ON_MESSAGE宏映射你的自定义消息就可以了
------解决方案--------------------
GetMainWnd()-> GetSafeHwnd())肯定不行。
MFC的窗口类是通过TLS的map来维护HWND与CWnd*之间的关系的。
因此,你应该将目标窗口的HWND直接传递给工作线程。
------解决方案--------------------
应该是VC2003和VC6的差异造成的,
嗨!
MFC被微软狠心地抛弃了
我的程序是个一个DIALOG 对话框程序,在对话框上的A按钮中有:
CRecThread* pRecThread=(CRecThread*)AfxBeginThread(RUNTIME_CLASS(CRecThread),THREAD_PRIORITY_HIGHEST,0,CREATE_SUSPENDED,NULL);
pRecThread-> ResumeThread();
子线程类如下
class CRecThread : public CWinThread
{
DECLARE_DYNCREATE(CRecThread)
public:
CRecThread(void);
~CRecThread(void);
protected:
DECLARE_MESSAGE_MAP()
public:
virtual int ExitInstance();
virtual BOOL InitInstance();
virtual int Run();
};
在
int CRecThread::Run()
{
。。。。。。。。。。。
while(true)
{
................
//CODE A
........................
}
。。。。。。。。。。。。。。。。
RETURN 0
}
在CODE A处 给主线程序中发消息,
用 类似::PostMessage((HWND)(GetMainWnd()-> GetSafeHwnd()),WM_DISPLAY,nTmpt,NULL);
可以实现吗, 给我具体讲一下。。。(WM_DISPLAY自定义消息)
我的开发环境是VC++2003。。。我在VC6里的例子好用,可是在VC++2003里面不好用,请问这是为什么,我该注意那些细节呢??
谢谢!!
------解决方案--------------------
在MainFram类中用ON_MESSAGE宏映射你的自定义消息就可以了
------解决方案--------------------
GetMainWnd()-> GetSafeHwnd())肯定不行。
MFC的窗口类是通过TLS的map来维护HWND与CWnd*之间的关系的。
因此,你应该将目标窗口的HWND直接传递给工作线程。
------解决方案--------------------
应该是VC2003和VC6的差异造成的,
嗨!
MFC被微软狠心地抛弃了