编辑数学公式绘制曲线

 

编辑公式显示曲线

 

为了实现编辑公式显示曲线的的程序,天一程花了一周时间从构思到编码,终于算是有了个雏形,如果有时间的花,天一程将会对此进行改进。希望各位围观大虾也指点指点,有什么改进的地方和建议,多提提,天一程感激不尽。下面就对本程序的内容详细的说明。

   

 

(文章中的图片由于原因显示不了,但天一程的相册里面有)

此程序的效果图如下:


程序效果

程序效果2

 程序效果3


 

补充几点:

1.               对于Expression适用于sin(x)、e^x、x^n、a*x+b等形式的复合运算,但是输入时必须以‘#’结束

2.               e^x的输入以E^x ,x^n的输入新式为x^n, a*x+b的输入形式为a*x+b

3.               对于指数运算的复合运算底数部分和指数部分只能是多项式,对于正弦函数的括号里面表达式也限于多项式

 

 

本程序主要分为三部分:1.切分对话框 2.识别函数表达式 3.计算数学表达式的值

类结构和文件结构如图所示:

类结构

文件结构

 


 

 

 

1.       切分对话框

 

主要的思想是建一个对话框资源和类,然后建一个框架类,将对话框类和框架类关联,然后按视图切分操作就可以了,视图切分学VC的朋友都比较熟悉了(天一程也是在网上找了一个切分对话框的例子,例子的下载地址为:http://www.codersource.net/mfc/mfc-advanced/mfc-splitter-window.aspx

 

添加对话框资源并添加静态文本控件,截图如下:

对话框

 

框架类的代码:

class CFlatFrameWnd : public CFrameWnd {                        //创建一个框架类

       DECLARE_DYNAMIC(CFlatFrameWnd);

    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

};

IMPLEMENT_DYNAMIC(CFlatFrameWnd, CFrameWnd);

 

BOOL CFlatFrameWnd::PreCreateWindow(CREATESTRUCT& cs)

{

       CFrameWnd::PreCreateWindow(cs);

       cs.dwExStyle &= ~WS_EX_CLIENTEDGE;

       return TRUE;

}

 

 

 

 

 

对话框类与框架关联以及创建视(切分的子窗口)的代码:

 

void CFormulaDrawDlg::CreateViews()

{

       CCreateContext ccc;

       ccc.m_pNewViewClass   = RUNTIME_CLASS(CRightView);//CLeftDlg

       ccc.m_pCurrentDoc     = NULL;

       ccc.m_pNewDocTemplate = NULL;

       ccc.m_pLastView       = NULL;

       ccc.m_pCurrentFrame   = NULL;

 

       // Because the CFRameWnd needs a window class, we will create a new one.

       CString strMyClass = AfxRegisterWndClass(CS_VREDRAW |

       CS_HREDRAW,

       ::LoadCursor(NULL, IDC_ARROW),

       (HBRUSH) ::GetStockObject(WHITE_BRUSH),

       ::LoadIcon(NULL, IDI_APPLICATION));

 

       CRect rect;

       GetDlgItem(IDC_VTEMPLATE)->GetWindowRect(rect);

       ScreenToClient(rect);

       // Create the frame window with "this" as the parent

       m_pFrame = new CFlatFrameWnd;

       m_pFrame->Create(strMyClass,"", WS_CHILD, rect, this);           //this指的是父窗口

       m_pFrame->ShowWindow(SW_SHOW);

 

 

       // and finally, create the splitter with the frame as

       // the parent

       m_cSplitter.CreateStatic(m_pFrame,1, 2);

       m_cSplitter.ModifyStyleEx(WS_EX_CLIENTEDGE, 0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值