?? untitled-26.txt
字號(hào):
第2章在窗口中繪圖55
畫刷原點(diǎn)
在使用抖動(dòng)色或陰影線畫刷時(shí),應(yīng)該注意設(shè)備描述表的屬性之一:畫刷原點(diǎn)。Windows
在用陰影線或抖動(dòng)色填充某個(gè)區(qū)域時(shí),在水平和豎直方向上是按8個(gè)像素XS個(gè)像素的樣
式填充的。在默認(rèn)方式下,該圖案的原點(diǎn),也就是“畫刷原點(diǎn)”,是設(shè)備點(diǎn)(0,0)——窗口左上
角上的屏幕像素點(diǎn)。這意味著一個(gè)原點(diǎn)在左上角,寬、高各為IO0個(gè)像素的矩形內(nèi)的圖案,
與一個(gè)位置稍向左或右移動(dòng)幾個(gè)像素點(diǎn)的矩形內(nèi)的圖案相比,前者與矩形邊框的符合程度
要差一些。請(qǐng)參看圖2-8。在多數(shù)應(yīng)用場(chǎng)合中,這不會(huì)有什么影響。用戶不可能注意到畫刷
對(duì)齊中小小的不同。然而在某些情況下,這卻是個(gè)大問題。
(100;100)(104,100)
@@
陰影線正好與矩因?yàn)榫匦蜗蛴乙芓4
形的左上角交叉?zhèn)€像素.所以陰影線
跨了角
圖2.8畫刷對(duì)齊
假定您用陰影線畫刷填充一個(gè)矩形,并且反復(fù)清除和重畫向右或向左平移一個(gè)像素點(diǎn)
后的矩形,以最終形成這個(gè)矩形的動(dòng)態(tài)移動(dòng)過程。如果在每次重畫之前不把畫刷原點(diǎn)重置
在相對(duì)于矩形不動(dòng)的定點(diǎn)上,則在矩形移動(dòng)的同時(shí)陰影線圖案也要“走”了。
如何解決這個(gè)問題呢?在將畫刷選人設(shè)備描述表和畫矩形之前,先在畫刷對(duì)象中調(diào)用
CGdiobject:: Unrealizeobject,允許畫刷原點(diǎn)移動(dòng)。然后調(diào)用 CDC:: SetBrushorg將畫刷原點(diǎn)和
矩形的左上角對(duì)齊,如下所示:
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);
在這個(gè)例子中,point是一個(gè) CP0int對(duì)象,它保存矩形左上角的邏輯坐標(biāo)值。要將邏輯
坐標(biāo)值轉(zhuǎn)換成設(shè)備坐標(biāo)值(畫刷原點(diǎn)通常是以設(shè)備坐標(biāo)值給出的),需調(diào)用LPtODP。由于傳
遞給SetBrushorg的坐標(biāo)值應(yīng)在0-7范圍內(nèi),所以還要執(zhí)行模8運(yùn)算。這樣無論矩形畫在窗
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -