MFC 直線 虛線 折線 圓 橢圓 矩形 弧形

****Dlg.h頭文件加入:

//為project加入畫筆、點變量數組
public:CPen m_pen[5];CPoint m_point[5];
public:void DrawLine(CDC *pDC);void DrawPolyline(CDC *pDC);void DrawPolygon(CDC *pDC);void DrawRect(CDC *pDC);void DrawRoundRect(CDC *pDC);void DrawEllipse(CDC *pDC);void DrawArc(CDC *pDC);void DrawAngleArc(CDC *pDC);

****Dlg.cpp構造函數改動:

CLineTestDlg::CLineTestDlg(CWnd* pParent /*=NULL*/): CDialogEx(CLineTestDlg::IDD, pParent)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//初始化畫筆、點變量數組m_pen[0].CreatePen(PS_SOLID,1,RGB(255,0,0));	 //紅色實線。1像素寬---參數:樣式、寬度、顏色m_pen[1].CreatePen(PS_SOLID,6,RGB(0,255,0));	 //綠色實線,6像素寬m_pen[2].CreatePen(PS_DASH,1,RGB(255,0,0));		 //紅色虛線,必須為一個像素寬m_pen[3].CreatePen(PS_DOT,1,RGB(0,0,255));		 //藍色點線。必須為一個像素寬m_pen[4].CreatePen(PS_DASHDOTDOT,1,RGB(255,0,0));//紅色雙點虛線,必須為一個像素寬//繪制多邊形的點數組m_point[0].x=10;m_point[0].y=100;m_point[1].x=10;m_point[1].y=120;m_point[2].x=100;m_point[2].y=105;m_point[3].x=170;m_point[3].y=120;m_point[4].x=170;m_point[4].y=100;
}
***Dlg.cpp ? ? ? onpaint函數

void CLineTestDlg::OnPaint()
{CPaintDC dc(this); // 用于繪制的設備上下文CBrush brush(RGB(190,190,190));//畫刷dc.SelectObject(&brush);//將畫刷選入DCDrawLine(&dc);DrawPolyline(&dc);DrawPolygon(&dc);DrawRect(&dc);DrawRoundRect(&dc);DrawEllipse(&dc);DrawArc(&dc);DrawAngleArc(&dc);if (IsIconic()){CPaintDC dc(this); // 用于繪制的設備上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使圖標在工作區矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 繪制圖標dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}
}
定義畫圖函數:

//繪制直線函數
void CLineTestDlg::DrawLine(CDC *pDC)
{CPen *oldPen=pDC->SelectObject(&m_pen[0]);//保存DC原始畫筆for(int i=0;i<5;i++)	{pDC->SelectObject(&m_pen[i]);		//將畫筆選入DCpDC->MoveTo(20,20+i*15);			//設置DC當前點pDC->LineTo(170,20+i*15);			//繪制直線}pDC->SelectObject(oldPen);		//回復DC原畫筆
}//繪制折線
void CLineTestDlg::DrawPolyline(CDC *pDC)
{CPen *oldPen=pDC->SelectObject(&m_pen[0]);//保存DC原始畫筆for(int i=0;i<5;i++){for(int j=0;j<5;j++){m_point[j].y+=35;		//每次下移35個像素}pDC->SelectObject(&m_pen[i]);pDC->Polyline(m_point,5);}pDC->SelectObject(oldPen);
}//繪制多邊形
void CLineTestDlg::DrawPolygon(CDC *pDC)
{for(int j=0;j<5;j++)m_point[j].y+=75;	//數組中的點下移75個像素CPen *oldPen=pDC->SelectObject(&m_pen[0]);//保存DC原始畫筆for(int i=0;i<5;i++){for(int j=0;j<5;j++){m_point[j].y+=35;	//每次繪制圖形下移35個像素}pDC->SelectObject(&m_pen[i]);pDC->Polygon(m_point,5); //繪制多邊形}pDC->SelectObject(oldPen);
}//繪制矩形
void CLineTestDlg::DrawRect(CDC *pDC)
{CRect rect(150,20,220,80);CPen *oldPen=pDC->SelectObject(&m_pen[0]);for(int i=0;i<5;i++){rect.OffsetRect(80,0);//每次畫圖右移80個像素pDC->SelectObject(&m_pen[i]);pDC->Rectangle(&rect);//繪制矩形}pDC->SelectObject(oldPen);
}//繪制圓角矩形
void CLineTestDlg::DrawRoundRect(CDC *pDC)
{CRect rect(150,150,220,230);CPen *oldPen=pDC->SelectObject(&m_pen[0]);for(int i=0;i<5;i++){rect.OffsetRect(80,0);//每次畫圖右移80個像素pDC->SelectObject(&m_pen[i]);pDC->RoundRect(&rect,CPoint(15,15));}pDC->SelectObject(oldPen);
}//繪制橢圓
void CLineTestDlg::DrawEllipse(CDC *pDC)
{CRect rect(150,260,220,310);CPen *oldPen=pDC->SelectObject(&m_pen[0]);for(int i=0;i<5;i++){rect.OffsetRect(80,0);pDC->SelectObject(&m_pen[i]);pDC->Ellipse(&rect);}pDC->SelectObject(oldPen);
}//繪制弧線
void CLineTestDlg::DrawArc(CDC *pDC)
{CRect rect(150,400,220,460);CPoint ptStart(170,440);CPoint ptEnd(210,400);CPen *oldPen=pDC->SelectObject(&m_pen[0]);for(int i=0;i<5;i++){rect.OffsetRect(80,0);ptStart+=CPoint(80,0);ptEnd+=CPoint(80,0);pDC->SelectObject(&m_pen[i]);pDC->Arc(&rect,ptStart,ptEnd);}pDC->SelectObject(oldPen);
}//繪制直線與弧線
void CLineTestDlg::DrawAngleArc(CDC *pDC)
{CRect rect(150,500,220,560);CPoint ptCenter(185,600);CPoint ptStart(150,630);int r=30;float angleStart=0;float angleEnd=180;CPen *oldPen=pDC->SelectObject(&m_pen[0]);for(int i=0;i<5;i++){rect.OffsetRect(80,0);ptStart+=CPoint(80,0);pDC->MoveTo(ptStart);pDC->SelectObject(&m_pen[i]);pDC->AngleArc(ptCenter.x,ptCenter.y,r,angleStart,angleEnd);}pDC->SelectObject(oldPen);
}


執行效果:



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

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

相關文章

最近無埋點技術很是流行,抽空研究了下諸葛IO,talkingData以及百分點這些業內知名公司的無埋點SDK,抽取其中重要的信息供大家參考:

1、首先什么是無埋點呢&#xff0c;其實所謂無埋點就是開發者無需再對追蹤點進行埋碼&#xff0c;而是脫離代碼&#xff0c;只需面對應用界面圈圈點點即可追加隨時生效的事件數據點。 無埋點的好處 其實無埋點并不是完全不用寫代碼&#xff0c;而是盡可能的少寫代碼。開發者將S…

【Pix4d精品教程】pix4d mapper相機未校準后手動添加連接點完美案例圖文教程

pix4d mapper相機未校準后手動添加連接點完美案例圖文教程 整體預覽 局部放大 如圖所示,紅色的照片為未校準的圖片,軟件無法自動獲取連接點,有關相機未校準的原因及解決辦法,可以參考《pix4d未校準相機:287 out of 402 images calibrated (71%), all images enabled, 6 bl…

五、構造函數《2022 solidity8.+ 版本教程到實戰》

一、構造函數 構造函數存在于很多語言中&#xff0c;可用于對當前對象在第一次創建時的初始化設置。在 solidity 合約中&#xff0c;也存在對應的構造函數&#xff0c;使用 constructor(){} 對其進行定義。 以下在合約中創建一個最簡單的構造函數代碼&#xff1a; // SPDX-L…

Blazor University (30)表單 —— 從 InputBase 派生

原文鏈接&#xff1a;https://blazor-university.com/forms/descending-from-inputbase/從 InputBase 派生源代碼[1]InputBase<T> 組件是各種 Blazor 輸入控件所繼承的抽象類。這個類在標準 HTML <input> 元素的基礎上增加了額外的功能&#xff0c;比如驗證——我們…

3.菜鳥教你一步一步開發 web service 之 axis 服務端創建

轉自&#xff1a;https://blog.csdn.net/shfqbluestone/article/details/37610601 第一步&#xff0c;新建一個工程&#xff0c;如圖&#xff1a; 選 Java 寫一個工程名&#xff0c;選擇好工程路徑&#xff0c;點下一步 選擇 webServices &#xff0c;在右邊的 version 中選擇 …

C語言試題七十二之請編寫函數判斷三角形的類型,并輸出其面積和類型。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 編寫函數:…

ArcGIS實驗教程——實驗三十四:ArcGIS地統計分析全解(直方圖、正態QQ圖、趨勢分析、voronoi圖、半變異函數、協方差云)

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據)》 文章目錄 一、地統計分析的基本原理二、地統計分析的工作流程三、探索性空間數據分析工具1. 直方圖2. QQ分布圖3. 趨勢分析4. Voronoi圖5. 半變異函數與協方差云6. 交叉協方差云四、空間插值一、地…

四則運算

四則運算的生成代碼&#xff08;C語言&#xff09; 學生&#xff1a;徐克 夏嘉暉 1 #include<stdio.h> 2 #include<stdlib.h> 3 main() 4 { 5 int a[50]; 6 int b[50]; 7 int num,count,i; 8 printf("1.加法\n"); 9 printf("2.減法…

用python計算圓周率

一、算法 馬青公式&#xff1a;馬青公式由英國天文學教授約翰馬青(John Machin &#xff0c;1686 –1751)于1706年發現。馬青公式每計算一項可以得到1.4位的十進制精度。因為它的計算過程中被乘數和被除數都不大于長整數&#xff0c;所以可以很容易地在計算機上編程實現。 二、…

六、數組及其操作《2022 solidity8.+ 版本教程到實戰》

一、數組 在 solidity 中&#xff0c;數組分為定長數組和動態數據&#xff0c;這兩者的定義上跟 golang 很相似&#xff1b;其定長數組在創建好后不能設置超過數組長度的值&#xff0c;也就是不能push&#xff1b;而動態數組允許 push&#xff0c;還有一點很有意思的是&#x…

【Pix4d精品教程】垂直攝影空三加密生成DOM和DSM,并按10m間距提取高程點,生成等高線

在航測項目中,通常使用pix4d軟件跑空三,生成數字正射影像DOM和數字表面模型DSM,當然還有點云數據。那么,在此基礎之上,怎樣根據航測要求,生成等間距5m或者10m的高程點和等高線呢,如上圖所示?本文就來借助ArcGIS軟件完成此波操作。 文章目錄 一、Pix4d生成DOM和DSM二、A…

C語言試題七十三之請編寫函數求兩個數的最大公約數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 編寫函數:…

介紹一款python類型檢查工具pyright

介紹 近日&#xff0c;微軟在 Github 上開源了一個 Python 靜態類型檢查工具&#xff1a;pyright &#xff0c;引起了社區內的多方關注。 微軟在開源項目上的參與力度是越來越大了&#xff0c;不說收購 Github 這種大的戰略野心&#xff0c;只說它家開源的 VS Code 編輯器&am…

python使用localhost鏈接mysql出錯及解決辦法

在命令行下運行如下&#xff1a; import MySQLdb connMySQLdb.connect(hostlocalhost,userroot,passwdxxxx,dbtest1) xxxx是實際的密碼。 但是運行上面代碼時出現錯誤&#xff1a; Cant connect to local MySQL server... 但是&#xff0c;如果把localhost修改為127.0.0.1即可&…

使用 POST 向 ASP.NET Core 傳遞數據時的長度限制與解決方案

使用 HTTP 協議上傳文件的標準做法是&#xff1a;使用 multipart/form-data 。但有時為了實現簡單且要上傳的文件不會太大&#xff0c;仍然會采用 application/x-www-form-urlencoded 上傳文件&#xff0c;這就需要在上傳前對二進制文件進行編碼&#xff0c;比如使用 Base64 。…

Eclipse利用Maven2搭建SpringMVC框架的Web工程

一、準備工作&#xff1a; 下載apache-maven--> 配置Maven_home -->下載Eclipse Maven插件 二、新建工程&#xff1a; 選擇新建Maven Project archetype選擇webapp-->輸入group ID &#xff08;src下包名&#xff09;和Artifact ID (工程名) 新建Maven工程目錄如上圖…

【ArcGIS風暴】ArcGIS10.6獲取柵格影像邊界范圍的三種方法案例詳解

基于ArcGIS平臺有多種辦法可以提取柵格影像邊界,常見的方法有3種: 柵格范圍(Raster Domain)柵格轉面(Raster to Polygon)創建輪廓(BuildFootprints)/構建邊界(BuildBoundary)文章目錄 1. 柵格范圍(Raster Domain)2. 柵格轉面(Raster to Polygon)3. 創建輪廓(Bui…

七、結構體《2022 solidity8.+ 版本教程到實戰》

結構體 結構體是一種可以自行定義的數據類型&#xff0c;其結構體內是復合的數據類型結構&#xff0c;當單一數據類型不能滿足時可以使用創建所需結構體。 結構體定義使用 struct&#xff0c;例如以下示例&#xff1a; struct Human{uint age;string name;uint height;}以上…

微服務落地,我們在考慮什么?

原創&#xff1a; 李寧 博云技術社區 導讀 微服務已經成為過去幾年軟件架構設計的“事實標準”&#xff0c;大多數企業在推動內部數字化轉型的過程中&#xff0c;服務軟件系統開始由單一或者SOA服務向微服務轉型。那么轉型過程需要遵循哪些原則呢&#xff1f;本文結合過往博云…

IDEA中使用數據庫可視化操作工具

文章目錄 1.入門介紹2. 沒有數據庫驅動3. 準備&測試連接3.1測試報錯 4.連接5.編寫SQL語句 1.入門介紹 在IDEA的專業版的右側工具欄應該會有DataBase按鈕如果沒有的同學可以這樣操作(必須是IDEA專業版) 新建數據庫 2. 沒有數據庫驅動 如果提示: missing driver files ,…