Visual C++ MFC的圖形繪製

Visual C++ MFC的圖形繪製

1. 帶菜單界面製作

新建一個單文檔類型的MFC AppWizard (exe)工程,工程取名爲:Graphic。爲此程序添加一個子菜單,菜單名稱爲“繪圖”,併爲其添加六個菜單項,分別用來控制不同圖形的繪製。當用戶選擇其中的一個菜單項後,程序將按照當前的選擇進行相應圖形的繪製。添加的六個菜單項的ID及名稱如表1所示。然後分別爲這六個菜單項添加命令響應,本程序讓視類(CGraphicView)對這些菜單命令進行響應,這六個響應函數的名稱分別如表1所示
在這裏插入圖片描述
1.啓動Visual C++6.0後,打開【File】(文件)菜單下的【New】(新建)菜單項,選擇Project(工程)項。然後選擇“MFC AppWizard(exe)”選項,在右邊的對話框Project name(工程名稱)中輸入“Graphic”,在接下來的步驟中依次選擇“多重文檔”,然後單擊【Finish】(完成)按鈕。
在這裏插入圖片描述
在這裏插入圖片描述
進來之後
在這裏插入圖片描述
第3步就改一下屬性名稱就可以了,然後下面就會出現一個方框,同樣的點進去,ID,標明直接複製老師給的文檔裏面的就可以了(有一個會報錯,IDM-RECTANGLE,這個不是-而是下滑線_,IDM_RECTANGLE)在這裏插入圖片描述
全部加完之後就是這樣的
在這裏插入圖片描述
然後在對話框空白處單擊右鍵,選擇“ClassWizard”(建立類嚮導)選項,顯示如下所示的“MFC Class Wizard”對話框,選擇“Member Maps”選項卡,在“Object Ids”中可以看到對話框界面上的按鈕和文本框的ID。選擇“IDM_DOT”,單擊【Add Variable】,爲“IDC_Dot”添加變量(下面幾個IDM_XXX,都按上述步驟添加變量)如圖:
在這裏插入圖片描述
在這裏插入圖片描述
全都填加完後點確定。
然後在FileView–>Header Files
–>GraphicView.h(雙擊),添加一個私有變量,如圖:
在這裏插入圖片描述
然後在FileView–>Header Files
–>GraphicView.cpp(雙擊),找到CGraphicView::CGraphicView()函數,進行初始化
在這裏插入圖片描述
加完之後往下滑 或者 在Class View
–>CGraphicView–>OnDot()(雙擊)
在這裏插入圖片描述
從OnDot()開始往下選中,換成如下代碼

void CGraphicView::OnDot() 
{
	m_nDrawType=1;
}
void CGraphicView::OnLine() 
{
	m_nDrawType=2;
}
void CGraphicView::OnRectangle() 
{
	m_nDrawType=3;
}
void CGraphicView::OnEllipse() 
{
	m_nDrawType=4;
}
void CGraphicView::OnShanxing() 
{
	m_nDrawType=5;
}
void CGraphicView::OnLianxuxian() 
{
	m_nDrawType=6;
}

第一步就算完成了。

2. 點、直線、矩形、橢圓的繪製

對於直線、矩形和橢圓,在繪製時都可有兩點來確定其圖形。當鼠標左擊時得到一個點,當鼠標左鍵鬆開時得到另外一個點。爲視類CGraphicView分別捕獲鼠標左鍵按下和彈起這兩個消息。另外當鼠標左鍵按下時,需要將鼠標當前按下點保存,因此我們爲CGraphicView再增加一個CPoint類型的私有成員變量:m_ptOrigin,在視類的構造函數中將此變量初始化爲0。在鼠標按下消息響應函數中,保存該點。

在對話框空白處單擊右鍵,選擇“ClassWizard”(建立類嚮導)選項,顯示如下所示的“MFC Class Wizard”對話框,選擇“Member Maps”選項卡,在“Object Ids”中選
CGraphicView,在Messages裏面找到WM_LBUTTONDOWN—>Add Function
再WM_LBUTTONUP–>Add Function(這兩個就是鼠標按下跟彈起)
如圖:在這裏插入圖片描述
然後在FileView–>Header Files
–>GraphicView.h(雙擊),再添加一個私有變量,如圖:
在這裏插入圖片描述
然後在FileView–>Header Files
–>GraphicView.cpp(雙擊),找到CGraphicView::CGraphicView()函數,進行初始化在這裏插入圖片描述
初始化後,直接往下滑到最底,把這兩個函數
在這裏插入圖片描述
改爲在這裏插入圖片描述

void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_ptOrigin=point;  //保存鼠標按下得到點,也是繪製一個點
	CView::OnLButtonDown(nFlags, point);
}
在鼠標左鍵彈起消息響應函數中實現繪圖,代碼如下:
void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
//創建並獲得設備描述
	CClientDC dc(this); 
	switch (m_nDrawType)
	{
	case 1:
		dc.SetPixel(point,RGB(255,0,0)); /*繪製點*/
		break;
	case 2:                     /*繪製直線*/
		dc.MoveTo(m_ptOrigin);/*調用MoveTo函數移動到原點*/
		dc.LineTo(point);/*調用LineTo函數繪製到終點。*/
		break;
	case 3:       /*繪製矩形*/            
		dc.Rectangle(CRect(m_ptOrigin,point));
		break;
	case 4:        /*繪製橢圓*/
		dc.Ellipse(CRect(m_ptOrigin,point));
		break;
	CView::OnLButtonUp(nFlags, point);
}
}

如果你複製Word文檔裏面的代碼,會有報錯
在這裏插入圖片描述
位置1:括號要改成英文的
位置2:少了一個反括號
改完後,大家就可以編譯運行(Ctrl+F5)了,(因爲只有四個函數,所以扇形跟連續線沒有實現是畫不出來的)
如圖:
在這裏插入圖片描述剛剛有人問我#include"stdafx.h",報錯怎麼解決。
具體方法還沒研究出來,不過有的同學吧這個改成#include"StdAfx.h"就解決了
還有一個方法就是,打開StdAfx.cpp,編譯一下(報錯不管),關掉這個cpp,再編譯一開始那個就解決了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章