VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 457|回复: 5

玩转控件第4课(CButton*)GetDlgItem(IDC_CHECK)前面为什么强制转换

[复制链接]
44_avatar_middle
最佳答案
0 
在线会员 发表于 2021-2-17 19:02:37 | 显示全部楼层 |阅读模式
第三课,按钮获取控件句柄直接就是GetDlgItem(IDC_CHECK),前面没有强制转换。
第四课,单选框获取控件句柄(CButton*)GetDlgItem(IDC_CHECK),为什么前面需要强制转换一下。




上一篇:C++STL list问题
下一篇:寻求vc大佬帮忙 处理优化下 源码 QQ管家总是报毒
70_avatar_middle
最佳答案
49 
在线会员 发表于 2021-2-18 09:29:07 | 显示全部楼层
本帖最后由 tony666 于 2021-2-18 09:30 编辑

CButton继承于CWnd
GetDlgItem返回类型是CWnd*
当你只需要调用CWnd的方法或变量时,就不需要转
当需要调用CButton的方法时,你不转编译会报错,找不到方法/成员变量,(前提是 IDC_CHECK 对应的确实是CButton)
想了解详细,可以参考继承与多态方面
31_avatar_middle
最佳答案
50 
在线会员 发表于 2021-2-18 11:22:54 | 显示全部楼层
仔细理解一下这个例子
  1. void CMFCApplication1Dlg::OnBnClickedOk()
  2. {
  3.         // CheckBox 属于CButton类,而CButton类的“父亲(基类)”是“CWnd类”,
  4.         // 所以下边的语句不强转也是可以的
  5.         CWnd *pBoxOne = GetDlgItem(IDC_CHECK1);
  6.         GotoDlgCtrl(pBoxOne);
  7.         // CheckBox的状态可使用GetState, BST_INDETERMINATE不确定,BST_PUSHED按下,BST_FOCUS有焦点
  8.         // 下边的语句之所以要强转,是因为 GetCheck、SetCheck是CButton类自己的方法(成员函数),
  9.         ((CButton*)pBoxOne)->GetCheck() == BST_UNCHECKED ? ((CButton*)pBoxOne)->SetCheck(BST_CHECKED) : ((CButton*)pBoxOne)->SetCheck(BST_UNCHECKED);
  10. }
复制代码
44_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-2-18 09:20:06 | 显示全部楼层
自己顶。。。。。。。
44_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-2-18 18:11:47 来自手机 | 显示全部楼层
tony666 发表于 2021-2-18 09:29
CButton继承于CWnd
GetDlgItem返回类型是CWnd*
当你只需要调用CWnd的方法或变量时,就不需要转

教程里的目的是要给单选框默认按上,你的意思是单选框默认按上这个成员函数在CWnd类里没有,在CButton类里有,所以要转换一下是吧

点评

是的  发表于 2021-2-19 09:03
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-10-26 10:54

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表