pScrollBar与CSliderCtrl

问题:

我在看《VC技术内幕》,其中,下面这样的类似代码出现很多次,
void CEx06bDialog::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar(
{
   CSliderCtrl* pSlide = (CSliderCtrl*)pScrollBar;
   //.......
}
我不理解的是,(CSliderCtrl*)是做什么用的,代表什么含义?
我粗浅的看法是,pScrollBar是一个CScrollBar类指针,pSlide 是定义的CSliderCtrl类指针,现在把pScrollBar强制类型转换后,初始化给pSlide 。这样做是什么道理?CScrollBar和CSliderCtrl都是CWnd的派生类,他们之间又没有继承关系,可以这样强制转换吗?

简答:

这是微软做好的对所有的滚动类控件滚动的同一消息接口。Slider控件也是滚动类控件中的一种,因此,它的滚动事件,也是由OnHScroll和OnVScroll处理。虽然参数是CScrollBar指针,但也不要紧啊,指针只是一个地址而已。当是由Slider发出的滚动事件时,这个指针实际指向的对象就是CSliderCtrl对象,那么我们直接CSliderCtrl* pSlide = (CSliderCtrl*)pScrollBar;就可以获得Slider指针了。就像发送消息一样,我们知道传过来的是什么就可以;

比如我写这样的程序:

int *pInt = new int[2];
CString *pStr = (CString*)pInt;
编译也是能通过的。
就是说,传递的只是一个指针,指针只是一个32位的地址而已。只要是32位的变量,都可以去接收,至于接收后正确与否,就看你是不是很清楚传递过来的指针代表着什么。

转载于:https://www.cnblogs.com/gzy-zju-edu/articles/4083917.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值