: 1首先,添加高级按钮控件类,在这个类中实现高级的按钮控件。
在此类中对于所有的对于按钮的绘制工作都是在 DrawItem 函数中完成的,实现按钮对鼠标不同的位置和动作改变不同的颜色,并且按钮的客户区域变成一个椭圆。
2其次,添加一个高级编辑控件类,在此类的基础上实现高级编辑控件。
在 OnDisplay 函数中设置编辑框的显示文本,再调用 OnDraw 函数将其显示出来,并用指定的画刷填充客户区,并且用指定的颜色绘制显示文本。
3最后,实现主对话框界面功能,主要是加载菜单资源和对话框扩展功能的实现。
在CCalculatorDlg::OnCreate 函数中设定对话框的初始大小与位置,可以在这个对话框中进行窗口风格修改,位置设置等操作,然后添加菜单项 ID_EXTEND 的响应函数 OnExtend。
4 系统的实现4.1 窗体设计利用 MFC AppWinzard 生成计算器应用程序框架具体步骤如下: 1执行 VC 程序,选择 FileNew 命令,弹出 New 对话框.单击 Projects 标签,转到 Projects 选项卡,选择 MFCAppWizardexe选项,然后在 Project name 文本框中输入 Calculator 。
Lacation 文本框是指项目的本地路径。
2单击 OK 按钮,弹出 MFC AppWinzard_Step1 对话框。
选中单选按钮,如图所示。
3单击 Next 按钮,弹出 MFC AppWinzard_Step2 of4 对话框,如图所示。
4单击 Next 按钮,弹出 MFC AppWinzard_Step3 of4 对话框,如图所示。
5单击 Next 按钮,弹出 MFC AppWinzard_Step4 of4 对话框,如图所示。
单击 Finish 按钮,创建框架。
4.2 编辑资源 1编辑对话框及控件资源 利用 Visual C提供的资源编辑器对对话框资源进行编辑。
删除对话框中默认的 OK 和 Cancel 按钮。
添加一个Edit 控件,其控件 ID 为 IDC_DSPEDIT。
添加若干按钮控件,其 ID 如表 4-1 所示。
表 4-1 按钮控件资源清单 按钮名称 按钮 ID 用途 0 BTN_0 按键 0 1 BTN_1 按键 1 2 BTN_2 按键 2 3 BTN_3 按键 3 4 BTN_4 按键 4 5 BTN_5 按键 5 6 BTN_6 按键 6 7 BTN_7 按键 7 6 8 BTN_8 按键 8 9 BTN_9 按键 9 。
BTN_10 小数点 BTN_11 求值 BTN_12 加号 - BTN_13 减号 BTN_14 乘号 / BTN_15 除号 CE BTN_16 清屏 Sqrt BTN_17 开方 1/x BTN_18 倒数 sin BTN_19 正弦 cos BTN_20 余弦 tan BTN_21 正切 x2 BTN_22 平方 x3 BTN_23 立方 xy BTN_24 以 X 为底的 y 次幂 exp BTN_25 以 e 为底的幂 ln BTN_26 以 e 为底的对数 log BTN_27 对数 -/ BTN_29 正负号 10x BTN_30 10 的 x 次方 n BTN_31 N 的阶层添加 2 个单选按钮,按钮资源清单如下 表 4-2 单选按钮控件资源清单 控件名 设置 ID DEGREE BTN_DEGREE RADIAN BTN_RAD添加 4 个静态框,将编辑控件,普通计算,高级计算分别分组。
其效果如图 4-1 所示。
7 图 4-1 编辑对话框资源 2编辑菜单资源 在 Visual C中的 Workspace 工具栏中,选中 ResourceView 选项卡。
在其中的 Menu 项上右击,在弹出的快捷菜单中选择 Insert 命令,如图 4-2 所示。
图 4-2 添加菜单资源 将添加的菜单资源的 ID 更改为 IDR_MENU。
利用资源编辑器对菜单进行编辑,编辑后的菜单如图 4-3 所示。
8 图 4-3 编辑菜单资源4.3 实现高级按钮控件类利用 ClassWizard 添加一个新类如图 4-5 所示。
图 4-5 添加 CAdvButton 类 1添加成员变量和成员函数 为实现高级按钮控件对鼠标的移动和单击作出相应的颜色变化。
首先在 CAdvButton 的头文件中加入几种预定义颜色,其代码如下: define DesiableColor RGB192192192 //灰色 按钮不可用 define FocusColor RGB25500 //红色 按钮拥有焦点 define SelectColor RGB02550 //绿色 按钮被按下 define DefaultColor RGB00255 //蓝色 默认 define TextColor RGB128128128 //浅灰色 文本颜色 接下来,添加成员变量: public: CRect m_ClientRect //用来保存按钮的客户的矩形区域 CRgn m_ClientRgn //用来保存按钮的客户区域非矩形 UINT m_State //按钮所处状态 CPoint m_Point //当前鼠标位置 BOOL m_IsTimerOn //标识计时器是否已经打开 9 利用 ClassWizard 添加消息映射和响应函数: 图 4-6 添加响应函数再利用 ClassWizard 覆盖父类中的两个关键的虚