CRect和HRGN的区别

大福宝 2008-11-17 02:24:32
为什么我自己继承的CWnd类中总是画不出这个异形窗口呢?CRect和HRGN在应用上究竟有什么区别呢?
...全文
1081 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
尹绵绵 2010-04-17
  • 打赏
  • 举报
回复
帮顶,正在学
xiaopoy 2008-11-26
  • 打赏
  • 举报
回复
well
局部参数只能在本函数以及本函数调用的下层router和proc中使用纳。
LZ你的说法没错
大福宝 2008-11-24
  • 打赏
  • 举报
回复
怎么没人理我了?自己顶一个,呵呵
water_alliance 2008-11-23
  • 打赏
  • 举报
回复
up
帅得不敢出门 2008-11-21
  • 打赏
  • 举报
回复
up~~
大福宝 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 redleaves 的回复:]
引用 6 楼 syaomgg 的回复:
以上谢谢大家给我的指导,我明白了很多!
我主要是想建一个不规则的窗口,但一直不能显示,起先以为是CRect类用的不对。在观察网上下的程序的过程中发现大家用的是CRgn进行区域的生成,而我用的是HRGN类型进行区域的生成。在改完CRgn类型后发现窗口就能生成了。有哪位能告诉我是什么原因吗?在此基础上再给贴子加分。。。

不规则窗口在Windows下有两种方式可以实现,一种是用Region,一种是用La…
[/Quote]
这个意思我好像明白了很多!
当时观察从网上下载的程序的时候,他就是直接用的HRGN进行区域的描画.自己也没多想就照着画瓢了,呵呵

现在回想起来才明白为什么人家的程序用HRGN可以实现,而我的却不行:
他只是在一个函数中应用,用完马上就显示.而我的却是在这个函数中生成,而在另一个函数中引用显示.
这样就导致在该函数中生成区域时句柄是存在的,而当本函数结束时局部变量资源被释放,在别的函数中根本就不能再应用这个区域句柄了.
我说的对吗?
pushregistration 2008-11-21
  • 打赏
  • 举报
回复
不懂,up
android2008 2008-11-21
  • 打赏
  • 举报
回复
不懂,up
redleaves 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 syaomgg 的回复:]
以上谢谢大家给我的指导,我明白了很多!
我主要是想建一个不规则的窗口,但一直不能显示,起先以为是CRect类用的不对。在观察网上下的程序的过程中发现大家用的是CRgn进行区域的生成,而我用的是HRGN类型进行区域的生成。在改完CRgn类型后发现窗口就能生成了。有哪位能告诉我是什么原因吗?在此基础上再给贴子加分。。。
[/Quote]
不规则窗口在Windows下有两种方式可以实现,一种是用Region,一种是用Layered Window.
看样子你用的是第一种.用这种方式,你只要生成一个适合的Region并SetWindowRgn就可以了.你说用CRgn是对的,而直接使用HRGN不对,那应该是你用的不对.再仔细检查一下Region的用法吧.

CRect和HRGN的区别:
CRect只是一个类,封装了对于RECT的操作.描述了矩形的对角,可以确定出矩形.
HRGN是Region的句柄,相当于一个指向了Region对象的指针.但这个"指针"只能由操作系统识别.Region对象描述了一个区域,这个区域可以由多个不同形状/大小的对象经过各种方式的组合以后形成.而CRgn只是MFC里对这个句柄的封装,可以方便你的使用.
xiaopoy 2008-11-21
  • 打赏
  • 举报
回复
不熟悉,自己的看法:
HRGN是个句柄,handler
新建个句柄没有实例,自然不能显示了
CRGN是个实例。
大福宝 2008-11-20
  • 打赏
  • 举报
回复
以上谢谢大家给我的指导,我明白了很多!
我主要是想建一个不规则的窗口,但一直不能显示,起先以为是CRect类用的不对。在观察网上下的程序的过程中发现大家用的是CRgn进行区域的生成,而我用的是HRGN类型进行区域的生成。在改完CRgn类型后发现窗口就能生成了。有哪位能告诉我是什么原因吗?在此基础上再给贴子加分。。。
xiaopoy 2008-11-18
  • 打赏
  • 举报
回复
矩形区域和区域的句柄
lsldd 2008-11-18
  • 打赏
  • 举报
回复
给你个资源,你自己分析下:
http://d.download.csdn.net/down/486145/lsldd
Longinc 2008-11-18
  • 打赏
  • 举报
回复
帮顶
lsldd 2008-11-18
  • 打赏
  • 举报
回复
CRect顾名思义,只是个矩形
HRGN是区域,有各种api函数可以创建任意形状的区域
创建区域后,使用SetWindowRgn改变窗体区域
hhyttppd 2008-11-18
  • 打赏
  • 举报
回复
CRect 就是一个普通的数据结构(类?)
HRGN是资源句柄(由操作系统管理,数量有限)

1 构造出异形HRGN(这个HRGN必须有效,并且不为空)
2 SetWindowRgn

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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