📄 untitled-26.txt
字号:
第2章在窗口中绘图55
画刷原点
在使用抖动色或阴影线画刷时,应该注意设备描述表的属性之一:画刷原点。Windows
在用阴影线或抖动色填充某个区域时,在水平和竖直方向上是按8个像素XS个像素的样
式填充的。在默认方式下,该图案的原点,也就是“画刷原点”,是设备点(0,0)——窗口左上
角上的屏幕像素点。这意味着一个原点在左上角,宽、高各为IO0个像素的矩形内的图案,
与一个位置稍向左或右移动几个像素点的矩形内的图案相比,前者与矩形边框的符合程度
要差一些。请参看图2-8。在多数应用场合中,这不会有什么影响。用户不可能注意到画刷
对齐中小小的不同。然而在某些情况下,这却是个大问题。
(100;100)(104,100)
@@
阴影线正好与矩因为矩形向右移T4
形的左上角交叉个像素.所以阴影线
跨了角
图2.8画刷对齐
假定您用阴影线画刷填充一个矩形,并且反复清除和重画向右或向左平移一个像素点
后的矩形,以最终形成这个矩形的动态移动过程。如果在每次重画之前不把画刷原点重置
在相对于矩形不动的定点上,则在矩形移动的同时阴影线图案也要“走”了。
如何解决这个问题呢?在将画刷选人设备描述表和画矩形之前,先在画刷对象中调用
CGdiobject:: Unrealizeobject,允许画刷原点移动。然后调用 CDC:: SetBrushorg将画刷原点和
矩形的左上角对齐,如下所示:
CPoint point(xl, yi);
dc.LPtoDP(&po。nt);
point.x%= 8;
poiflt.y%= 8;
brush.Unreallzeob3ect();
dc.SetBrushora(voint);
dc.Selectobject(&bru。h);
dc.Rectangle(xl,yi,xZ,yZ);
在这个例子中,point是一个 CP0int对象,它保存矩形左上角的逻辑坐标值。要将逻辑
坐标值转换成设备坐标值(画刷原点通常是以设备坐标值给出的),需调用LPtODP。由于传
递给SetBrushorg的坐标值应在0-7范围内,所以还要执行模8运算。这样无论矩形画在窗
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -