CDialog里的CWnd是NULL为什么?

reasly 2005-02-19 11:26:47
我在dll中在到处函数中用CWinThread的子类启动一个线程,在它InitInstance()中new了一个dialog,再domodel(按网上说的return false让系统自动完成清理工作),到处函数返回时把hwnd传回调用者,结果发现传回的总是NULL

调试发现即使对话框正常显示,可是cdialog里面的cwnd总是0,这是为什么呢?
...全文
196 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
reasly 2005-02-20
  • 打赏
  • 举报
回复
哦,谢了
reasly 2005-02-19
  • 打赏
  • 举报
回复
又打错了domel -->domodel

我觉得是不是AfxBeginThread不等调用完Initinstance 就返回了?
reasly 2005-02-19
  • 打赏
  • 举报
回复
但是过程应该是这样的:
调用导出函数-》AfxBeginThread-》InitInstance()-》domodel()
| ~这里并没有返回
返回《-

也就是说:对话框还没有关闭的时候,(domel还没有返回),这时候查看CWnd还是NULL
reasly 2005-02-19
  • 打赏
  • 举报
回复
打错了 “到处”是“导出”
jerry 2005-02-19
  • 打赏
  • 举报
回复
DoModal结束后窗口就删除了,句柄自然为空. 如果要反正一个有效的窗体,应该用Create来创建窗体
erbenlee 2005-02-19
  • 打赏
  • 举报
回复
楼上的说的都很全了,我再说通俗一点,主线程在对话框DoModal()时“堵”住了,对话框结束时因为p_MainWnd是空,主线程退出!
fuzb 2005-02-19
  • 打赏
  • 举报
回复
AfxBeginThread()跟Initinstance()根本没有什么关系,前者只是创建一个创建线程,创建完后就返回了,你看一下AfxBeginThread()的源代码就够了
fanqing 2005-02-19
  • 打赏
  • 举报
回复
运行到domodel(其它停止)-->处理对话框->对话框关闭(销毁)-->继续domodel后面的语句(对话框已经不存在了句柄对象为空)
jerry 2005-02-19
  • 打赏
  • 举报
回复
domodel() 函数返回之后,对话框就不存在了,不是说你的函数反回,所以不能通过DoModal() 来生成一个对话框, 然后返回它的句柄
AfxBeginThread, 当线程创建好了,就会返回了, 不会等你的Initinstance 函数的执行

16,472

社区成员

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

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

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