繪制任意線條:
1、建立基于單文檔工程:draw
cdrawview類中添加成員變量:
cpoint m_ptorigin;
bool m_bdraw;
2、cdrawview()中初始化:
m_ptorigin = point;
m_bdraw = false;
3、添加消息響應函數:
wm_lbuttondown wm_lbuttonup wm_mousemove
4、左鍵按下時:
m_bdraw = true;
5、左鍵擡起:
6、滑鼠移動時:
//畫連續線條
cclientdc dc(this);
if(m_bdraw)
{
dc.moveto(m_ptorigin);
dc.lineto(point);
m_ptorigin = point;
}
//畫扇形線條
if(m_bdraw)
//畫帶外包線的扇形線條
析:畫帶外包線的扇形線條,不光記錄初始位置,還要記錄滑鼠移動上一位置。
添加成員變量:
cpoint m_ptold;
在滑鼠左鍵按下時初始化:
m_ptold = point;
在滑鼠移動時進行改變:
dc.lineto(m_ptold);
dc.moveto(m_ptold);
m_ptold = point;
畫矩形:
畫無邊框的矩形
方法說明:利用fillrect函數填充矩形。填充内容為畫刷的内容,即畫刷對象的指針。
cbrush brush(rgb(5,255,255));
cclientdc dc(this);
dc.fillrect(crect(m_ptorigin,point),&brush);
以位圖作為畫刷的資源
cbitmap bitmap;
bitmap.loadbitmap(idb_bitmap1);
cbrush brush(&bitmap);
畫有邊框的矩形
方法說明:利用rectangle方法來畫矩形。其中cbrush與cpen類分别負責矩形内部和矩形邊框的屬性
//畫中心為白色的矩形
dc.rectangle(crect(m_ptorigin,point));
//畫中心為透明的矩形
cbrush *pbrush=cbrush::fromhandle((hbrush)
getstockobject(null_brush));
cbrush *poldbrush=dc.selectobject(pbrush);
poldbrush=pbrush;
//畫中心為透明邊為任意顔色的矩形
cpen pen(ps_solid,1,rgb(234,23,53));
cpen *poldpen=dc.selectobject(&pen);
cbrush *pbrush=cbrush::fromhandle((hbrush)
getstockobject(null_brush))
dc.selectobject(poldpen);
dc.selectobject(poldbrush);
使用畫筆、畫刷
在onlbuttonup函數中:
/////////////////////////////////////////////////////////////////
cpen pen(ps_solid,1,rgb(234,23,53));
//定義一個cpen類對象,并利用rgb宏改變其顔色
cpen *poldpen=dc.selectobject(&pen); //将其選入裝置表
dc.moveto(m_ptorigin);
dc.lineto(point);
dc.selectobject(poldpen);
cbrush brush(rgb(0,255,0));
cclientdc dc(this);
crect rect(m_ptorigin,point);
dc.fillrect(&rect,&brush);
使用位圖建立畫刷:
插入->資源->位圖->引入,可以引入位圖,初始一般命名為:idb_bitmap1
cbitmap bitmap;
bitmap.loadbitmap(idb_bitmap1);
cbrush brush(&bitmap);
dc.fillrect(&rect,&brush);
cbrush *brush;
brush = cbrush::fromhandle((hbrush)getstockobject(null_brush));
cbrush *poldbrush =dc.selectobject(brush) ;
dc.rectangle(crect(m_ptorigin,point));
dc.selectobject(poldbrush) ;
注:
常用的繪圖裝置類對象的建立和将其引入到裝置環境中的方法
在選擇繪圖裝置類對象(gdi對象)進行繪圖時,一般可按下列步驟進行:
(1)定義一個gdi對象,然後調用相應的函數(如createpen、createsolidbrush等)建立此gdi對象。
(2)将已構造出的gdi對象利用裝置環境類對象的成員函數selectobject選入到目前環境中,并同時将原來的gdi對象儲存起
來。
(3)繪圖結束後,恢複目前裝置環境中原來的gdi對象。
注意:在windows系統中包含了一些庫存的gdi對象,在第(3)步中可直接利用裝置環境類(cdc)的成員函數
selectstockobject将一個windows庫存的gdi對象選入,系統可自動将原來選入的gdi對象從裝置環境中分離出來。