7.2.2畫直線
畫直線使用cdc類的lineto()函式兩個過載版本:
bool lineto(int x, int y);
bool lineto(point point);
引數x、y或point指定直線的終點位置,此函式從當前點到指定的終點之間畫一條直線,當前點包括在直線上,而終點不包括在直線上。如果畫線成功返回非0值,否則返回0.
cdc類的另乙個函式moveto()用於移動當前點的位置:
cpoint moveto(int x,int y);
cpoint moveto(point point);
引數x、y或point指定當前點的位置。
7.2.3畫矩形
bool rectangle(int x1,int y1,int x2,int y2);
x1,y1,x2,y2用於指定矩形左上角和右下角的座標
bool rectangle(lpcrect lprect);
lprect是乙個指向rect結構的指標,rect用於描述矩形的結構
rect結構的前兩個成員定義矩形左上角的橫、3座標,而後兩個成員定義矩形右下角的橫、縱座標。
如果畫矩形成功rectangle()函式返回非0值,否則返回0.
7.2.4畫圓及橢圓
cdc類的ellipse()函式用於話橢圓,兩種過載版本:
bool ellipse(int x1,int y1,int x2,int y2);
x1,y1,x2,y2用於指定橢圓外接矩形左上角和右下角的座標。
bool ellipse(lpcrect lprect);
lprect為指向rect結構的指標。
ellipse()函式中橢圓的形狀由其外接矩形來控制。
如果將外接矩形設定為正方形,則ellipse()就可用於畫圓。
如果畫橢圓成功ellipse()函式返回非0值,否則返回0.
7.3繪圖工具的使用
mfc中用cpen類封裝了windows的畫筆、用cbrush類封裝了windows的畫刷、用cbitmap類封裝了windows的點陣圖、用cfont類封裝了windows的字型、用cpalette類封裝了windows的調色盤、用crgn類封裝了windows的區域。
7.3.2畫筆與畫刷
1.建立畫筆
建立畫筆的兩種方法
(1) 一步構造法:利用cpen類的帶參建構函式來完成畫筆物件的建立及初始化。cpen類的帶參函式:
cpen(int npenstyle , int nwidth , colorref crcolor);
引數npenstyle指定畫筆的風格
引數nwidth指定筆的寬度
引數crcolor指定筆的rgb顏色值
(2) 二步構造法:cpen類的無參建構函式構造cpen類的物件,然後呼叫cpen類的createpen()或createindirect()函式初始化畫筆物件。createpen()函式版本:
bool createpen(int npenstyle,int nwidth);
引數npenstyle指定畫筆的風格
引數nwidth指定筆的寬度
2.建立畫刷
cbrush類有createsolidbrush()、createhatchbrush()、createbrushindirect()、createpatternbrush()、createdibpatternbrush()、createsyscolorbrush()等多個成員函式來建立畫刷。
建立畫刷的兩種方法:
(1) 一步構造法:利用cbrush類的帶參建構函式來完成畫刷物件的建立及初始化。
cbrush(colorref crcolor);
引數crcolor指定畫刷的前景顏色
如果函式執行成功,返回非0值,否則返回0.
7.3.3圖形填充
用cdc類的floodfill()成員函式可完成對封閉圖形的填充。
7.3.4繪圖過程
1.將畫筆與畫刷選入裝置描述符表
畫筆與畫刷建立完後,必須將其選入裝置描述符表,再使用。裝置描述符表只能儲存一種畫筆和畫刷,新的畫筆與畫刷選入裝置描述符表後,裝置描述符表原有的畫筆與畫刷將不再使用,除非將其重新選回裝置描述符表。
使用cdc類的selectobject()函式可以完成將畫筆與畫刷選入裝置描述符表的工作。
引數:ppen和pbrush分別為欲選入裝置描述符表的畫筆物件的指標。
返回值:分別為被替換出的裝置描述符表內原畫筆與畫刷物件的指標。
1. 恢復裝置描述符表的原有屬性
一旦將畫筆或畫刷等選進裝置描述符表物件,它會保留在裝置描述符表物件內一直到再次選入新的畫筆或畫刷為止。一般在乙個函式內改變了裝置描述符表的畫筆或畫刷等屬性時,應在該函式退出前在恢復裝置描述符表原來的屬性,方法是呼叫selectobject()函式並以舊的畫筆或畫刷作為其引數。
7.3.5繪圖模式
忽略螢幕顯示內容用畫筆簡單地畫圖到完全忽略畫筆僅保留螢幕內容。
**繪圖模式
r2_black
畫素的顏色總為黑色
r2_white
畫素的顏色總為白色
r2_nop
畫素保留不變
r2_not
畫素是螢幕原來的顏色的翻轉
r2_copypen
畫素是筆的顏色
r2_notcopypen
畫素是筆的顏色的翻轉
r2_mergepennot
畫素顏色=((not 螢幕顏色)or筆顏色)
r2_maskpennot
畫素顏色=((not 螢幕顏色)and筆顏色)
r2_mergenotpen
畫素顏色=((not 螢幕顏色)or筆顏色)
r2_masknotpen
畫素顏色=((not 螢幕顏色)and筆顏色)
r2_mergepen
畫素顏色=(筆顏色or螢幕顏色)
r2_notmergepen
畫素顏色=not(筆顏色or螢幕顏色)
r2_maskpen
畫素顏色=(筆顏色and螢幕顏色)
r2_notmaskpen
畫素顏色=not(筆顏色and螢幕顏色)
r2_xorpen
畫素顏色=(筆顏色xor螢幕顏色)
r2_notxorpen
畫素顏色=not(筆顏色xor螢幕顏色)
7.4文字輸出
7.4.1文字輸出函式
字串顯示函式
windows中輸出文字,常用的有cdc類的3個成員函式
texout():顯示乙個字串
exttextout():在乙個矩形區域中輸出乙個字串
drawtext():在乙個矩形區域中按某一格式輸出字串
介紹textout()函式的用法:
virtual bool textout(int x,int y,lpctstr lpszstring,int ncount);
引數x,y指定顯示字串的起始座標,lpszstring為指向待顯示字串的指標,ncount為字元個數。
bool textout(int x,int y,const cstring& str);
引數x,y指定顯示字串的起始座標,而待顯示的字串由str給出。
顯示成功均返回非0值,顯示不成功返回0.
2.顏色裝置函式
顯示文字時若要指定前景或背景顏色,可用cdc類的如下兩函式:
virtual colorref settextcolor(colorref crcolor);
此函式設定輸出文字的顏色為crcolor引數指定的值,函式的返回值為設定前的文字顏色值。
virtual colorref setbkcolor(colorref crcolor);
此函式裝置輸出文字的背景顏色為crcolor引數指定的值,函式的返回值為設定前的文字背景顏色值。
3.對齊方式設定函式
可以用cdc類的settextalign()函式設定輸出文字的對齊方式:
uint settextalign(uint nflags);
引數nflags用於指定對齊方式。
一次可以指定兩組以上的值,各個值間用按位與符號「|」練起來。
2. 在windows裡刪除文字
3. 可用getbkcolor()函式獲得背景顏色,並建立此種顏色的畫筆和實線畫刷,然後用gettextmetrics()可以確定當前字型的高度,並用gettextmetrics()確定想要刪除的串的長度,最後用rectangle()畫矩形刪除此文字。
cdc類的rectangle()函式用於畫矩形有兩個過載版本:
第七章總結
第七章終於是學完了,這一章也是花費了自己很多的時間,主要還是自己對於呼叫函式的不熟練,以及對於題目的理解和解題方法比較模糊,主要原因還是自己剛開始學習,接觸的題目比較少,寫的 也很少,這也告訴我還得多看和多練,才能更好的解決各種問題,碰到類似的題目,也能很熟練的將做過的題目思路運用到陌生題目中去。第...
第七章總結
有了 bx idata 這種表示記憶體單元的方式,我們就可以用更高階的結構來看待所要處理的資料。我們通過下面的問題來理解這一點。在codesg中填寫 將datasg中定義的第乙個字串轉化為大寫,第二個字串轉化為小寫。人在有一定上下文的情況下看到 1計算機中,所有的資訊都是進製,而人能理解的資訊是已經...
HTML第七章總結
作者做了乙個非常形象的比喻,將 css 必做 renovate the house,在這裡,css 包括了三個部分 selector the location of the html element property properties in that location style like bl...