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

正文內(nèi)容

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

2024-12-13 22:44 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 CView::OnLButtonDown(nFlags, point)。 } 在鼠標(biāo)左鍵彈起消息響應(yīng)函數(shù)中實(shí)現(xiàn)繪圖,代碼如下: void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) { 10 // TODO: Add your message handler code here and/or call default //創(chuàng)建并獲得設(shè)備描述 CClientDC dc(this)。 switch (m_nDrawType) { case 1: (point,RGB( 255,0,0) )。 /*繪制點(diǎn) */ break。 case 2: /*繪制直線 */ (m_ptOrigin)。/*調(diào)用 MoveTo 函數(shù)移動(dòng)到原點(diǎn) */ (point)。/*調(diào)用 LineTo 函數(shù)繪制到終點(diǎn)。 */ break。 case 3: /*繪制矩形 */ (CRect(m_ptOrigin,point))。 break。 case 4: /*繪制橢圓 */ (CRect(m_ptOrigin,point))。 break。 CView::OnLButtonUp(nFlags, point)。 } 在上述程序中,設(shè)置一個(gè)點(diǎn),用到的函數(shù)是 SetPixel,這也是 CDC 類的一個(gè)成員方法,該函數(shù)的生命形式如下: COLORREF SetPixel ( POINT point, COLORREF crColor);該函數(shù)是在指定的點(diǎn)設(shè)置一個(gè)像素。其中第一個(gè)參數(shù)( point)是指定的點(diǎn),第二個(gè)參數(shù)( crColor)是指定的顏色。在程序中設(shè)定的顏色在系統(tǒng)顏色表中可能不存在,但系統(tǒng)會(huì)選擇一種和這個(gè)顏色最接近的顏色。 RGB 是一個(gè)宏,它有三個(gè)參數(shù),分別代表紅、綠、藍(lán)三種顏色的值。這三個(gè)參數(shù) BYTE 類型,取值范圍為 0~255。RGB( 0,0,0)是黑色, RGB( 255,255,255)是白色,將這三個(gè)分量設(shè)置成為 0~255之間的任意值,從而得到各種不同的顏色。這里的 RGB( 255,0,0)是紅色。 繪制 直線時(shí),首先調(diào)用 MoveTo 函數(shù)移動(dòng)到原點(diǎn),然后調(diào)用 LineTo 函數(shù)繪制到終點(diǎn)。 繪制矩形時(shí)使用 Rectangle 函數(shù),該函數(shù)聲明形式為: BOOL Rectangle ( LPCRECT lpRect); 該函數(shù)有一個(gè)指向 Crect 對(duì)象的參數(shù),后者可以利用兩個(gè)點(diǎn)來構(gòu)造。需要注意的是該函數(shù)需要的是指向 Crect 對(duì)象的指針,而上述代碼中傳遞的卻是 Crect 對(duì)象,但運(yùn)11 行編譯時(shí)也能成功通過,運(yùn)行時(shí)也不會(huì)報(bào)錯(cuò),這是為什么呢?我們知道 C 系列的語言都是強(qiáng)類型語言,如果類型不匹配的話,需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。但這里為什么沒有進(jìn) 行這樣的強(qiáng)制類型轉(zhuǎn)換程序也可以通過呢?實(shí)際上, Crect 類提供了這樣一個(gè)成員函數(shù):重載 LPCRECT 操作符,其作用是將 Crect 轉(zhuǎn)換為 LPCRECT 類型。因此,當(dāng)在程序中給 Rectangle 函數(shù)的參數(shù)賦值時(shí),如果它發(fā)現(xiàn)該參數(shù)是一個(gè) Crect對(duì)象,它就會(huì)隱式地調(diào)用 LPCRECT 操作符,將 Crect 類型的對(duì)象轉(zhuǎn)換為 LPRECT類型。因此,在給函數(shù)傳遞參數(shù)時(shí),如果我們看到的傳遞的數(shù)值類型和所需要的類型不匹配,但編譯和運(yùn)行都正確的情況時(shí),就要想想這其中的緣由了。當(dāng)然,有的情況下可能是這些類型之間本來就可以互相轉(zhuǎn)換, 例如 short 類型和 int 類型。但是參數(shù)是對(duì)象類的話,就要考慮了,它選擇的對(duì)象的構(gòu)造方法進(jìn)行的隱式轉(zhuǎn)換,還是有其他重載的操作符。 當(dāng)用戶選擇橢圓菜單項(xiàng)時(shí),調(diào)用 Ellipes 函數(shù)繪制一個(gè)橢圓。 連續(xù)線和扇形的繪制 Windows 系統(tǒng)為我們提供了一個(gè)畫圖程序,在該程序中,利用畫筆可以繪制連續(xù)的線條,下面我們?cè)O(shè)計(jì)繪制連續(xù)線和扇形。 為了繪制連續(xù)的線條,首先要得到線條的起點(diǎn),這在前面已經(jīng)實(shí)現(xiàn)。然后需要捕獲鼠標(biāo)移動(dòng)過程中的每一個(gè)點(diǎn),這可以通過捕獲鼠標(biāo)移動(dòng)消息( WM_MOUSEMOVE)來實(shí)現(xiàn)。在此消息響應(yīng)函 數(shù)中,在依次捕獲的各個(gè)點(diǎn)之間繪制一條條非常短的線段,從而就可以繪制出一條連續(xù)的線條。 遵照這一思路,我們開始增加程序的功能。首先為視類增加鼠標(biāo)移動(dòng)消息( WM_MOUSEMOVE)的響應(yīng)函數(shù)( OnMouseMove)。這樣,只要鼠標(biāo)在應(yīng)用程序窗口中移動(dòng)時(shí)都會(huì)進(jìn)入到這個(gè)消息響應(yīng)函數(shù)中。但這并不是我們所期望的,我們希望在鼠標(biāo)左鍵按下后開始繪圖。因此,我們需要有一個(gè)變量來表示鼠標(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; 接下來在視類的構(gòu)造函數(shù)中,將此變量初始化為 FALSE。 m_bdraw=FALSE; 當(dāng)鼠標(biāo)左鍵按下去時(shí),在視類的 OnLButtonDown 函數(shù)中將此變量初始化為12 TRUE。 m_bdraw=TRUE; 當(dāng)鼠標(biāo)左鍵彈起時(shí),在視類的 OnLButton 函數(shù)中將此變量初始化為假。 m_bdraw=FALSE; 然后在 OnMouseMove 函數(shù)中首先對(duì) m_bdraw 變量進(jìn)行判斷,如果其值為真,說明鼠標(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)的代碼。程序代 碼如下: 13 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),分別用來控制不同的畫刷。 MFC 提供了一個(gè) CBrush 類,可以用來創(chuàng)建畫刷對(duì)象。畫刷通常用來填充一塊區(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)拖曳過程中形成的矩形區(qū)域 14 (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)拖曳過程中形成的矩形區(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)過程中的起點(diǎn)和終點(diǎn)就決定了需要填充的矩形區(qū)域,因此,代碼中通過 CRect 類利用鼠標(biāo)拖動(dòng)的起點(diǎn)和終點(diǎn)構(gòu)造了這快矩形區(qū)域。 CRect 類提供了多個(gè)構(gòu)造函數(shù),這里使用的是下面這種構(gòu)造函數(shù),即通過指定矩形區(qū)域的左上角和右下角這兩個(gè)點(diǎn)來構(gòu)造一塊矩形區(qū)域。 CRect( POINT topLeft, POINT bottomRight); 代碼中的 CDC 類的成員函數(shù) FillRect,該函數(shù)的功能是用指定的畫刷填充一個(gè)15 矩形。該函數(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ù)來初始化這個(gè)位圖對(duì)象。 CBitmap 類提供了多個(gè)初始化函數(shù),例如, LoadBitmap、 CreateBitmap、 BitmapIndirect 等 。這里用 LoadBitmap 函數(shù)來加載一副位圖,該函數(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)名稱為
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1