范例宝典中的实例192
发表在C语言图书答疑 2009-11-11
是否精华
版块置顶:
你好,我在学习VC范例宝典中的实例192,有点疑问:
CRect rc;
this->GetWindowRect(rc);
ClipCursor(&rc);
我查MSDN里说这两个函数里传入的参数RECT类型参数的指针或CRect类型对象,可是我试了一下,里面传入CRect rc;变量或&rc都可以正常运行。这是为什么呢?  
分享到:
精彩评论 1
学分: LV1
2009-11-11
沙发
1)首先要说的是,你看MSDN的翻译有问题。
以GetWindowRect为例,翻译应该是:它的参数是一个指针,这个指针可以指向CRect对象和RECT对象。

2)然后再要说明的是在MSDN中,如果你查找CRect类型,里面会有介绍都有哪些参数类型时,CRect对象可以传递。

回归到你说的主要问题,LPRECT类型为什么可以传递 rc 又可以传递&rc。
    1)传递&rc:你在工程中输入LPRECT(在什么地方都行),然后用鼠标选中,然后按F12,这样就可以看到LPRECT的定义处。从定义中可以看到LPRECT是一个指向tagRect类型的指针,那么对它赋值时,当然要使用一个对象的地址,也就是 &rc。

    2)传递rc: 那么为什么传递rc也会成功呢?正常来说,指针只能得到的是地址,而不是对象。
                接下来用同样的方法,在工程中输入CRect,然后按F12,查看它的定义处。从CRect类中可以看到这样一块内容
                operator LPRECT();
                operator LPRECT();const
                为什么指针能指向一个对象的重点原因就在这里了,就是因为对类型进行了重载操作!这样使得指针可以指向对象。

那么至于具体的深层代码的已经被封装到代码库中,如果要找的话就得亲自动手了。

   不过在代码层,只要看MSDN中的CRect解释都能看懂了。
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照