亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

第四章-簡單繪圖

2019-11-11 03:31:32
字體:
來源:轉載
供稿:網友

1.在單文檔中view擋在MainFrame的前面。此時如果編寫針對MainFrame的mouseClick事件,將不會有反應。

 

2.消息響應會在3處修改代碼,1處是在頭文件中,

//{{AFX_MSG(CDrawView)

afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

afx_msg void OnLButtonUp(UINT nFlags, CPoint point);

afx_msg void OnMouseMove(UINT nFlags, CPoint point);

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

另一處是cpp文件的begin MessageMap和End MessageMap之間,

BEGIN_MESSAGE_MAP(CDrawView, CView)

//{{AFX_MSG_MAP(CDrawView)

ON_WM_LBUTTONDOWN()

ON_WM_LBUTTONUP()

ON_WM_MOUSEMOVE()

//}}AFX_MSG_MAP

// Standard PRinting commands

ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)

END_MESSAGE_MAP()

最后是要有函數實現的代碼。

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

{

// TOD Add your message handler code here and/or call default

m_ptOrigin=m_ptOld=point;

m_bDraw=TRUE;

CView::OnLButtonDown(nFlags, point);

}

 

3.畫線:定義一個成員變量保存mouseDown的點m_Point

 1)API函數方法畫線用HDC

 2)用CDC類成員函數畫線。此時別忘記ReleaseDC

 3)用CClientDC

 4)用CWindowDC,用它甚至可以整個屏幕區域畫線。

下面是上面4種方法的代碼

/*HDC hdc;

hdc=::GetDC(m_hWnd);

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

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

::ReleaseDC(m_hWnd,hdc);必須成對使用。*/

/*CDC *pDC=GetDC();

pDC->MoveTo(m_ptOrigin);

pDC->LineTo(point);

ReleaseDC(pDC);必須成對使用。*/

//CClientDC dc(this);

/*CClientDC dc(GetParent());

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);此處不需要ReleaseDC,因為CClientDC會自動釋放DC*/

//CWindowDC dc(this);

//CWindowDC dc(GetParent());

/*CWindowDC dc(GetDesktopWindow());//此時可以在整個屏幕上畫線。

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);*/

/*CPen pen(PS_DOT,1,RGB(0,255,0));

CClientDC dc(this);

CPen *pOldPen=dc.SelectObject(&pen);

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

dc.SelectObject(pOldPen);*/

 

 5)用Bitmap填充所畫的矩形。

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);

CBrush brush(&bitmap);

CClientDC dc(this);

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

//CBRUSH::FromHandle是靜態成員函數,所以可以用下面的方法調用。

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

CBrush *pOldBrush=dc.SelectObject(pBrush);

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

dc.SelectObject(pOldBrush);

m_bDraw=FALSE;

 

 6)用其它顏色畫線

CClientDC dc(this);

CPen pen(PS_SOLID,1,RGB(255,0,0));

CPen *pOldPen=dc.SelectObject(&pen);//選中紅色畫筆

if(m_bDraw==TRUE)

{

 dc.SetROP2(R2_BLACK);//設置繪畫模式

 dc.MoveTo(m_ptOrigin);

 //dc.LineTo(point);

 dc.LineTo(m_ptOld);

 //dc.MoveTo(m_ptOrigin);

 dc.MoveTo(m_ptOld);

 dc.LineTo(point);

 //m_ptOrigin=point;

 m_ptOld=point;

}

dc.SelectObject(pOldPen);

4.MFC中隱式的包含了windows.h。為什么?

因為在AFXV_W32.h文件中:

// This is a part of the Microsoft Foundation Classes C++ library.

// Copyright (C) 1992-1998 Microsoft Corporation

// All rights reserved.

在AFXWIN.h中

// Note: WINDOWS.H already included from AFXV_W32.H

 

5.如何從句柄獲得對象的指針?

答FromHandle

 

6.類的靜態成員函數可以由類名直接調用,也可以由對象調用??梢哉J為靜態成員函數并不屬于某個對象,它屬于類本身。程序運行伊始,即使沒有實例化類的對象,靜態成員函數和靜態成員變量已然有其內存空間。靜態成員函數不能訪問非靜態成員變量!靜態成員變量必須在類的外部初始化。當然如果并不打算用到靜態成員變量,此時你可以不初始它。

 

7.理解代碼區,數據區,堆,棧!

請見下面的簡介:

對于一個進程的內存空間而言,可以在邏輯上分成3個部份:代碼區,靜態數據區和動態數據區。動態數據區一般就是“堆?!薄!皸?stack)”和“堆(heap)”是兩種不同的動態數據區,棧是一種線性結構,堆是一種鏈式結構。進程的每個線程都有私有的“?!?,所以每個線程雖然代碼一樣,但本地變量的數據都是互不干擾。一個堆棧可以通過“基地址”和“棧頂”地址來描述。全局變量和靜態變量分配在靜態數據區,本地變量分配在動態數據區,即堆棧中。程序通過堆棧的基地址和偏移量來訪問本地變量。

 

 

具體的代碼如下,

其中添加了WM_LBUTTONDOWN,WN_LBUTTONUP,WM_MOUSEMOVE的消息

在CXXView中添加了數據成員CPoint m_orgpt,CPoint m_oldpt,CPoint m_movept

[html] view plain copyCDrawView::CDrawView()  {      // TODO: add construction code here      m_orgpt=0;      m_movept=0;      flag=FALSE;  }  [html] view plain copyvoid CDrawView::OnLButtonDown(UINT nFlags, CPoint point)   {      // TODO: Add your message handler code here and/or call default      m_orgpt=m_oldpt=point;      flag=TRUE;      CView::OnLButtonDown(nFlags, point);  }  [html] view plain copyvoid CDrawView::OnLButtonUp(UINT nFlags, CPoint point)   {      // TODO: Add your message handler code here and/or call default      /*HDC hdc;      hdc=::GetDC(m_hWnd);      ::MoveToEx(hdc,m_orgpt.x,m_orgpt.y,NULL);      ::LineTo(hdc,point.x,point.y);      ::ReleaseDC(m_hWnd,hdc);*/        /*CDC *pcdc=GetDC();      pcdc->MoveTo(m_orgpt);      pcdc->LineTo(point.x,point.y);      ReleaseDC(pcdc);*/        //CClientDC ccdc(this);  /*  CClientDC ccdc(GetParent());      ccdc.MoveTo(m_orgpt);      ccdc.LineTo(point);*/        //CWindowDC cwdc(this);      //CWindowDC cwdc(GetParent());      /*CWindowDC cwdc(GetDesktopWindow());      cwdc.MoveTo(m_orgpt);      cwdc.LineTo(point);*/        /*CPen cp(PS_SOLID,10,RGB(255,0,0));      CDC *pcdc=GetDC();      pcdc->SelectObject(&cp);      pcdc->MoveTo(m_orgpt);      pcdc->LineTo(point);      ReleaseDC(pcdc);*/        /*CPen cp(PS_DOT,1,RGB(0,255,0));      CClientDC ccdc(this);      CPen *pcp=ccdc.SelectObject(&cp);      ccdc.MoveTo(m_orgpt);      ccdc.LineTo(point);      ccdc.SelectObject(pcp);*/        //CBrush cb(RGB(255,0,0));      /*CBrush cb(HS_DIAGCROSS  ,RGB(255,0,0));      CClientDC ccdc(this);      CBrush *pcb=ccdc.SelectObject(&cb);      ccdc.Rectangle(&CRect(m_orgpt,point));      ccdc.SelectObject(pcb);*/        /*CBitmap cbmp;      cbmp.LoadBitmap(MAKEINTRESOURCE(BITMAPID));      CBrush cbh(&cbmp);      CClientDC ccdc(this);      //CBrush *pcbh=ccdc.SelectObject(&cbh);//如果下面用Rectangle的話,這一句還有點作用      ccdc.FillRect(CRect(m_orgpt,point),&cbh);      //ccdc.SelectObject(pcbh);//如果上面使用了Rectangle來填充顏色,則要把原來的畫刷設置回來*/        /*CClientDC ccdc(this);      ccdc.Rectangle(&CRect(m_orgpt,point));//這里使用默認白畫刷*/        /*CClientDC ccdc(this);      CBrush *pcbr;      pcbr=(CBrush *)ccdc.SelectStockObject(NULL_BRUSH);//SelectStockObject(NULL_BRUSH)返回的是一個GDI指針        ccdc.Rectangle(&CRect(m_orgpt,point));        ccdc.SelectObject(pcbr);*/        /*CClientDC ccdc(this);      LOGBRUSH logb;      ::GetObject((HBRUSH)::GetStockObject(NULL_BRUSH),sizeof(LOGBRUSH),&logb);      CBrush cbr;      cbr.CreateBrushIndirect(&logb);      ccdc.Rectangle(&CRect(m_orgpt,point));*/ //這段注釋的代碼不成功,理論上可行        /*CClientDC ccdc(this);      CBrush *oldpcbr;      CBrush *newpcbr;      newpcbr=CBrush::FromHandle((HBRUSH)::GetStockObject(NULL_BRUSH));      oldpcbr=ccdc.SelectObject(newpcbr);      ccdc.Rectangle(&CRect(m_orgpt,point));      ccdc.SelectObject(oldpcbr);*/          flag=FALSE;              CView::OnLButtonUp(nFlags, point);  }  [html] view plain copyvoid CDrawView::OnMouseMove(UINT nFlags, CPoint point)   {      // TODO: Add your message handler code here and/or call default        /*m_movept=point;//畫圖程序      CClientDC ccdc(this);      ccdc.MoveTo(m_orgpt);      if(flag)      {          ccdc.LineTo(m_movept);        }      m_orgpt=m_movept;*/          /*m_movept=point;//畫不帶邊線的扇形      CClientDC ccdc(this);      ccdc.MoveTo(m_orgpt);            if(flag)      {          ccdc.LineTo(m_movept);      }      */              CClientDC ccdc(this);            CPen cpen(PS_SOLID,3,RGB(255,0,0));      CPen *oldpen =ccdc.SelectObject(&cpen);      if(flag)      {          ccdc.SetROP2(R2_NOT);          ccdc.MoveTo(m_orgpt);          ccdc.LineTo(m_oldpt);          ccdc.MoveTo(m_oldpt);          ccdc.LineTo(point);          m_oldpt=point;                }        ccdc.SelectObject(oldpen);      CView::OnMouseMove(nFlags, point);  }  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
福利一区视频在线观看| 中文字幕欧美亚洲| 一本一本久久a久久精品牛牛影视| 日韩av电影在线免费播放| 欧美大片免费看| 国产丝袜精品第一页| 国产欧美精品一区二区三区介绍| 国产精品夫妻激情| 国语自产精品视频在线看一大j8| 国产精品自产拍在线观看| 亚洲第一页中文字幕| 中文字幕欧美日韩| 97在线观看视频国产| 亚洲国产精品va在线看黑人动漫| 欧美性xxxx在线播放| 国产伦精品免费视频| 亚洲天天在线日亚洲洲精| 久久精品国产99国产精品澳门| 久久精品国产亚洲精品| 国产91免费看片| 欧美在线性视频| 91精品综合久久久久久五月天| 国产精品视频区1| 国产精品久久久久aaaa九色| 国产精品香蕉av| 精品小视频在线| 亚洲成人免费网站| 一本久久综合亚洲鲁鲁| 国产精品第1页| 九九热精品视频| 欧美亚洲另类视频| 日韩美女中文字幕| 久久在线精品视频| 欧美精品在线免费播放| 欧美视频在线观看 亚洲欧| 久久久在线视频| 欧美小视频在线| 亚洲国产天堂网精品网站| 国产精品丝袜久久久久久不卡| 日韩欧美国产一区二区| 欧美午夜视频一区二区| 国产精品久久久久久久app| 成人妇女免费播放久久久| 欧美国产激情18| 国产日韩精品入口| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲国产精品中文| 欧美性猛交xxxx免费看漫画| 久久久久99精品久久久久| 岛国av一区二区三区| 欧美中文字幕在线观看| 国产精品久久久久久久久久三级| 久久精品影视伊人网| 日韩美女主播视频| 国产精品三级在线| 国产亚洲精品va在线观看| 国产精品久久久久久亚洲调教| 欧美性猛交xxxx免费看久久久| www.亚洲人.com| 国产精品久久久久久五月尺| 日韩av片免费在线观看| 欧美国产日韩免费| 亚洲国产一区自拍| 欧美电影免费观看高清| 成人做爽爽免费视频| 日韩高清不卡av| 一区二区三区美女xx视频| 精品欧美激情精品一区| 精品久久久久久电影| 91免费国产网站| 久久久亚洲精选| 国产91精品最新在线播放| 性欧美视频videos6一9| 国内精品在线一区| 午夜精品久久久久久久男人的天堂| 97av在线视频免费播放| 亚洲成人av片在线观看| 国产一区二区精品丝袜| 国产精品久久久久久久美男| 欧美日韩精品中文字幕| 色妞色视频一区二区三区四区| 欧美午夜丰满在线18影院| 黑人狂躁日本妞一区二区三区| 国产99久久精品一区二区永久免费| 美女啪啪无遮挡免费久久网站| 欧美视频国产精品| 国产精品日日摸夜夜添夜夜av| 欧美精品videossex88| 一区二区三区亚洲| 亚洲高清福利视频| 国产精品一区二区三区毛片淫片| 国产精品视频免费观看www| 成人a级免费视频| 亚洲精品一区在线观看香蕉| 92看片淫黄大片看国产片| 日韩美女写真福利在线观看| 日本欧美爱爱爱| 精品中文字幕在线| 中文字幕日韩av电影| 日韩中文视频免费在线观看| 色偷偷av亚洲男人的天堂| 久久777国产线看观看精品| 精品一区精品二区| 亚洲最大在线视频| 97国产精品人人爽人人做| 欧美午夜片欧美片在线观看| 亚洲精品国产电影| 热门国产精品亚洲第一区在线| 一二美女精品欧洲| 久久久久久91香蕉国产| 日韩hd视频在线观看| 欧美日韩国产中文精品字幕自在自线| 亚洲精品色婷婷福利天堂| 久久久久久久久久久国产| 国产91精品久久久久| 2019国产精品自在线拍国产不卡| 青青青国产精品一区二区| 国产精品xxx视频| 日韩精品免费在线播放| 日本人成精品视频在线| 成人黄色短视频在线观看| 97成人在线视频| 欧美大学生性色视频| 亚洲一区二区三区视频播放| 欧美电影在线观看完整版| 日韩精品小视频| 亚洲老头同性xxxxx| 久久99久久久久久久噜噜| 亚洲欧美激情在线视频| 成人久久18免费网站图片| 97精品伊人久久久大香线蕉| 亚洲第一在线视频| 国产91精品网站| 欧美多人爱爱视频网站| 精品偷拍各种wc美女嘘嘘| 国内精品久久影院| 亚州精品天堂中文字幕| 久久影院在线观看| 亚洲精品999| 韩剧1988免费观看全集| 亚洲性日韩精品一区二区| 97国产在线观看| 欧美日韩成人在线播放| 乱亲女秽乱长久久久| 亚洲欧洲一区二区三区在线观看| 欧美国产日韩免费| 97超视频免费观看| 国产精品专区一| 国产日韩欧美中文在线播放| 91久久久国产精品| 成人欧美一区二区三区黑人| 国产成人精品在线观看| 欧美日韩裸体免费视频| 亚洲精品国产精品自产a区红杏吧| 亚洲自拍中文字幕| 国产精品久久久久免费a∨大胸| 57pao国产成人免费| 久久综合伊人77777蜜臀| 日本高清视频精品| 91精品综合久久久久久五月天| 日韩免费观看在线观看| 91高清免费视频| 成人久久久久久久| 国产一区二区三区在线观看网站|