添加的代码如下:
//TODO Add extra initialization here m_list.AddString(“加”); m_list.AddString(“减”); m_list.AddString(“乘”); m_list.AddString(“除”);
函数AddString()的功能是在列表框中添加一个选项。 (3)添加消息处理函数 ①列表框的消息处理函数
选择列表框IDC_LIST1的消息为“LBN_SELCHANGE”,其对应的函数是OnSelchangeList1(),添加代码如下:
//TODO Add your control notification handler code here operator=m_list.GetCurSel()+1;
列表框的成员函数GetCurSel()的功能是获取列表框当前选项的序号,序号从0开始。
②“=”按钮和“退出”按钮的消息处理函数同Calculator01工程。
Step4:工程的编译、链接和运行 运行效果如图28所示。 3.5 滚动条控件
Windows系统很多窗口都有附加的滚动条,便于用户浏览显示内容。作为控件的滚动条其使用方法和特性与窗口中附加的滚动条十分相似,但功能不同。滚动条控件是一个输入数据的计数器控件,分为水平滚动条(Horizontal Scroll Bar)和垂直滚动条(Vertical Scroll Bar)两种。
水平和垂直滚动条的结构是一样的,两端都有一个滚动箭头按钮,中间有一个沿两端方向移动的滑块,在箭头按钮与滑块之间称之为滚页区。有三种滚动操作:
单击箭头按钮:执行慢速滚动,也称步进滚动,滚动单位为±1。 拖曳滑块:执行快速/自由滚动。
单击滚页区:执行滚页,页长由用户设定,如±10。
注意:滚动条通常部用于精确数据值的输入,而是作为可连续调整输入的工具。
【Case5】简单调色板
本实例利用水平滚动条以及三基色(红、绿、蓝)原理设计一个简单调色板。 Step1:由向导建立一个对话框工程架构,工程名为:Color Step2:界面设计效果如图29。其控件基本属性如下所示: 控件名 ID 标 题 其他属性 静态文本 IDC_DRAW 默认 Client edge 组框 默认 红色 编辑框 IDC_RED
滚动条 IDC_SCROLLBAR1
组框 默认 绿色 编辑框 IDC_GREEN 滚动条 IDC_SCROLLBAR2
组框 默认 蓝色 编辑框 IDC_BLUE 滚动条 IDC_SCROLLBAR3 命令按钮 IDC_BUTTON 退出 Step3:建立消息映射和消息处理函数 (1)为对话框设置绑定相关控件的成员变量:
控件ID 成员变量名 变量类型 值域 IDC_RED m_Red Value,int 0~255 IDC_GREEN m_Green Value,int 0~255 IDC_BLUE m_Blue Value,int 0~255 IDC_SCROLLBAR1 m_Scroll1 Control,SCrollBar IDC_SCROLLBAR2 m_Scroll2 Control,SCrollBar IDC_SCROLLBAR3 m_Scroll3 Control,ScrollBar
(2)建立对话框的WN_INITDIALOG消息函数OnInitDialog(),用于对有关变量进行初始化。添加的代码如下:
//TODO Add extra initialization here
m_Red=m_Green=m_Blue=0; //置成员变量的初值 //设置滚动条的值域和当前位置
m_Scroll1.SetScrollRange(0,255); m_Scroll1.SetScrollPos(m_Red); m_Scroll2.SetScrollRange(0,255); m_Scroll2.SetScrollPos(m_Green); m_Scroll3.SetScrollRange(0,255); m_Scroll3.SetScrollPos(m_Blue); UpdateData(FALSE);
(3)建立三个编辑框的ON_CHANGE消息函数On_ChangeRed()、On_ChangeGreen()和On_ChangeBlue(),用于接收成员变量的数据。这三个消息处理函数都只需添加一条语句:
UpdateData(FALSE);
(4)建立对话框的WM_HSCROLL消息函数On_Hscroll(),消息WM_HSCROLL是由滚动条发送的。
//TODO Add your control notification handler code here //接到红色滚动条的消息
if(pScrollBar->GetDlgCtrlID()==IDC_SCROLLBAR1)
{ if(nSBCode==SB_THUMBPOSITION)m_Red=nPos; //滑块滚动 if(nSBCode==SB_LINELEFT&&m_Red>0)m_Red--; //左箭头按钮 if(nSBCode==SB_LINERIGHT&&m_Red<255)m_Red++; //右箭头按钮 if(nSBCode==SB_PAGELEFT)m_Red-=10; //左滚页 if(nSBCode==SB_PAGERIGHT)m_Red+=10; //右滚页 m_Scroll1.SetScrollPos(m_Red); }
//接到绿色滚动条的消息
if(pScrollBar->GetDlgCtrlID()==IDC_SCROLLBAR2) { if(nSBCode==SB_THUMBPOSITION)m_Green=nPos; if(nSBCode==SB_LINELEFT&&m_Green >0)m_Green--; if(nSBCode==SB_LINERIGHT&&m_Green<255)m_Green++; if(nSBCode==SB_PAGELEFT)m_Green-=10; if(nSBCode==SB_PAGERIGHT)m_Green+=10;
m_Scroll2.SetScrollPos(m_Green); }
//接到蓝色滚动条的消息
if(pScrollBar->GetDlgCtrlID()==IDC_SCROLLBAR3) { if(nSBCode==SB_THUMBPOSITION)m_Blue=nPos; if(nSBCode==SB_LINELEFT&&m_Blue >0)m_Blue--; if(nSBCode==SB_LINERIGHT&&m_Blue <255)m_Blue++; if(nSBCode==SB_PAGELEFT)m_Blue-=10; if(nSBCode==SB_PAGERIGHT)m_Blue+=10; m_Scroll3.SetScrollPos(m_Blue); }
UpdateData(FALSE);
Draw(); //调用自定义成员函数,向调色板绘图
(5)为“退出”按钮的BN_CLICKED消息处理函数添加一调语句: EndDialog(1);
(6)为对话框添加public型的成员函数void Draw(),用于调制静态文本框IDC_DRAW的颜色。在VC++的“工程工作区”(左窗格)的“Class View”选项卡下,右击CcolorDlg再选择“Add member function”,在弹出的“添加成员函数”对话框中,先后输入函数的类型“void”和函数的名字“Draw”,按“确定”后在所显示的Draw函数框架内输入Draw函数的如下代码:
void CcolorDlg::Draw() { //设置调色板
CWnd *pWnd=GetDlgItem(IDC_DRAW); //获取静态文本的ID CRect rcClient; //建立矩形对象
pWnd->GetClientRect(rcClient); //获取IDC_DRAW所占矩形区域,
//并转换为矩形对象
//建立绘图对象
CDC *pDC=pWnd->GetDC(); //获取当前设备环境对象句柄 CBrush drawBrush; //建立画刷,设置画刷颜色 drawBrush.CreateSolidBrush(RGB(m_Red,m_Green,m_Blue);
//绘图
CBrush *pOldBrush=pDC->SelectObject(&drawBrush); //选取画刷 pDC->Rectangle(rcClient); //用画刷在矩形对象上绘图 //恢复原来状态
pDC->SelectObject(pOldBrush); }
Step4:工程的编译、链接和运行 运行效果如图31所示。 【Case6】仿真计算器
前面设计的计算器都比较简单,与实际计算器有较大差别。仿真计算器模拟实际计算器的基本使用方法,即数值和运算符都通过按键按钮输入,如图32所示。该工程的用户工作量较大,可分期完成。
第一期工程可只完成基本计算功能,如只实现“单一”计算功能,且不实现Backspace功能。下面是第一期工程的设计过程。
Step1:建立工程架构
使用MFC AppWizard建立一个对话框工程,工程名为:Calculator03 Step2:设计窗口界面
使用对话框编辑器设计工程的窗口界面。各控件的属性设置如下: 控件名 ID 标题 其他属性 编辑框 IDC_EDIT1 Right 命令按钮 IDC_BUTTON0 0 命令按钮 IDC_BUTTON1 1 命令按钮 IDC_BUTTON2 2 命令按钮 IDC_BUTTON3 3 命令按钮 IDC_BUTTON4 4 命令按钮 IDC_BUTTON5 5 命令按钮 IDC_BUTTON6 6 命令按钮 IDC_BUTTON7 7 命令按钮 IDC_BUTTON8 8 命令按钮 IDC_BUTTON9 9