为什么在线程函数里调用AfxGetMainWnd()返回的窗口指针不为NULL ?

qingfeng_happy5 2010-04-30 10:35:37
我在一个对话框程序里调用AfxBeginThread创建了一个线程函数,线程函数里什么都没做,就是调用AfxGetMainWnd()函数获取窗口指针。我知道AfxGetMainWnd()函数获取的是当前线程的窗口指针,如果在主线程里调用,则返回主线程的窗口指针,如果是在工作线程里调用,则返回工作线程的窗口指针。我跟踪了一下发现,在线程函数里调用时,AfxGetMainWnd()函数返回的窗口指针并不为NULL,可是工作线程函数并没有窗口呀,那为什么指针不为NULL呢,请大家给指点一下。

另外,我在线程函数里还调用了AfxGetApp()->GetMainWnd()获取主线程中的窗口指针,测试表明,在线程函数里调用AfxGetMainWnd() 和调用AfxGetApp()->GetMainWnd()的得到的指针确实是不一样的。

// ThreadFunc为类的静态成员函数
UINT CstrcpyDlg::ThreadFunc(LPVOID lPvoid)
{
CWnd *pWnd1=AfxGetMainWnd(); //获取工作线程的窗口指针
CWnd*pWnd2=AfxGetApp()->GetMainWnd(); //获取主线程的窗口指针

return 0;
}
...全文
575 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongshuangrui10 2012-10-16
  • 打赏
  • 举报
回复
我是用VC6.0加WindosXPSP3环境下调用CreateThread函数创建的线程,调用AfxGetMainWnd()和AfxGetApp()->GetMainWnd()是同样的结果!但是程序在VS2010下就不一样了!2010下AfxGetMainWnd()得到的应该是NULL(我并没有看具体是不是NULL,只是程序出问题了),2010下AfxGetApp()->GetMainWnd()能过得到正确的值!呵呵!
这不是鸭头 2010-04-30
  • 打赏
  • 举报
回复
这个函数在线程中使用是有问题的
换AfxGetApp()->GetMainWnd()
qingfeng_happy5 2010-04-30
  • 打赏
  • 举报
回复
另外还有一个有趣的现象,上面那个例子我是用AfxBeginThread创建的线程,如果用API CreateThread函数创建线程,那么在线程函数里调用AfxGetMainWnd()返回的就是NULL,有兴趣的话可以测试一下。
qingfeng_happy5 2010-04-30
  • 打赏
  • 举报
回复
自己顶起来
bragi523 2010-04-30
  • 打赏
  • 举报
回复
AfxGetMainWnd()是获取当前线程的窗口指针?不知道
Eleven 2010-04-30
  • 打赏
  • 举报
回复
回ls,使用AfxBeginThread();VC6+SP6 Windows2003下,Debug下调试两种返回的CWnd指针均为NULL
qingfeng_happy5 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 visualeleven 的回复:]
试了一下,返回的CWnd*指针都是空
[/Quote]你创建线程用的是AfxBeginThread函数吗?要是用CreateThread函数创建线程的话返回的指针会是NULL。
Eleven 2010-04-30
  • 打赏
  • 举报
回复
试了一下,返回的CWnd*指针都是空
qingfeng_happy5 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yincheng01 的回复:]
AfxGetMainWnd()是获取当前线程的窗口指针
[/Quote]我的疑惑就是那个工作线程并没有创建窗口啊,为什么还能得到线程的窗口指针呢?
尹成 2010-04-30
  • 打赏
  • 举报
回复
AfxGetMainWnd()是获取当前线程的窗口指针

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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