关于句柄的小提问

xxfxiazai 2009-08-14 01:49:34
有如下代码
	void CLEDplayerView::OnStext()
{
this->pwnd =GetDlgItem (IDC_SHOWEDIT);
}


pwnd为虽然是全局变量,但出了这个事件函数,pwnd就失效了是吗

如何解决这个问题呢..
...全文
102 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2009-08-18
  • 打赏
  • 举报
回复
用完就不要了,这是通常的写法。因为系统给的CEdit *pWnd可能是个临时的变量以后会被系统删除。你保存下来也不行。
xxfxiazai 2009-08-17
  • 打赏
  • 举报
回复
楼上的是函数内的局部变量,出了不是更错
schlafenhamster 2009-08-14
  • 打赏
  • 举报
回复
this->pwnd =GetDlgItem (IDC_SHOWEDIT);//this 错
改 CEdit *pWnd=(CEdit *)GetDlgItem (IDC_SHOWEDIT);//
chogimoga 2009-08-14
  • 打赏
  • 举报
回复
GetDlgItem()返回的不是窗口指针么?
路人乙2019 2009-08-14
  • 打赏
  • 举报
回复
本来是不会失效的,不过你描述有问题,既然有this->就说明它是CLEDplayerView的成员变量.
MoXiaoRab 2009-08-14
  • 打赏
  • 举报
回复
窗体被Destroy后,这个就失效了
xxfxiazai 2009-08-14
  • 打赏
  • 举报
回复
IDC_SHOWEDIT是放在窗口上的一个静态控件.
什么情况下会不在了?
phinew 2009-08-14
  • 打赏
  • 举报
回复
很显然你在这个类其他事件使用pwnd时,这个pwnd应该是IDC_SHOWEDIT的句柄,你检查下IDC_SHOWEDIT还在不在?

野指针就是失效的指针,我这里的提醒是说当类构造时先pwnd = NULL,那个IDC_SHOWEDIT不存在后应该pwnd = NULL,其他函数调用pwnd时先写上if(pwnd)……,这样避免指针错误
xxfxiazai 2009-08-14
  • 打赏
  • 举报
回复
真的不失效吗

当我在这个试图类的其他事件函数中再次调用已经传入至另一个类的PWND时,运行至需要PWND地方就报错,查了下似乎是句柄 实效的问题
xxfxiazai 2009-08-14
  • 打赏
  • 举报
回复
回 PHINEW
野指针是什么意思...

xxfxiazai 2009-08-14
  • 打赏
  • 举报
回复
楼上的为什么不回答问题呢,.
phinew 2009-08-14
  • 打赏
  • 举报
回复
在楼主的例子中pwnd不会失效,但是要注意变成野指针的问题
skybblue 2009-08-14
  • 打赏
  • 举报
回复
谁说pwnd是全局变量啊,就应该是一个类成员变量,如果是全局变量怎么能用this指针呢.

16,551

社区成员

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

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

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