分享一个帖子

skyfree 2010-09-03 11:55:11
最近开始用MFC,因为是从SDK开发转过来的,还是经常用SDK类似的思想,
比如不喜欢用DDX, 喜欢用GetDlgItem()直接取控件等。
刚才看了一个帖子,很好,以后再也不能随便用CWin::GetDlgItem()了。

www.jrtwine.com/Articles/MFCNoNos/MFCNN1.htm

大家可以发表看法。
...全文
142 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyfree 2010-09-03
  • 打赏
  • 举报
回复
CWnd* wnd = GetDlgItem(IDC_BUTTON_ID);
CButton* btn = dynamic_cast{CButton*}(wnd);

一般来讲,这个时候btn 是NULL,除非你定义了对应的 DDX中的 CButton* m_button.

但 (CButton*)GetDlgItem(IDC_BUTTON_ID)却可以,为什么呢? 我想这只是个假象,因为MFC这种情况并没有做类型检查
skyfree 2010-09-03
  • 打赏
  • 举报
回复
(CButton*)这种转换会成功,不知道是什么原因,
但dynamic_cast 一般会失败, 因为类型检查无法通过。
fishion 2010-09-03
  • 打赏
  • 举报
回复
转换。。
fishion 2010-09-03
  • 打赏
  • 举报
回复
取到的只是地址,再强制
skyfree 2010-09-03
  • 打赏
  • 举报
回复
CWnd* wnd = GetDlgItem(IDC_BUTTON_ID); 这里得到的wnd不是CButton×类型的,一般情况下都是CTempWnd类型。 这里mfc确实是比较诡异的。
NIKE霸天虎 2010-09-03
  • 打赏
  • 举报
回复
学习一下!
liutiaoer 2010-09-03
  • 打赏
  • 举报
回复
学习一下!
skyfree 2010-09-03
  • 打赏
  • 举报
回复
不信你可以试试看!
skyfree 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 visualeleven 的回复:]

CWnd* wnd = GetDlgItem(IDC_BUTTON_ID);
CButton* btn = dynamic_cast{CButton*}(wnd);
dynamic_case<CButton*>
[/Quote]

兔子,原来的语法是有编辑的错误,但我的帖子不是说这个,你改好了也是不行的,因为这种类型的 cast一般都会失败!!
skyfree 2010-09-03
  • 打赏
  • 举报
回复
[Quote=msdn:]
The returned pointer may be temporary and should not be stored for later use.
[/Quote]

在msdn上这个说明不清楚, 只是说明这个对象很有可能会被释放,因为本身就是CTempWnd类型的,这的确是个陷阱,尽管一般遇不上,但如果遇到了,不知道问题所在就麻烦了。
Eleven 2010-09-03
  • 打赏
  • 举报
回复
CWnd* wnd = GetDlgItem(IDC_BUTTON_ID);
CButton* btn = dynamic_cast{CButton*}(wnd);
dynamic_case<CButton*>
Q446512799 2010-09-03
  • 打赏
  • 举报
回复
占位学习

16,548

社区成员

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

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

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