• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            關(guān)于MFC畫(huà)圖的一些總結(jié),MFC (Draw)

            轉(zhuǎn)自:http://www.cnblogs.com/volnet/articles/472794.html

            首先對(duì)按下鼠標(biāo)的一點(diǎn)進(jìn)行記錄,因此在WM_LBUTTONDOWN添加代碼:

            void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)

            {

                 // TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值

                 m_ptOrigin=point;

                 CView::OnLButtonDown(nFlags, point);

            }

            再次記錄鼠標(biāo)彈起WM_LBUTTONUP的點(diǎn)的位置才可完成底下1-3的任務(wù)。

            1、 畫(huà)線

            void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)

            {

                 // TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值

             

                 //畫(huà)黑色的線(方法一)

                 /*HDC hdc;    //聲明一個(gè)hdc

                 hdc=::GetDC(m_hWnd);   //用全局函數(shù)HDC GetDC(HWND hWnd);來(lái)獲取設(shè)備句柄。由于是全局函數(shù)因此在函數(shù)前加“::”即可

                 MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);

                 LineTo(hdc,point.x,point.y);

                 ::ReleaseDC(m_hWnd,hdc);    //釋放設(shè)備hdc*/

             

            /*方法二說(shuō)明:利用CDC Do all drawing through the member functions of a CDC object. The class provides member functions for device-context operations, working with drawing tools, type-safe graphics device interface (GDI) object selection, and working with colors and palettes.

            在其底下有兩個(gè)函數(shù)

            MoveTo

            Moves the current position.

            PolyBezier

            Draws one or more Bézier splines. The current position is neither used nor updated.

            方法二與方法一相比的好處在于:方法二無(wú)須再定義窗體的句柄*/

                 //畫(huà)黑色的線(方法二)

            /*CDC *pDC=GetDC();

                 pDC->MoveTo(m_ptOrigin);

                 pDC->LineTo(point);

                 ReleaseDC(pDC);*/

            /*方法三說(shuō)明:利用CDC的一個(gè)派生類CWindowDC類(The CWindowDC class is derived from CDC. It calls the Windows functions GetWindowDC at construction time and ReleaseDC at destruction time. This means that a CWindowDC object accesses the entire screen area of a CWnd (both client and nonclient areas).

            其與方法二比好處就在于:在實(shí)例化GetWindowDC對(duì)象的時(shí)候就已經(jīng)隱含獲取了hdc以及在對(duì)象生命周期結(jié)束的時(shí)候自動(dòng)釋放它,以減輕我們的負(fù)擔(dān)。

            */

                 //畫(huà)黑色的線(方法三)

            /*CWindowDC dc(this);  //this代表當(dāng)前窗體的句柄

                 dc.MoveTo(m_ptOrigin);

                 dc.LineTo(point);*/

            /*值得說(shuō)明的是:在CWindowDC dc(this);this代表當(dāng)前窗體的句柄,因此我們只需要將需要繪畫(huà)的窗體指針傳入即可。在本例子中由于該消息基于View類的,因此在程序中View窗口進(jìn)行繪畫(huà)有效。若要修改為MainFrame類的話,由于MainFrame類是View類的父窗口,因此我們僅僅需要獲取當(dāng)前類的父窗口的指針既可,也就是把當(dāng)前的this替換為GetParent()。若要在整個(gè)Windows桌面上繪畫(huà)的話可以獲取桌面的指針GetDesktopWindow()。具體代碼實(shí)現(xiàn)如下:*/

            //畫(huà)黑色的線(方法三)(基于MainFrame類框)

                 /*CWindowDC dc(GetParent());

                 dc.MoveTo(m_ptOrigin);

                 dc.LineTo(point);*/

             

                 //畫(huà)黑色的線(方法三)(基于Windows桌面)

                 /*CWindowDC dc(GetDesktopWindow());

                 dc.MoveTo(m_ptOrigin);

                 dc.LineTo(point);*/

            /*方法四說(shuō)明:利用CDC的一個(gè)派生類CClientDC類 (The CClientDC class is derived from CDC and takes care of calling the Windows functions GetDC at construction time and ReleaseDC at destruction time. This means that the device context associated with a CClientDC object is the client area of a window.

            其方法與CwindowDC基本類似。

            */

            //畫(huà)黑色的線(方法四)

            /*CClientDC dc(this);

                 dc.MoveTo(m_ptOrigin);

                 dc.LineTo(point);*/

             

            2、 改變顏色

            /*****************************************************************************************/

            //畫(huà)紅色的線

                 /*CPen pen(PS_SOLID,1,RGB(234,23,53));    //定義一個(gè)CPen類對(duì)象,并利用RGB宏改變其顏色

                 CClientDC dc(this);

                 CPen *pOldPen=dc.SelectObject(&pen); //將其選入設(shè)備表

                 dc.MoveTo(m_ptOrigin);

                 dc.LineTo(point);

                 dc.SelectObject(pOldPen);   //還原先前設(shè)備表中被改動(dòng)的缺省值*/  

            /*方法說(shuō)明:通過(guò)改變畫(huà)筆CPen的屬性并把它們選入設(shè)備表,然后再進(jìn)行畫(huà)線,設(shè)備表的缺省值是黑色 */

             

            3、 畫(huà)矩形

            /*****************************************************************************************/

            //畫(huà)無(wú)邊框的矩形

            /*方法說(shuō)明:利用FillRect函數(shù)填充矩形。填充內(nèi)容為畫(huà)刷的內(nèi)容,即畫(huà)刷對(duì)象的指針。*/

            //畫(huà)無(wú)邊框的矩形

                 /*CBrush brush(RGB(5,255,255));

                 CClientDC dc(this);

                 dc.FillRect(CRect(m_ptOrigin,point),&brush);*/

             

                 //以位圖作為畫(huà)刷的資源

                 //載入位圖到畫(huà)刷

                 /*CBitmap bitmap;

                 bitmap.LoadBitmap(IDB_BITMAP1);  /*從“項(xiàng)目”“添加資源”中添加位圖資源并將其ID號(hào)選到LoadBitmap()函數(shù)中。*/

                 CBrush brush(&bitmap);

                 CClientDC dc(this);

                 dc.FillRect(CRect(m_ptOrigin,point),&brush);*/

             

            //畫(huà)有邊框的矩形

            /*方法說(shuō)明:利用Rectangle方法來(lái)畫(huà)矩形。其中CBrushCPen類分別負(fù)責(zé)矩形內(nèi)部和矩形邊框的屬性*/

            //畫(huà)中心為白色的矩形

                 /*CClientDC dc(this);

                 dc.Rectangle(CRect(m_ptOrigin,point));*/

             

                 //畫(huà)中心為透明的矩形

                 /*CClientDC dc(this);

                 CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

                 CBrush *pOldBrush=dc.SelectObject(pBrush);

                 dc.Rectangle(CRect(m_ptOrigin,point));

                 pOldBrush=pBrush;*/

             

            //畫(huà)中心為透明邊為任意顏色的矩形

                 /*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);*/

             

            4、 畫(huà)任意線條

            /*要記錄每一個(gè)點(diǎn)的位置必須將以下代碼添加到WM_MOUSEMOVE的消息中才可記錄移動(dòng)中的每一點(diǎn)。

            但是要配合鼠標(biāo)左鍵按下這個(gè)動(dòng)作才可進(jìn)行記錄,否則鼠標(biāo)移動(dòng)的事件將包括左鍵沒(méi)按下的情況。因此我們必須定義一個(gè)全局變量來(lái)記錄鼠標(biāo)左鍵是否按下的信息。因此定義一個(gè)BOOL變量來(lái)記錄是或者否按下的信息。在CVIEW.h頭文件中添加一個(gè)私有的BOOL m_bDraw;的變量來(lái)記錄。在WM_LBUTTONDOWN中將其值修改為m_bDraw=TRUE; WM_LBUTTONUP中修改m_bDraw=FALSEWM_MOUSEMOVE中添加如下代碼。*/

                 CClientDC dc(this);

                 if(m_bDraw==TRUE)

                 {

                     dc.MoveTo(m_ptOrigin);

                     dc.LineTo (point);

                     m_ptOrigin=point;

                 }

                 //畫(huà)扇形線條

                 /*CClientDC dc(this);

                 if(m_bDraw==TRUE)

                 {

                     dc.MoveTo(m_ptOrigin);

                     dc.LineTo (point);

                 }*/

                

                 //畫(huà)帶包絡(luò)線的扇形線條

            /*需要記錄舊點(diǎn)的信息,因此在WM_LBUTTONDOWNm_ptOld中賦值為point以后在WM_MOUSEMOVE中改變其值*/

                 /*CClientDC dc(this);

                 if(m_bDraw==TRUE)

                 {

                     dc.MoveTo(m_ptOrigin);

                     dc.LineTo(m_ptOld);

                     dc.MoveTo(m_ptOld);

                     dc.LineTo(point);

                     m_ptOld=point;

                 }*/

             

            //介紹int SetROP2(int nDrawMode);方法,通過(guò)改變nDrawMode參數(shù)的值來(lái)改變繪畫(huà)參數(shù)

                 /*CClientDC dc(this);

                 if(m_bDraw==TRUE)

                 {

                     dc.SetROP2(R2_BLACK);

                     dc.MoveTo(m_ptOrigin);

                     dc.LineTo(m_ptOld);

                     dc.MoveTo(m_ptOld);

                     dc.LineTo(point);

                     m_ptOld=point;

                 }*/

            /*MSDNSets the current drawing mode.

            int SetROP2(int nDrawMode );

            */

            posted on 2009-04-30 15:07 Brandon 閱讀(5981) 評(píng)論(0)  編輯 收藏 引用 所屬分類: MFC

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            收藏夾

            IT WEB

            常用鏈接

            牛人BLOG

            學(xué)習(xí)網(wǎng)站

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            色综合久久无码中文字幕| 久久99精品久久久久久齐齐| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久国产视频网| 久久午夜电影网| 久久久久亚洲av毛片大| 久久精品国产免费观看| 国内精品久久久久久久久电影网| 亚洲精品无码久久久久去q| 国内精品久久久久影院免费| 狠狠色丁香婷婷综合久久来来去| 综合久久一区二区三区 | 亚洲国产精品婷婷久久| 久久婷婷五月综合成人D啪| 午夜精品久久久久久99热| AA级片免费看视频久久| 久久久久人妻一区二区三区| 久久精品国产精品青草app| 国产精品久久久久a影院| 久久99国产精品一区二区| 噜噜噜色噜噜噜久久| 日本精品久久久久中文字幕| 香蕉久久av一区二区三区| 久久青青草原亚洲av无码| 狠色狠色狠狠色综合久久| 亚洲午夜久久久久妓女影院| 国产成人精品久久亚洲高清不卡| 亚洲AV无码久久精品成人| 亚洲国产日韩欧美久久| 久久精品国产清自在天天线| 国内精品久久久久| 久久AV高清无码| 亚洲精品tv久久久久久久久久| 精品久久久久久久久中文字幕| 久久婷婷五月综合成人D啪| 欧美一级久久久久久久大| 精品久久人人妻人人做精品| 美女写真久久影院| 久久香蕉一级毛片| 丁香久久婷婷国产午夜视频| 91久久香蕉国产熟女线看|