编辑公式显示曲线
为了实现编辑公式显示曲线的的程序,天一程花了一周时间从构思到编码,终于算是有了个雏形,如果有时间的花,天一程将会对此进行改进。希望各位围观大虾也指点指点,有什么改进的地方和建议,多提提,天一程感激不尽。下面就对本程序的内容详细的说明。
(文章中的图片由于原因显示不了,但天一程的相册里面有)
此程序的效果图如下:
补充几点:
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);