如題,此文屬於新手級別的mfc運用
這樣乙個基於對話方塊的mfc簡單工程就建成了。
然後再testdlg.cpp裡找到void ctestdlg::onpaint(),在else裡的cdialog::onpaint();後面寫
cclientdc dc(this);//選定當前畫圖環境
cpen pen(ps_solid,1,#ff0000);//做一支紅色粗細為1的筆
dc.selectobject(&pen);//將pen放到dc上
dc.rectangle(100,100,200,200);//畫乙個矩形
完成!
繪製任意線條:
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_ptorigin = point;
m_bdraw = true;
5、左鍵抬起:
m_bdraw = false;
6、滑鼠移動時:
//畫連續線條
cclientdc dc(this);
if(m_bdraw)
//畫扇形線條
cclientdc dc(this);
if(m_bdraw)
//畫帶外包線的扇形線條
新增成員變數:
cpoint m_ptold;
在滑鼠左鍵按下時初始化:
m_ptold = point;
在滑鼠移動時進行改變:
cclientdc dc(this);
if(m_bdraw)
畫矩形:
畫無邊框的矩形
方法說明:利用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);
cclientdc dc(this);
dc.fillrect(crect(m_ptorigin,point),&brush);
畫有邊框的矩形
方法說明:利用rectangle方法來畫矩形。其中cbrush與cpen類分別負責矩形內部和矩形邊框的屬性
//畫中心為白色的矩形
cclientdc dc(this);
dc.rectangle(crect(m_ptorigin,point));
//畫中心為透明的矩形
cclientdc dc(this);
cbrush *pbrush=cbrush::fromhandle((hbrush)
getstockobject(null_brush));
cbrush *poldbrush=dc.selectobject(pbrush);
dc.rectangle(crect(m_ptorigin,point));
poldbrush=pbrush;
//畫中心為透明邊為任意顏色的矩形
cclientdc dc(this);
cpen pen(ps_solid,1,rgb(234,23,53));
cpen *poldpen=dc.selectobject(&pen);
cbrush *pbrush=cbrush::fromhandle((hbrush)
getstockobject(null_brush))
cbrush *poldbrush=dc.selectobject(pbrush);
dc.rectangle(crect(m_ptorigin,point));
dc.selectobject(poldpen);
dc.selectobject(poldbrush);
使用畫筆、畫刷
在onlbuttonup函式中:
/cpen pen(ps_solid,1,rgb(234,23,53));
//定義乙個cpen類物件,並利用rgb巨集改變其顏色
cclientdc dc(this);
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);
cclientdc dc(this);
crect rect(m_ptorigin,point);
dc.fillrect(&rect,&brush);
/cbrush *brush;
brush = cbrush::fromhandle((hbrush)getstockobject(null_brush));
cclientdc dc(this);
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物件從裝置環境中分離出來。
CAD畫矩形怎麼輸入長寬?CAD畫矩形教程
cad製圖過程中經常會需要畫矩形,很多cad新手小夥伴在cad繪圖中都是直接通過點選座標點來繪製矩形,不知道cad畫矩形怎麼輸入長寬,其實很簡單,接下來小編就來給大家介紹一下浩辰cad看圖王電腦版中cad畫矩形的相關操作技巧吧!cad畫矩形的操作步驟 首先開啟浩辰cad看圖王電腦版,然後在軟體介面右...
QOpenglWidget 畫動態矩形
使用的都是opengl的函式,只不過qt再封裝了一遍 在使用過程中有一些注意點,需要記下。我的標頭檔案申明如下 ifndef gldrawwidget h define gldrawwidget h include include include qt forward declare class q...
MFC 隨機矩形
問題描述 簡單地使用隨即的尺寸和顏色不停的繪製一系列的影象。一種古老的方式 設定乙個向視窗函式傳送wm timer訊息的windows計時器。對每個wm timer訊息,呼叫getdc函式獲取裝置環境,然後繪製乙個隨機矩形,接著呼叫releasedc函式釋放裝置環境。方法弊端 程式不能很快的繪製隨機...