基于MFC的逐点比较法直线法插补教程Word文档格式.docx
《基于MFC的逐点比较法直线法插补教程Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于MFC的逐点比较法直线法插补教程Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
IDD)
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
DoDataExchange(CDataExchange*pDX)
CDialog:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//CMy1Dlgdialog
CMy1Dlg:
CMy1Dlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMy1Dlg:
IDD,pParent)
//{{AFX_DATA_INIT(CMy1Dlg)
m_x=0.0;
m_y=0.0;
m_x0=0;
m_y0=0;
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->
LoadIcon(IDR_MAINFRAME);
voidCMy1Dlg:
//{{AFX_DATA_MAP(CMy1Dlg)
DDX_Text(pDX,IDC_EDIT1,m_x);
DDV_MinMaxDouble(pDX,m_x,0.,10.);
DDX_Text(pDX,IDC_EDIT2,m_y);
DDV_MinMaxDouble(pDX,m_y,0.,10.);
DDX_Text(pDX,IDC_EDIT3,m_x0);
DDV_MinMaxInt(pDX,m_x0,0,10);
DDX_Text(pDX,IDC_EDIT4,m_y0);
DDV_MinMaxInt(pDX,m_y0,0,10);
BEGIN_MESSAGE_MAP(CMy1Dlg,CDialog)
//{{AFX_MSG_MAP(CMy1Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1,OnButton1)
ON_BN_CLICKED(IDC_BUTTON2,OnButton2)
//CMy1Dlgmessagehandlers
BOOLCMy1Dlg:
OnInitDialog()
OnInitDialog();
pWnd=GetDlgItem(IDC_MYSTATIC);
//Add"
About..."
menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&
0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<
0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->
AppendMenu(MF_SEPARATOR);
AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'
smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);
//Setbigicon
SetIcon(m_hIcon,FALSE);
//Setsmallicon
//TODO:
Addextrainitializationhere
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
OnSysCommand(UINTnID,LPARAMlParam)
if((nID&
0xFFF0)==IDM_ABOUTBOX)
CAboutDlgdlgAbout;
dlgAbout.DoModal();
else
CDialog:
OnSysCommand(nID,lParam);
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
OnPaint()
if(a==1)
CPaintDCdc(this);
//devicecontextforpainting
CStringstr;
inti,j;
intx,y;
//强制更新绘图,不可少,否则绘图会出错
//使static控件区域无效
pWnd->
Invalidate();
//更新窗口,此时才真正向系统发送重绘消息,没有这句你可以试下,绝对出问题
UpdateWindow();
CDC*pDC=pWnd->
GetDC();
//获取控件的CDC指针
pDC->
Rectangle(0,0,380,390);
//画一个矩形框
CPen*pPenRed=newCPen();
//创建画笔对象
pPenRed->
CreatePen(PS_SOLID,1,RGB(255,0,0));
//红色画笔
CPen*pPen=NULL;
//选中当前红色画笔,并保存以前的画笔
CGdiObject*pOldPen=pDC->
SelectObject(pPenRed);
pDC->
MoveTo(20,20);
//绘制坐标轴
LineTo(20,360);
//竖起轴
LineTo(360,360);
//水平轴
//写X轴刻度值
for(i=0;
i<
=10;
i++)
str.Format("
%d"
i);
TextOut(17+30*i,365,str);
//绘制X轴刻度
MoveTo(i*30+20,360);
LineTo(i*30+20,355);
//写Y轴刻度值
for(i=1;
TextOut(2,360-30*i-5,str);
//绘制Y轴刻度
MoveTo(25,360-30*i);
LineTo(20,360-30*i);
//绘制X箭头
MoveTo(350,357);
LineTo(350,363);
//绘制Y箭头
MoveTo(17,30);
LineTo(20,20);
//绘制左边箭头
LineTo(23,30);
//绘制右边箭头
pDC->
MoveTo(xi,yi);
LineTo(xe,ye);
//恢复以前的画笔
SelectObject(pOldPen);
//逐点比较法直线插补
while(sum>
0)
if(F>
=0)
F=F-m_y+m_y0;
Mov