error C2352GetMainWnd非静态成员函数,该怎么处理
error C2352GetMainWnd非静态成员函数
先说哈要实现的功能,参照网上写的多线程的例子,线程AThread继承CWinThread,功能很简单
test()是个static的函数,在test中有个PostMessage语句
PostMessage(HWND)(GetMainWnd()->GetSafeHwnd(), WM_DISPLAY, 0, NULL);
只要调用test()就出错,但是如果不调用test直接Post没问题,或者把test()中的这句注释掉也没有问题,请大神指点该怎么改
报错的提示:
error C2352:"CWinThread::GetMainWnd"非静态成员函数
------解决思路----------------------
不是说的很清楚了,CWinThread::GetMainWnd"不是静态函数,所以不能这样使用,你的使用
theApp->GetMainWnd
------解决思路----------------------
既然要用到HWND窗口句柄,你为什么不再创建线程(AfxBeginThread)的时候,将HWND窗口句柄作为线程函数的参数传递给线程。
------解决思路----------------------
1.将线程主窗口的this指针或者主窗口句柄通过参数传递到test(无法改动的话也用不了).
2.将窗口的this指针或窗口句柄在调用test函数之前保存到全局变量在使用.
先说哈要实现的功能,参照网上写的多线程的例子,线程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"非静态成员函数
------解决思路----------------------
不是说的很清楚了,CWinThread::GetMainWnd"不是静态函数,所以不能这样使用,你的使用
theApp->GetMainWnd
------解决思路----------------------
既然要用到HWND窗口句柄,你为什么不再创建线程(AfxBeginThread)的时候,将HWND窗口句柄作为线程函数的参数传递给线程。
------解决思路----------------------
1.将线程主窗口的this指针或者主窗口句柄通过参数传递到test(无法改动的话也用不了).
2.将窗口的this指针或窗口句柄在调用test函数之前保存到全局变量在使用.