freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于vcmfc程序設(shè)計(jì)——簡(jiǎn)易畫圖板(編輯修改稿)

2025-09-06 14:52 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 OVE)的響應(yīng)函數(shù)(OnMouseMove)。這樣,只要鼠標(biāo)在應(yīng)用程序窗口中移動(dòng)時(shí)都會(huì)進(jìn)入到這個(gè)消息響應(yīng)函數(shù)中。但這并不是我們所期望的,我們希望在鼠標(biāo)左鍵按下后開始繪圖。因此,我們需要有一個(gè)變量來(lái)表示鼠標(biāo)左鍵是否按下這一狀態(tài),然后在鼠標(biāo)移動(dòng)消息響應(yīng)函數(shù)中對(duì)這一變量進(jìn)行判斷。當(dāng)此變量為真,即鼠標(biāo)左鍵已經(jīng)按下去,我們開始繪圖。于是,為視類添加一個(gè)BOOL型的私有變量m_bDraw,當(dāng)鼠標(biāo)左鍵按下去時(shí),此變量為真;當(dāng)鼠標(biāo)左鍵彈起時(shí),此變量為假,這時(shí),我們就不再繪制線條了。該變量在視類頭文件中的定義代碼如下:Private: BOOL m_bDraw;接下來(lái)在視類的構(gòu)造函數(shù)中,將此變量初始化為FALSE。m_bdraw=FALSE;當(dāng)鼠標(biāo)左鍵按下去時(shí),在視類的OnLButtonDown函數(shù)中將此變量初始化為TRUE。m_bdraw=TRUE;當(dāng)鼠標(biāo)左鍵彈起時(shí),在視類的OnLButton函數(shù)中將此變量初始化為假。m_bdraw=FALSE;然后在OnMouseMove函數(shù)中首先對(duì)m_bdraw變量進(jìn)行判斷,如果其值為真,說(shuō)明鼠標(biāo)左鍵已經(jīng)按下去了,這時(shí)就可開始進(jìn)行畫線操作。還有一點(diǎn)需要注意,因?yàn)槊坷L制一條線段后,下次應(yīng)該從這條線段的終點(diǎn)開始繼續(xù)繪制。因此,繪制完當(dāng)前線段后,應(yīng)該修改線段的起點(diǎn),將當(dāng)前線段的終點(diǎn)作為下一條線段的起點(diǎn),程序代碼如下:void CGraphicView::OnMouseMove(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call default {//創(chuàng)建并獲得設(shè)備描述 CClientDC dc(this)。//創(chuàng)建寬度為1的實(shí)線紅色畫筆 CPen pen (PS_SOLID, 1, RGB(255,0,0))。//把創(chuàng)建的畫筆選入設(shè)備描述 CPen *pOldpen=(amp。pen)。 if(m_bDraw==true) { (m_ptOrigin)。 (point)。//修改線段的起點(diǎn) m_ptOrigin=point。 }//恢復(fù)設(shè)備描述 (pOldpen)。 CView::OnMouseMove(nFlags, point)。 }如果在上面繪制連續(xù)線條的程序中,保持每段小直線的起點(diǎn)不變,即以鼠標(biāo)左鍵按下時(shí)的起點(diǎn)為起點(diǎn)不變,分別繪制到鼠標(biāo)移動(dòng)點(diǎn)的直線,這時(shí)就會(huì)出現(xiàn)扇形的效果。也就是去掉上述代碼OnMouseMove函數(shù)中修改線段起點(diǎn)的代碼。程序代碼如下:void CGraphicView::OnMouseMove(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call default {//創(chuàng)建并獲得設(shè)備描述 CClientDC dc(this)。//創(chuàng)建寬度為1的實(shí)線紅色畫筆 CPen pen (PS_SOLID, 1, RGB(255,0,0))。//把創(chuàng)建的畫筆選入設(shè)備描述 CPen *pOldpen=(amp。pen)。 if(m_bDraw==true) { (m_ptOrigin)。 (point)。 }//恢復(fù)設(shè)備描述 (pOldpen)。 CView::OnMouseMove(nFlags, point)。 }再為此程序添加一個(gè)子菜單,菜單名稱為“畫刷”,并為其添加三個(gè)菜單項(xiàng),分別用來(lái)控制不同的畫刷。MFC提供了一個(gè)CBrush類,可以用來(lái)創(chuàng)建畫刷對(duì)象。畫刷通常用來(lái)填充一塊區(qū)域。簡(jiǎn)單畫刷、位圖畫刷、透明畫刷,程序代碼如下:void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) { //創(chuàng)建一個(gè)紅色畫刷 CBrush brush(RGB(255,0,0))。 //創(chuàng)建并獲得設(shè)備描述表 CClientDC dc(this)。 //利用紅色畫刷填充鼠標(biāo)拖曳過(guò)程中形成的矩形區(qū)域 (CRect(m_ptOrigin,point),amp。brush)。//創(chuàng)建位圖對(duì)象 CBitmap bitmap。 //加載位圖資源 (IDB_BITMAP1)。 //創(chuàng)建位圖畫刷 CBrush brush(amp。bitmap)。 //創(chuàng)建并獲得設(shè)備描述表 CClientDC dc(this)。 //利用紅色畫刷填充鼠標(biāo)拖曳過(guò)程中形成的矩形區(qū)域 (CRect(m_ptOrigin,point),amp。brush)。 //創(chuàng)建并獲得設(shè)備描述表 CClientDC dc(this)。 //創(chuàng)建一個(gè)空畫刷 CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH))。 //將空畫刷選入設(shè)備描述表 CBrush *pOldBrush = (pBrush)。 //繪制一個(gè)矩形 (CRect(m_ptOrigin,point))。 //恢復(fù)先前的畫刷 (pOldBrush)。 m_bDraw = FALSE。 CView::OnLButtonUp(nFlags, point)。}在簡(jiǎn)單畫刷程序中,首先創(chuàng)建一個(gè)紅色畫刷;接著創(chuàng)建設(shè)備描述表對(duì)象;然后調(diào)用設(shè)備描述表對(duì)象的成員函數(shù)FillRect,利用指定的畫刷填充一塊指定的矩形區(qū)域,而鼠標(biāo)拖動(dòng)過(guò)程中的起點(diǎn)和終點(diǎn)就決定了需要填充的矩形區(qū)域,因此,代碼中通過(guò)CRect類利用鼠標(biāo)拖動(dòng)的起點(diǎn)和終點(diǎn)構(gòu)造了這快矩形區(qū)域。CRect類提供了多個(gè)構(gòu)造函數(shù),這里使用的是下面這種構(gòu)造函數(shù),即通過(guò)指定矩形區(qū)域的左上角和右下角這兩個(gè)點(diǎn)來(lái)構(gòu)造一塊矩形區(qū)域。CRect(POINT topLeft,POINT bottomRight);代碼中的CDC類的成員函數(shù)FillRect,該函數(shù)的功能是用指定的畫刷填充一個(gè)矩形。該函數(shù)將填充全部的矩形,包括上左邊界,但不填充右底邊界。FillRect函數(shù)的聲明如下:void FillRect (LPCRECT lpRect,CBrush* pBrush);該函數(shù)有兩個(gè)參數(shù),lpRect是指向一個(gè)RECT結(jié)構(gòu)體或CRect對(duì)象的指針,該結(jié)構(gòu)體或?qū)ο笾邪艘畛涞木匦蔚倪壿嬜鴺?biāo)。pBrush是指向用于填充矩形的畫刷對(duì)象的指針。在位圖畫刷程序中,CBrush類有下面這樣一種構(gòu)造函數(shù)。CBrush (CBitmap* pBitmap);該構(gòu)造函數(shù)要求一個(gè)CBitmap類型的指針,CBitmap類是位圖類,于是我們就會(huì)這樣想:利用這個(gè)構(gòu)造函數(shù)是否就可以創(chuàng)建一個(gè)位圖畫刷呢?事實(shí)確實(shí)如此。創(chuàng)建CBitmap對(duì)象時(shí),僅調(diào)用其構(gòu)造函數(shù)并不能得到一個(gè)有用的位圖對(duì)象,還需要調(diào)用一個(gè)初始化函數(shù)來(lái)初始化這個(gè)位圖對(duì)象。CBitmap類提供了多個(gè)初始化函數(shù),例如,LoadBitmap、CreateBitmap、BitmapIndirect等。這里用LoadBitmap函數(shù)來(lái)加載一副位圖,該函數(shù)的聲明如下:BOOL LoadBitmap (LPCTSTR lpszResourceName);BOOL LoadBitmap (UINT nIDResource);其中第二種聲明需要一個(gè)資源ID作為參數(shù)。首先給程序增加一個(gè)位圖資源。為一個(gè)工程創(chuàng)建資源有多種實(shí)現(xiàn)方法,其中一種方法可以利用【Insert】菜單下的【Resource…】命令,在彈出的對(duì)話框中選擇Bitmap資源類型,單擊【New】按鈕,即可創(chuàng)建一個(gè)默認(rèn)名稱為IDB_BITMAP1的位圖資源,并在VC++集成開發(fā)環(huán)境右邊的代碼編輯區(qū)中打開位圖編輯器??梢岳镁庉嬈饔疫叺恼{(diào)色板和繪圖工具來(lái)編輯位圖資源,還可以通過(guò)拉伸位圖編輯器中網(wǎng)格周圍的藍(lán)色方點(diǎn)來(lái)調(diào)整位圖的大小。在透明畫刷程序中,我們利用GetStockObject這個(gè)函數(shù)來(lái)獲取一個(gè)黑色或白色的畫刷句柄。這個(gè)函數(shù)是否能夠獲得一個(gè)透明畫刷句柄呢?從MSND提供的幫助信息中,可以看到該函數(shù)的參數(shù)取值之一可以是NULL_BRUSH,以獲取一個(gè)空畫刷。那么,這個(gè)空畫刷是否就是我們所需要的透明畫刷呢?結(jié)論是正確的。但這時(shí)存在一個(gè)問(wèn)題,我們獲取的是句柄,而在進(jìn)行繪制操作時(shí)需要的是一個(gè)畫刷對(duì)象。如何從畫刷句柄轉(zhuǎn)換為畫刷對(duì)象呢?CBrush類提供了一個(gè)FromHandle函數(shù)來(lái)實(shí)現(xiàn)這樣的功能。該函數(shù)的聲明如下:Static CDC* PASCAL FromHandle(HDC hDC);為程序添加一個(gè)設(shè)置對(duì)話框,允許用戶指定畫筆的類型、線寬,并讓隨后的繪圖操作就使用用戶指定的新設(shè)置值來(lái)進(jìn)行繪制。為了實(shí)現(xiàn)這一功能,首先需要為程序添加一個(gè)對(duì)話框資源,并按下表修改屬性。屬性值IDIDD_DLG_SETTINGCaptionSettingFont宋體設(shè)置線型、線寬對(duì)話框的代碼如下:void CGraphicView::OnSetting() { //TODO: Add your mand handler code here CSettingDlg dlg。 =m_nLineWidth。 =m_nLineStyle。 if(IDOK==()) { m_nLineWidth=。 m_nLineStyle=。 }}顏色對(duì)話框看起來(lái)比較復(fù)雜。實(shí)際上,MFC為我們提供了一個(gè)類:CColorDialog,可以很方便的創(chuàng)建這樣的一個(gè)顏色對(duì)話框。void CGraphicView::OnColor() { // TODO: Add your mand handler code here CColorDialog dlg。 |=CC_RGBINIT | CC_FULLOPEN。 =m_clr。 if(IDOK==()) { m_clr=。 }}void CGraphicView::OnFileOpen() { // TODO: Add your mand handler code here HMETAFILE hmetaFile。 hmetaFile=GetMetaFile()。 (hmetaFile)。 DeleteMetaFile(hmetaFile)。 Invalidate()。}void CGraphicView::OnFileSave() { // TODO: Add your mand hand
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1