日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC++之绘制线条

發布時間:2024/9/21 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC++之绘制线条 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們可以在類向導那里添加OnLButtonDown消息響應函數,它有兩個參數,其中第二個參數是CPoint類型,CPoint類表示一個點,也就是說,當鼠標左鍵按下時,鼠標單擊處的坐標點已由此參數傳遞給OnLButtonDown這一消息響應函數。這樣,我們所需的工作就是在此消息響應函數中保存該點的信息。為此,需要在視類中增加一個成員變量。在本例我創建的工程名為Draw,為單文檔程序,在CDrawView類添加一個新的成員變量,

CPoint m_ptOrigin;
  • 1
  • 1

接下來在CDrawView構造函數中初始化這個變量,將其值初始化為0,。?
然后在消息響應函數OnLButtonDown中保存鼠標按下點的信息

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultm_ptOrigin=point;CView::OnLButtonDown(nFlags, point); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

這樣就得到了要繪制線條的起點,兩點成線,所以接下來要獲得線條終點。終點是在鼠標左鍵彈起來時獲得的。在CDrawView類中對WM_LBUTTONUP進行響應,初始代碼如下:

void CDraw11View::OnLButtonUp(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultCView::OnLButtonUp(nFlags, point); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

方法1:利用MFC的CDC類實現畫線功能

void CDraw11View::OnLButtonUp(UINT nFlags, CPoint point) {CDC* pDC=GetDC();pDC->MoveTo(m_ptOrigin);pDC->LineTo(point);ReleaseDC(pDC);CView::OnLButtonUp(nFlags, point); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

方法2:利用MFC的CClientDC類的實現畫線功能,MFC提供的CClientDC類派生于CDC類,用來在窗口的客戶區繪圖,并且在構造時調用GetDC()獲得與指定窗口相關聯的設備描述表,在析構時調用Release()釋放DC資源,使用方便。

void CDraw11View::OnLButtonUp(UINT nFlags, CPoint point) {CClientDC dc(this);//獲得與視類窗口相關聯的CClientDC對象dc.MoveTo(m_ptOrigin);dc.LineTo(point);CView::OnLButtonUp(nFlags, point); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7


方法3:利用MFC的CWindowDC類實現畫線功能,CClientDC類對象只能在框架類窗口的客戶區(視類區域+工具欄區域)畫圖,CWindowDC可以實現在窗口的整個區域畫圖

void CDraw11View::OnLButtonUp(UINT nFlags, CPoint point) {CWindowDC dc(GetParent());dc.MoveTo(m_ptOrigin);dc.LineTo(point);CView::OnLButtonUp(nFlags, point); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

本篇是在上一篇博客的基礎上繼續學習繪圖的。?
為了繪制連續的線條,首先需要得到線條的起點,這在前篇博客已經實現了,然后需要捕獲鼠標移動過程中的每一個點,這可以通過捕獲鼠標移動消息(WM_MOUSEMOVE)來實現。?
然后我們開始增加Draw程序的功能。首先為視類增加鼠標移動消息(WM_MOUSEMOVE)的響應函數(默認名稱為OnMouseMove)。這樣,只要鼠標在應用程序窗口中移動時,都會進入到這個消息響應函數中。但這并不是我們所期望的,我們希望在鼠標左鍵按下去之后才開始繪圖。因此,我們需要有一個變量來表示鼠標左鍵是否按下去這一狀態。在視類頭文件定義該變量

BOOL m_bDraw;
  • 1
  • 1

接下來在視類的構造函數中,將此變量初始化為FALSE。

m_bDraw = FALSE;
  • 1
  • 1

當鼠標左鍵按下去時,即在視類的OnLButtonDown函數中將此變量設置為真

m_bDraw = TRUE;
  • 1
  • 1

當鼠標左鍵彈起來時,即在視類的OnLButtonUp函數中將此變量設置為假(把之前編寫的代碼注釋起來)

m_bDraw = FALSE;
  • 1
  • 1

!!!繪制完應修改線段的起點,將當前線段的終點作為下一條線段的起點。

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) {CClientDC dc(this);if(m_bDraw==TRUE){dc.MoveTo(m_ptPointOrigin);dc.LineTo(point);//修改線段的起點m_ptPointOrigin=point;}CView::OnMouseMove(nFlags, point); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

效果如圖,這樣就可以繪制連續線條了:?

在繪制連續線條的程序中,保持每段小直線的起點不變,即以鼠標左鍵按下時的點為起點不變,分別繪制到鼠標移動點的直線,這時就會出現扇形的效果。我們要繪制一個帶邊線的扇形,還需要為視類再增加一個成員變量,用來保存鼠標的上一個移動點,并在OnMouseMove函數中添加代碼,以實現從鼠標當前點到鼠標上個移動點的連線,也就是繪制一條邊線,同時還要保存當前鼠標點,為下一條邊線做準備。首先先給CDrawView類增加一個CPoint類型的私有變量m_ptOld.

CPoint m_ptOld;
  • 1
  • 1

接著在OnLButtonDown消息響應函數中初始化這個變量。

m_ptOld=point;
  • 1
  • 1

然后在OnMouseMove中添加實現代碼(這里我們設置線條顏色為紅色):

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) {CClientDC dc(this);//創建一個紅色的,寬度為1的實現畫筆CPen pen(PS_SOLID,1,RGB(255,0,0));//把創建的畫筆選入設備描述表CPen *pOldPen=dc.SelectObject(&pen);if(m_bDraw==TRUE){dc.MoveTo(m_ptPointOrigin);dc.LineTo(point);dc.LineTo(m_ptOld);//修改線段的起點//m_ptPointOrigin=point;m_ptOld=point;}dc.SelectObject(pOldPen);//恢復設備描述表CView::OnMouseMove(nFlags, point); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

【MoveTo()函數是將當前位置移動到需繪制的線條起點處。LineTo()函數繪制一條到指定點的線。】?
效果如圖:?

0

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的VC++之绘制线条的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本精品一二三 | brazzers欧美极品少妇 | 夜夜操夜夜 | 亚欧毛片 | 黄色a免费 | 亚欧洲精品在线视频 | 都市激情中文字幕 | 成人一级毛片 | 999午夜 | 国产老女人精品毛片久久 | 九九热视频在线播放 | 国产成人精品无码免费看夜聊软件 | 中文字幕在线播放一区二区 | 日日骚影院 | 偷拍亚洲色图 | 上原亚衣在线 | 日韩另类在线 | 开心综合网 | 日韩精品片| 欧美tv| 日韩欧美一级视频 | 伊人一二三 | 天天摸天天舔 | 亚洲国产高清国产精品 | 精产国品一区二区 | 精品女同一区 | 欧美jizzhd精品欧美18 | 国产精久久一区二区三区 | 天天碰天天干 | 午夜一区二区三区免费观看 | 白洁av | 成人免费看片' | 成人福利一区二区 | 九色视频91 | 久久久久久久av | 一区二区精品视频 | www夜插内射视频网站 | 国产午夜精品视频 | 啪视频网站 | 亚洲AV无码乱码国产精品色欲 | www.四虎影视 | 色狠狠一区二区 | 天天插天天操 | 波多野结衣一区二区三区高清av | 国产96在线 | v在线 | 献给魔王伊伏洛基亚吧动漫在线观看 | 久久久久在线 | 17c在线视频| 黄色精品视频 | 青青草免费看 | 中文字幕乱码人妻一区二区三区 | www.自拍 | 成年人免费看毛片 | 亚洲五月婷 | 亚洲视频欧洲视频 | 在线色导航 | japanese在线观看 | 日韩r级电影在线观看 | 天堂а√在线中文在线新版 | 337p粉嫩日本欧洲亚洲大胆 | 手机看片福利久久 | 女人一区二区 | 大色网小色网 | 毛片视频免费播放 | 视频国产在线 | 777片理伦片在线观看 | 日韩亚洲欧美一区二区三区 | 国产欧美日韩高清 | 久久亚洲AV无码专区成人国产 | 亚洲精品视频免费 | 女人扒开腿让男人捅爽 | 欧美三区| 一区国产在线 | 亚洲最大成人网站 | 欧美69视频 | 1024av在线 | 不许穿内裤随时挨c调教h苏绵 | www.youjizz.com国产| 精品久久国产 | 国产日韩欧美精品一区二区 | 阿v天堂在线 | 国产日韩欧美日韩大片 | 日韩欧av| 精品人妻一区二区三区视频 | 欧美日韩中文字幕一区二区三区 | 香蕉视频亚洲 | 少妇大叫太粗太大爽一区二区 | 日本午夜电影网站 | 亚洲 欧美 日韩在线 | 亚洲人成色777777精品音频 | 国产精品第八页 | 一本色道久久综合精品婷婷 | 日韩在线一区二区三区四区 | 成人在线观看国产 | 亚洲激情一区二区 | 日韩啊啊啊 | 日韩免费黄色 | 久久国产片|