出错了...声名为 __stdcall 的函数调用消息函数时>>>>>>>>请教了...
源码:
-------------------------
protected:
afx_msg void OnDraw();
......
ULONG _stdcall ThreadFunc( LPVOID lpParam )
{
.....
CMy8344b_vcDlg::OnDraw();
.....
}
-------------------------
错误提示:
...\8344_demo_vcDlg.cpp(226) : error C2352: 'CMy8344b_vcDlg::OnDraw ' : illegal call of non-static member function
...\8344_vcdlg.h(46) : see declaration of 'OnDraw '
[解决办法]
ThreadFunc是static函数,不能直接调用CMy8344b_vcDlg::OnDraw();
一般做法是通过lpParam 传入实例,如
CMy8344b_vcDlg *pDlg = (CMy8344b_vcDlg*)lpParam;
if(pDlg) pDlg-> OnDraw();
[解决办法]
static函数和类的对象实际上是分开了,没有this指针,你这样直接调用是不行的。可以把CMy8344b_vcDlg对象的指针作为参数传给线程函数,不过微软不赞成这样做,MFC不是线程安全的。
[解决办法]
需要this指针,静态函数没有this指针。
[解决办法]
OnDraw不是静态函数,但你可以通过给CMy8344b_vcDlg发消息来实现
PostMessage或SendMessage
[解决办法]
呵呵,楼主应应该是被回调搞糊涂了。
否则的话,“CMy8344b_vcDlg::OnDraw();”这种代码写在一个全局函数中,一眼就能看出是不对的嘛。
[解决办法]
CMy8344b_vcDlg::OnDraw();
---------------------------
这种调用方法是静态的调用方法,而你的成员函数是非静态成员函数.
[解决办法]
你不应该在线程中直接访问其他线程创建的复杂MFC对象的成员函数。解决方法参考http://support.microsoft.com/kb/147578。
更新窗口可以用RedrawWindow函数。