1、(三)用类向导为对话框IDD_DLG_INPUT创建一个新类CFuncInput,并为控件添加变量:(四)在CFuncInput:DoDataExchange(CDataExchange* pDX)函数中添加如下代码初始化对话框变量值:(这样当弹出对话框时就编辑框中就会有初始值,当然这个也可以不要)SetDlgItemText(IDC_EDIT1,1); SetDlgItemText(IDC_EDIT2,0(五)打开ResourceView进入Menu项,(删除默认的菜单项,左键单机菜单主项,按Delete就可以了,但是别全部删除了,不然这个菜单会消失的,之后就是编译会出问题,在全部删除之前添
2、加菜单“操作”,这个不用多介绍吧,如下:IDM_DRAWLINE 画线(&D)IDM_NEW 刷新(&N)IDM_COLOR 颜色(&C)(六)用类向导为这三个菜单ID添加响应函数,并添加代码如下:void CTask_jd_LineView:OnDrawline() /主要的函数,根据输入的方程式进行绘制直线 / TODO: Add your command handler code here CFuncInput dlg; /这里注释下,要在task_jd_LineView.h文件中添加#includeFuncInput.h包含新建的类 if(dlg.DoModal()=IDOK) flo
3、at k,c; k=StringtoInt(dlg.m_k); c=StringtoInt(dlg.m_c);/这个StringtoInt是自己定义的函数,代码见后文 CDC *pDC=GetDC(); CBrush brush(Color); CBrush *old=pDC-SelectObject(&brush); CRect rt; GetClientRect(&rt); if(k=0&k=1) /斜率大于0且小于1 int x=-(rt.Width()/2)/10; int y=(int)(k*x+c+0.5); float e=k*x+c-y-0.5; for(int i=0;iEl
4、lipse(rt.Width()/2+x*10-3,rt.Height()/2-y*10-3,rt.Width()/2+x*10+3,rt.Height()/2-y*10+3); x+; e+=k; if(e=0) y+; e-; else if(k=-1&0) /斜率大于-1且小于0 float e=k*x+c-y+0.5; if(e=0str.GetAt(i) result+=1.0*(str.GetAt(i)-)/d; d*=10; else AfxMessageBox(系数中有非数字符号,请核实后重新输入! break; return (symbol*result);(八)对了,还有一
5、个很重要的没说,或许应该首先就介绍的,那就是坐标系的创建,用ClassWizard创建Draw函数画坐标系:OnDraw(CDC* pDC) /初始化坐标系 Add your specialized code here and/or call the base class CRect rt; GetClientRect(& Mpoint.x=rt.Width()/2; Mpoint.y=rt.Height()/2;/Mpoint在class CTask_jd_LineView中定义:CPoint Mpoint;代表原点 /*横坐标和纵坐标(粗线)*/ CPen pen(PS_SOLID,3,R
6、GB(0,0,255); CPen *pOldPen=pDC-pen); pDC-MoveTo(Mpoint.x-1,0);LineTo(Mpoint.x-1,rt.Height();MoveTo(0,Mpoint.y-1);LineTo(rt.Width(),Mpoint.y-1);SelectObject(pOldPen); /*坐标系(细线)*/ CPen pen1; pen1.CreatePen(PS_SOLID,1,RGB(180,120,0); pOldPen=pDC-pen1); for(int i=Mpoint.x+10;rt.Width();i+=10) pDC-MoveTo
7、(i,0);LineTo(i,rt.Height(); for(i=Mpoint.x-10;i0;i-=10) for(i=Mpoint.y+10;rt.Height();MoveTo(0,i);LineTo(rt.Width(),i); for(i=Mpoint.y-10;(九)到现在为止,应该就可以运行成功了。在我的代码里还添加了一些元素,让界面更好看:在int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)中删除(工具栏):if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD
8、| WS_VISIBLE | CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY| CBRS_SIZE_DYNAMIC) | !m_wndToolBar.LoadToolBar(IDR_MAINFRAME) TRACE0(Failed to create toolbarn return -1; / fail to create和m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);在BOOL CMain
9、Frame:PreCreateWindow(CREATESTRUCT& cs)中添加:cs.lpszName = _T( 绘制任意直线 ); cs.style = WS_OVERLAPPEDWINDOW; cs.cx=500; cs.cy=400; return TRUE;修改static UINT indicators =/ ID_SEPARATOR, / status line indicator /ID_INDICATOR_CAPS, /ID_INDICATOR_NUM, /ID_INDICATOR_SCRL, IDS_INDICATOR_MOUSE /*在String Table中双击
10、最后的空白行,添加ID:IDS_INDICATOR_MOUSE,标题:“ 当前坐标是: “不要忽略这些空格哈,不然没那么好看的,具体的各位自己调整*/;(十)用ClassWizard天机鼠标移动响应函数,并将鼠标位置所在的坐标显示在状态栏上,代码如下:OnMouseMove(UINT nFlags, CPoint point) /显示当前鼠标在该坐标系中的坐标 Add your message handler code here and/or call default CStatusBar*pFrame=(CStatusBar*)AfxGetMainWnd(); CStatusBar*pSta
11、tusBar=(CStatusBar*)pFrame-GetDescendantWindow(AFX_IDW_STATUS_BAR); CString strMousePoint; strMousePoint.Format(t当前坐标为: x=%1.2f, y=%1.2f,1.0*(point.x-Mpoint.x)/10,1.0*(Mpoint.y-point.y)/10); pStatusBar-SetPaneText(pStatusBar-CommandToIndex(IDS_INDICATOR_MOUSE),strMousePoint); CFormView:OnMouseMove(nFlags, point);(十一)这下真的没问题了,下面大家看看我运行的几个截图效果:1、鼠标放上之前:2、鼠标放上之后:3、点击菜单“画线(&D)”后:4、单机确定后:5、点击菜单“刷新(&N)”后返回图2,点击菜单“颜色(&C)”后:6、选择绿色,点击“确定”,再点击菜单“画线”,改变编辑框的内容:7、点击“确定”后:8、点击“颜色”选择粉红,确定,点击画线,改变对话框值:9、点击“确定”后:10、当然鼠标在上面移动式,状态栏的变化是没法截图过来的,就不演示了,有兴趣的做出来后就看得到了,就到此为止吧,还请多多指教!
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2