新手用MFC畫矩形

2021-06-29 05:43:30 字數 3527 閱讀 1673

如題,此文屬於新手級別的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函式釋放裝置環境。方法弊端 程式不能很快的繪製隨機...