1.進入資源視圖,新建對話框,編輯修改Caption或者ID屬性
右擊該對話框添加類 基類爲 CDialog
命名爲:MyCircleDialog
使用類嚮導,選擇MyCircleDialog類,選 擇成員變量 添加變量 value類型 int型
m_radius 設置 變量取值範圍
m_circlex
m_circlex
2.添加菜單,設置ID 爲 ID_MyCircleMenu 並通過類嚮導添加消息映射函數
選擇類名 C***View
查找ID ID_MyCircleMenu,映射 ONCOMMAND 消息
C***View
3.添加變量並在構造函數中初始化
C***View.h
public: int m_vradius; int m_vcirclex; int m_vcircley;
C***View.cpp
m_vradius = 0; m_vcirclex = 0; m_vcircley = 0;
添加 MyCircleDialog 頭文件
#include "MyCircleDialog.h"
4.在消息處理程序中添加與dialog交互 獲取 輸入數據的代碼
// CMFCCircleDialogDemoView 消息處理程序 void CMFCCircleDialogDemoView::OnMycirclemenu() { // TODO: 在此添加命令處理程序代碼 MyCircleDialog dlg; //定義一個對話框對象 if(dlg.DoModal() == IDOK) //顯示對話框 { m_vradius = dlg.m_radius; m_vcirclex = dlg.m_circleX; m_vcircley = dlg.m_circleY; //接收並存儲編輯框數據 Invalidate(); //刷新視圖 } }
// CMFCTestView 繪製
5.在OnDraw中 添加 繪圖 代碼(取消CDC*參數註釋,使用所有設備環境基類CDC畫圖,
也可以定義使用 其他設備環境類如CClientDC等)
void CMFCCircleDialogDemoView::OnDraw(CDC* pDC) { CMFCCircleDialogDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此處爲本機數據添加繪製代碼 /*確定圓心,畫出直角座標系*/ CRect rect; GetWindowRect(rect); int center_x = rect.Width()/2; int center_y = rect.Height()/2; CPen myPen; //創建畫筆 myPen.CreateStockObject(BLACK_PEN); //設置畫筆屬性 pDC->SelectObject(&myPen); //綁定畫筆句柄 pDC->MoveTo(center_x,0); pDC->LineTo(center_x, rect.Height()); pDC->MoveTo(0,center_y); pDC->LineTo(rect.Width(),center_y); /*********************繪製圓****************/ //邏輯圓心座標 /* int m_vradius = 50; int m_vcirclex = -70; int m_vcircley = 100; */ //轉化爲畫布中圓心座標 center_x = center_x + m_vcirclex; center_y = center_y - m_vcircley; pDC->SetPixel(center_x,center_y+m_vradius,RGB(125,125,125));//繪製圓心的點 pDC->Ellipse(center_x-3,center_y-3,center_x+3,center_y+3); //畫個小圓,確定圓心位置 int p=5/4-m_vradius; //鍵值的初始值 int x=0; int y=m_vradius; //使用中點圓算法畫圓 while(x<y){ x++; if(p<0){ p=p+2*x+3; pDC->SetPixel(center_x+x,center_y+y,RGB(125,125,125)); pDC->SetPixel(center_x+y,center_y+x,RGB(125,125,125)); pDC->SetPixel(center_x+y,center_y-x,RGB(125,125,125)); pDC->SetPixel(center_x+x,center_y-y,RGB(125,125,125)); pDC->SetPixel(center_x-x,center_y-y,RGB(125,125,125)); pDC->SetPixel(center_x-y,center_y-x,RGB(125,125,125)); pDC->SetPixel(center_x-y,center_y+x,RGB(125,125,125)); pDC->SetPixel(center_x-x,center_y+y,RGB(125,125,125)); //以對稱的方式完成圓的繪製 } else{ y--; p=p+2*x+3-2*y-2; pDC->SetPixel(center_x+x,center_y+y,RGB(125,125,125)); pDC->SetPixel(center_x+y,center_y+x,RGB(125,125,125)); pDC->SetPixel(center_x+y,center_y-x,RGB(125,125,125)); pDC->SetPixel(center_x+x,center_y-y,RGB(125,125,125)); pDC->SetPixel(center_x-x,center_y-y,RGB(125,125,125)); pDC->SetPixel(center_x-y,center_y-x,RGB(125,125,125)); pDC->SetPixel(center_x-y,center_y+x,RGB(125,125,125)); pDC->SetPixel(center_x-x,center_y+y,RGB(125,125,125)); //以對稱的方式完成圓的繪製 } Sleep(20); } }