error C2352GetMainWnd非静态成员函数

ly_littlefish 2015-06-15 12:30:13
先说哈要实现的功能,参照网上写的多线程的例子,线程AThread继承CWinThread,功能很简单


int i = 0;
while(i < 100)
{
i++;
if( i % 4 == 0)
{
test();
//PostMessage(HWND)(GetMainWnd()->GetSafeHwnd(), WM_DISPLAY, 0, NULL);
}
}

test()是个static的函数,在test中有个PostMessage语句
PostMessage(HWND)(GetMainWnd()->GetSafeHwnd(), WM_DISPLAY, 0, NULL);
只要调用test()就出错,但是如果不调用test直接Post没问题,或者把test()中的这句注释掉也没有问题,请大神指点该怎么改
报错的提示:
error C2352:"CWinThread::GetMainWnd"非静态成员函数
...全文
154 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
飘渺一梦 2015-06-24
  • 打赏
  • 举报
回复
1.将线程主窗口的this指针或者主窗口句柄通过参数传递到test(无法改动的话也用不了). 2.将窗口的this指针或窗口句柄在调用test函数之前保存到全局变量在使用.
ly_littlefish 2015-06-23
  • 打赏
  • 举报
回复
引用 6 楼 xiangshenyiyang 的回复:
test()是个static的函数 静态成员函数的栈帧中是不含this指针的,不能调用非静态成员函数CWinThread::GetMainWnd.将test改为非静态成员函数.
test是别人的函数,没法改动
飘渺一梦 2015-06-18
  • 打赏
  • 举报
回复
test()是个static的函数 静态成员函数的栈帧中是不含this指针的,不能调用非静态成员函数CWinThread::GetMainWnd.将test改为非静态成员函数.
zgl7903 2015-06-15
  • 打赏
  • 举报
回复
静态函数中能访问静态或全局定义的函数或数据
ly_littlefish 2015-06-15
  • 打赏
  • 举报
回复
引用 4 楼 VisualEleven 的回复:
既然要用到HWND窗口句柄,你为什么不再创建线程(AfxBeginThread)的时候,将HWND窗口句柄作为线程函数的参数传递给线程。
比较菜,大侠可以把这个写出来不???
Eleven 2015-06-15
  • 打赏
  • 举报
回复
既然要用到HWND窗口句柄,你为什么不再创建线程(AfxBeginThread)的时候,将HWND窗口句柄作为线程函数的参数传递给线程。
ly_littlefish 2015-06-15
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
不是说的很清楚了,CWinThread::GetMainWnd"不是静态函数,所以不能这样使用,你的使用 theApp->GetMainWnd
嗯,我就是想请教应该用什么取代 多谢大侠指点,我晚上来结贴
worldy 2015-06-15
  • 打赏
  • 举报
回复
不是说的很清楚了,CWinThread::GetMainWnd"不是静态函数,所以不能这样使用,你的使用 theApp->GetMainWnd

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧