⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 untitled-26.txt

📁 mfc 教程
💻 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 + -