问个简单的类型问题,马上给分的!

macenjie 2002-04-28 09:30:22
有段代码是:

CRect rc;
GetWindowRect(&rc);
CRgn m_rgn;
m_rgn.CreateRoundRectRgn(rc.left,rc.top,rc.right,rc.bottom, 20,20);
SetWindowRgn(m_rgn,TRUE);

就是建立圆角窗体的,编译没有错


但是MSDN上是写
int SetWindowRgn( HRGN hRgn, BOOL bRedraw );
为什么代码的地方用CRgn的m_rgn而没有出错呢?

(代码是VC的网站上下载的)
...全文
203 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
DanXer 2002-04-28
  • 打赏
  • 举报
回复
我赞成rovoboy(雪花满天)的说法.
SetWindowRgn(m_rgn,TRUE);
其实被编译器处理为
SetWindowRgn((HRGN)m_rgn,TRUE);
这样就在调用SetWindowRgn之前先调用了CRgn::operator HRGN()从而
产生CRgn的HRGN作为调用SetWindowRgn时的参数.
至于前一步很常见,
int a=2;
sin(a)相当于,sin((double)a);

eastrock 2002-04-28
  • 打赏
  • 举报
回复
CRgn::operator HRGN
operator HRGN( ) const;

Return Value

If successful, a handle to the Windows GDI object represented by the CRgn object; otherwise NULL.

Remarks

Use this operator to get the attached Windows GDI handle of the CRgn object. This operator is a casting operator, which supports direct use of an HRGN object.
macenjie 2002-04-28
  • 打赏
  • 举报
回复
如何实现操作符重载的?
papercrane 2002-04-28
  • 打赏
  • 举报
回复
CDC,CPen,CRgn等等都是设备环境类,内部封装对应的windows句柄,提供与各自句柄互相转换的方法,对于CDC有operator HDC()和FromHandle,其他类似。
opentuxedo 2002-04-28
  • 打赏
  • 举报
回复
CRgn中重载了=操作符,使CRgn给HRGN赋值时可以把CRgn的m_hrgn付给HRGN变量
crazy_lazy_pig 2002-04-28
  • 打赏
  • 举报
回复
确实是编译器自动把m_rgn转换成了HRGN类型的了,因为在CRgn类里有一个类型转化函数,可以自动转化的。
rovoboy 2002-04-28
  • 打赏
  • 举报
回复
CDC也是一样的
其实MFC里所有包装句柄的类都有类似的操作符。
rovoboy 2002-04-28
  • 打赏
  • 举报
回复
CRgn有一个转化到HRgn的函数
operator HRGN() const;
macenjie 2002-04-28
  • 打赏
  • 举报
回复
HDC是个句柄,是整数阿,而CDC是个类,又不是数字
怎么能够互相用呢
shenleav 2002-04-28
  • 打赏
  • 举报
回复
嗯,
huanyun 2002-04-28
  • 打赏
  • 举报
回复
那个int 是说明SetWindowRgn( HRGN hRgn, BOOL bRedraw );
是返回整形的;可以不要那个int
而CRgn m_rgn
是声明了一个m_rgn结构用来做SetWindowRgn( HRGN hRgn, BOOL bRedraw )
的参数;可能编译器把m_rgn当做指针了
不过好象没道理哦
tifaling 2002-04-28
  • 打赏
  • 举报
回复
在MFC中,这样的例子很常见。
比如:HWND就可以和CWnd类型交替使用;HDC和CDC。
他们一个是SDK中的类型,另一个是MFC中的class

16,473

社区成员

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

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

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