我最近在学习Win32程序的时候碰到点麻烦,就是对FrameRect和FrameRgn这两个函数有点有不理解,FrameRect画的边界框为一个逻辑宽度,我觉得FrameRgn与FrameRect的作用差不多,那么FrameRgn的第四个和第五个函数好像就有点多余,Charles Petzold在那本《Programming Windows (Fifth Edition)》书里说的也不详细,我试着把映射方式改为“MM_ISOTROPIC”,然后把逻辑单位设为16分之1英寸,然后分别用这两个函数来给两个一样大小的矩形的矩形区域画边框,然而这两个边框却不是一样的宽度(FrameRgn的第四和第五个参数都为1),不知道为什么?请高手指点迷津!!!
解决方案 »
- 兔子党集结号吹响,仁人志士可以站起来了
- 调用AfxSetResourceHandle设置资源句柄,WIN7下没有问题,XP底下却不成功,为什么?
- 思考了有点久...关于按键精灵的问题,关于后台的问题
- 问,如何用MFC对控制数据的访问权限? 在线等!
- 过年放点分
- 我要做一个和QQ类似的程序,能实现简单的聊天和文件的发送,求例程!
- 如何利用VC制作自己的*.CUR即光标,我试了好多次均是空白,HOT SPOT我也指定了呀
- 用vc怎样生成一个word文档的表格
- CString转化成unsigned char,请看代码错在什么地方?(急)!
- 各位大侠,请给我推荐基本VC的好书
- 关于多媒体定时器的问题,各位进来看看
- 关于指针的问题
FrameRgn用指定刷子围绕指定区域画一个外框
RECT是正规的矩形,RGN可以是各种样式的形状(可以用CombineRgn等函数来合成)。故而:
FrameRect是只能沿着一个RECT的边界来画,所以只能画出来举行,而且这条边线的宽度只能是一个逻辑单位。
FrameRgn是沿着你所制造的一个形状来画边界线的,而且宽度我们可以自定义,所以你说的“FrameRgn的第四个和第五个函数好像就有点多余”就不是了。
nWidth
[in] Specifies the width, in logical units, of vertical brush strokes.
nHeight
[in] Specifies the height, in logical units, of horizontal brush strokes. 呵呵,多说无益,看看代码你就明白了:
在一个单文档的OnDraw里加上:
CBrush brush;
brush.CreateSolidBrush(0xff00cc); CRect rect;
rect.SetRect(100, 100, 200, 200);
pDC->FrameRect(&rect,&brush); CRgn rgn;
rgn.CreateEllipticRgn(0,0,100,100);
pDC->FrameRgn(&rgn,&brush,2,10); brush.DeleteObject();看到区别了吧?