MFC中繪制動態曲線

參考:

http://blog.csdn.net/zang141588761/article/details/50536788


[轉載]MFC中畫直線和曲線

一、畫直線
要想在MFC中畫出有顏色的線條,首先就要設置DC的畫筆,我們可以按如下方法來設置畫筆:
  第一步:在View類中添加一個COLORREF類型的數據成員m_Color(用來保存畫筆顏色值),在構造函數中對其初始化,
  m_Color(RGB(255,0,0))
  第二步:在WM_LBUTTONDOWN和WM_LBUTTONUP消息的處理函數OnLButtonDown和OnLButtonUp中添加如下代碼:
  void CdrView::OnLButtonDown(UINT nFlags, CPoint point)
  {
  // TODO: Add your message handler code here and/or call default
  m_StartPoint=point; //用來保存畫線起始點的位置,即鼠標左鍵第一次按下時的位置,類型為CPoint
  CView::OnLButtonDown(nFlags, point);
  }
  void CdrView::OnLButtonUp(UINT nFlags, CPoint point)
  {
  // TODO: Add your message handler code here and/or call default
  //第一種方法,用HDC繪圖,使用API函數設置畫筆顏色
  
  //第二種,用CDC類繪圖,使用CPen類構造畫筆
  
  //第三種,用CClient類繪圖,使用CPen類構造畫筆,跟第二種方法不同的是用CClientDC時不用手動去獲取DC,和釋放DC
  CClientDC aDC(this); //CClientDC的構造函數需要一個參數,這個參數是指向繪圖窗口的指針,我們用this指針就可以了
  CPen pen(PS_SOLID,1,m_Color); 建立一個畫筆類對象,構造時設置畫筆屬性
  aDC.SelectObject(&pen);
  aDC.MoveTo(m_StartPoint);
  aDC.LineTo(point);
  CView::OnLButtonUp(nFlags, point);
  }
  void CdrView::OnMouseMove(UINT nFlags, CPoint point)
  {
  // TODO: Add your message handler code here and/or call default
  CView::OnMouseMove(nFlags, point);
  }
   運行程序,就可以畫出紅色的線條來,如果想畫其它顏色,只需要設置m_Color的值即可,例如,要設置成綠色,可以在View類的構造函數處把 m_Color(RGB(255,0,0))改寫成m_Color(RGB(0,255,0))。顏色的改變是通過設置RGB(0,255,0)中的三個 參數來實現的。RGB中的三個參數分別對應三原色的紅、綠、藍,每一個參數的取值范圍都是0~255,通過不同數值的組合,就可以畫出各種各樣的顏色來 了。

二、畫曲線

????步驟一:按照畫直線中介紹的方法在視圖類中添加對WM_MOUSEMOVE消息的響應函數OnMouseMove

????步驟二:在OnMouseMove中寫如下代碼:

?void CswdfView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(nFlags==MK_LBUTTON) //判斷鼠標左鍵是否按下,如果按下,則移動時畫線
{
CClientDC aDC(this);
aDC.MoveTo(m_StartPoint);
aDC.LineTo(point);
m_StartPoint=point; //將畫線的起點移動到鼠標移動后的點
}
CView::OnMouseMove(nFlags, point);
}
????OK,運行程序,曲線也可以畫了。

參考:http://www.qnr.cn/pc/erji/cpp/ziliao/200812/103981.html
http://school.cfan.com.cn/pro/c/2008-12-08/1228727410d202128.shtml

要想在MFC中畫出有顏色的線條,首先就要設置DC的畫筆,我們可以按如下方法來設置畫筆:
  第一步:在View類中添加一個COLORREF類型的數據成員m_Color(用來保存畫筆顏色值),在構造函數中對其初始化,
  m_Color(RGB(255,0,0))
  第二步:在WM_LBUTTONDOWN和WM_LBUTTONUP消息的處理函數OnLButtonDown和OnLButtonUp中添加如下代碼:
  void CdrView::OnLButtonDown(UINT nFlags, CPoint point)
  {
  // TODO: Add your message handler code here and/or call default
  m_StartPoint=point; //用來保存畫線起始點的位置,即鼠標左鍵第一次按下時的位置,類型為CPoint
  CView::OnLButtonDown(nFlags, point);
  }
  void CdrView::OnLButtonUp(UINT nFlags, CPoint point)
  {
  // TODO: Add your message handler code here and/or call default
  //第一種方法,用HDC繪圖,使用API函數設置畫筆顏色
  /*HDC hdc;
  hdc=::GetDC(m_hWnd);
  ::SelectObject(hdc,CreatePen(PS_SOLID,1,m_Color)); //向設備上下文(設備描述表)中插入由CreatePen函數創建的畫筆
  ::MoveToEx(hdc,m_StartPoint.x,m_StartPoint.y,NULL);
  ::LineTo(hdc,point.x,point.y);
  ::ReleaseDC(m_hWnd,hdc);*/
  //第二種,用CDC類繪圖,使用CPen類構造畫筆
  /*CDC aDC;
  CPen pen(PS_SOLID,1,m_Color); //建立一個畫筆類對象,構造時設置畫筆屬性
  aDC.m_hDC=::GetDC(m_hWnd);
  aDC.SelectObject(&pen);
  aDC.MoveTo(m_StartPoint);
  aDC.LineTo(point);
  ::ReleaseDC(m_hWnd,aDC.m_hDC);*/
  //第三種,用CClient類繪圖,使用CPen類構造畫筆,跟第二種方法不同的是用CClientDC時不用手動去獲取DC,和釋放DC
  CClientDC aDC(this); //CClientDC的構造函數需要一個參數,這個參數是指向繪圖窗口的指針,我們用this指針就可以了
  CPen pen(PS_SOLID,1,m_Color); 建立一個畫筆類對象,構造時設置畫筆屬性
  aDC.SelectObject(&pen);
  aDC.MoveTo(m_StartPoint);
  aDC.LineTo(point);
  CView::OnLButtonUp(nFlags, point);
  }
  void CdrView::OnMouseMove(UINT nFlags, CPoint point)
  {
  // TODO: Add your message handler code here and/or call default
  CView::OnMouseMove(nFlags, point);
  }
  運行程序,就可以畫出紅色的線條來,如果想畫其它顏色,只需要設置m_Color的值即可,例如,要設置成綠色,可以在View類的構造函數處把m_Color(RGB(255,0,0))改寫成m_Color(RGB(0,255,0))。顏色的改變是通過設置RGB(0,255,0)中的三個參數來實現的。RGB中的三個參數分別對應三原色的紅、綠、藍,每一個參數的取值范圍都是0~255,通過不同數值的組合,就可以畫出各種各樣的顏色來了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458618.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458618.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458618.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

博客地址 RSS地址

博客地址 RSS地址 OneVs Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xml NSHipster http://nshipster.cn/feed.xml Limboy 無網不剩 http://feeds.feedburner.com/lzyy 唐巧的技術博客 http://blog.devtang.com/atom.xml Lex iOS notes http://i…

2015.11.27---Java

public class star{public static void main(String[] args) {System.out.print("ha");}}轉載于:https://www.cnblogs.com/supermeimei/p/5001922.html

QT之深入理解QThread

QT之深入理解QThread 理解QThread之前需要了解下QThread類,QThread擁有的資源如下(摘錄于QT 5.1 幫助文檔):在以上資源中,本文重點關注槽:start();信號:started()、finished()&#…

常見人事問題

整體素養的常見問題 一、請你自我介紹一下你自己? (面試官目的:深度了解求職者,看求職者基本的溝通和自我認知能力) NO: 只說姓名、年齡、愛好等基本的信息后就沒了。只重復簡歷里的內容,如工作經驗就…

springMVC數據封裝成POJO

springMVC把前臺的數據封裝為POJO與struts2的封裝形式不同。struts2需要在控制器聲明需封裝的POJO,而springMVC不需要任何準備工作,只需在相應的方法的參數中加上需封裝的POJO,當用戶提交表單時,springMVC會根據表單中dom元素的na…

QT輸入輸出(四)之 QProcess

QProcess Qt提供了一個QProcess類用于啟動外部程序并與之通信.這個類是異步工作的,而且在后臺執行,這樣用戶界面就可以始終保持響應。 啟動一個新的進程的操作非常簡單,只需要將待啟動的程序名稱和啟動參數傳遞給start()函數即可. 例如: QObj…

iOS 推送 邏輯

推送 階段一:Provider[服務端]把要發送的消息,目的IOS設備標識打包,發送給APNS; 階段二:APNS在自身的已注冊Push服務的IOS設備列表中,查找有相應標識的IOS設備,并將消息發送到IOS設備&#xff1…

正則提取的url中的域名以及替換域名的方法 preg_match()和preg_replace()

<?php //網站的url$url http://www.baidu.com/index.php;//正則表達式$reg /(http):\/\/([^\/])/i;preg_match($reg, $url,$res);/** $res的結果array (size3)0 > string http://www.baidu.com (length20)1 > string http (length4)2 > string www.baidu.com (…

音視頻開發

command s 截模擬器的屏幕 MP.4只是一個容器 H.264 H.263是真正的格式 H.265正在測試中 avi H.264 H.263 視頻解碼&#xff1a;將H.263 H.264轉換為視頻和音頻的格式 視頻編碼&#xff1a; 解碼&#xff1a;硬解碼&#xff1a;GPU做的解碼 CPU做除了圖片以外的&#…

10.11 安裝pod

原文地址&#xff1a;http://www.jianshu.com/p/5fc15906c53a 感謝。 更新升級10.11 cocoapods安裝出問題最簡單的解決方法 這是因為10.11把cocoapods直接干掉了 sudo gem install -n /usr/local/bin cocoapods 再加一句&#xff0c;完美解決 sudo xcode-select --switch /App…

windows任務管理器中的工作設置內存,內存專用工作集,提交大小詳解

通俗的講工作設置內存是程序占用的物理內存(包含與其他程序共享的一部分), 內存專用工作集是程序獨占的物理內存, 提交大小是程序獨占的內存(包含物理內存和在頁面文件中的內存). 注:頁面文件就是存放不在物理內存中的內存,文件路徑一般在C:\pagefile.sys,目的是為了能夠讓更…

coreData mapView #include

一、coreData 需要導入系統庫CoreData 新建文件的時候選core data 中的Data Model 然后加相應的表 加完表后 在Model.xcdatamodeld中新建文件 選coredata中的第三個 即可 如果兩個表有聯系 就將附表放到主表中 在build Setting中&#xff0c;輸入search 在Framework Searc…

淺談 C++ 中的 new/delete 和 new[]/delete[]

來自&#xff1a;http://www.cnblogs.com/hazir/p/new_and_delete.html 在 C 中&#xff0c;你也許經常使用 new 和 delete 來動態申請和釋放內存&#xff0c;但你可曾想過以下問題呢&#xff1f; new 和 delete 是函數嗎&#xff1f;new [] 和 delete [] 又是什么&#xff1f…

JavaScript中的原型繼承原理

在JavaScript當中&#xff0c;對象A如果要繼承對象B的屬性和方法&#xff0c;那么只要將對象B放到對象A的原型鏈上即可。而某個對象的原型鏈&#xff0c;就是由該對象開始&#xff0c;通過__proto__屬性連接起來的一串對象。__proto__屬性是JavaScript對象中的內部屬性&#xf…

XMPP

XMPP不支持視頻聊天 支持文字聊天 但對于圖片和語音聊天支持的不好 那么就將他們轉成NSData的形式 IM Instance Message 即時聊天 聊天系統中 XMPP主要做兩個人的聊天和群聊&#xff0c;只用了這兩個功能 還有一個HTTP的服務器 &#xff0c;他是一個旁路服務器 XMPP底層…

QT 調試

QT調試&#xff08;參考下面的說明就可以正常調試&#xff09;&#xff1a;http://blog.csdn.net/wchengshen/article/details/50254731http://blog.csdn.net/sx341125/article/details/53606534 QT調用DLL&#xff1a; Qt中調用VS編譯dll的方法(一)----顯式調用 qt使用動態庫(…

建模元件有哪些在MapleSim中

信號庫&#xff1a;包含通用信號模塊、布爾、控制器、離散信號模塊、信號源、線性信號模塊、非線性信號模塊、時間離散信號模塊、查詢表、信號轉換器、數學運算、關系元件、特殊信號模塊&#xff0c;應用案例。 電子庫&#xff1a;包含電阻、運算放大器、二極管、步進電機、模擬…

iOS小筆記

controller&#xff1a;連接二者的橋梁&#xff1b;cocoa frameworks 有兩個框架&#xff1a;foundationfoundation 是cocoa中最基本的一些類&#xff1b;再mac應用程序中負責對象管理&#xff0c;內存管理&#xff0c;容器等相關數據&#xff1b;uikit&#xff1a;uikit&…

【C++】VS2010將寫好的程序打包成安裝文件發布

參考鏈接&#xff1a;http://blog.csdn.net/yongh701/article/details/51326142 我們可以將自己寫好的VS2010程序打包成安裝文件&#xff0c;給用戶安裝&#xff0c;具體步驟如下&#xff1a; 1、如下圖&#xff0c;同樣是新建一個項目&#xff0c;但是這次是新建一個其它項目…

01_jeecms建站

一、環境安裝 JDK5TOMCAT5.5MYSQL5及以上http://www.jeecms.com/tutorial/index.jhtml參考環境安裝篇二、解壓文件安裝包jeecms-v5zip,如圖圖1ROOT文件夾復制放到tomcat下的webapps文件夾&#xff08;注&#xff1a;請先刪除webapps下原有的默認ROOT文件夾&#xff09;如不想部…