1.2.2 增加消息映射项本节介绍了如何增加消息映射项。 1.实例说明本示例是一个简单的打字练习软件,程序在第一个编辑框随机显示一个大写字母,当用户在第2个编辑框中输入一个字符后,程序会在第一个编辑框中重新显示一个新字符。用户单击“确定”按钮结束练习时,可以获得正确输入的总次数,效果如图1-46所示。
图1-46 Ex010202.exe效果图 2.实现本实例的具体操作步骤如下。 (1)新建一个基于对话框的工程Ex010202。 (2)在对话框上增加两个编辑框,ID分别为ID_SHOW和ID_INPUT。打开类向导,为ID_SHOW关联一个CEdit型的变量m_show,为ID_INPUT关联一个CEdit型的变量m_input。 (3)打开类向导,类名和Object IDs都选择CEx010202Dlg,Messages中选择WM_INITDIALOG,类向导会自动选中对应的函数,双击此函数就可以编辑它了,如图1-47所示。
图1-47 编辑函数 (4)在此函数中禁用第一个编辑框,并为它生成初始值。 BOOL CEx010202Dlg::OnInitDialog() { CDialog::OnInitDialog(); m_show.SetReadOnly();//设置只读 char ch = 'A' + rand()% 26 ;//随机生成一个大写字母 CString strShow = ch ; m_show.SetWindowText(strShow); //… } (5)为CEx010202Dlg类增加一个保护级的成员变量int m_iRightNum,并在CEx010202Dlg类的构造函数中将其初始化为零,此变量用来记录正确输入次数。 (6)当用户输入后,必须检查用户的输入是否正确,并重新生成数据。打开类向导,类名选择CEx010202Dlg,“Object IDs”选择“IDC_INPUT”,“Messages”选择“EN_CHANGE”,单击“Add Function”按钮,如图1-48所示。
图1-48 增加消息映射 在弹出的“Add Member Function”对话框中,输入新函数名,如果不想改函数,直接单击“OK”按钮,使用默认函数名,如图1-49所示。
图1-49 增加成员函数 (7)使用步骤(3)的方法,编辑此函数。 void CEx010202Dlg::OnChangeInput() { CString strShow ;//显示的内容
m_show.GetWindowText(strShow);
CString strInput ;//用户输入的内容 m_input.GetWindowText(strInput);
strInput.MakeUpper();//因为不区分大小写,所以小写变大写, //正确的次数加一 if(strShow == strInput) m_iRightNum ++ ;
//选中,以便用户下次输入的时候替换掉已有内容 m_input.SetSel(0,-1);
//随机生成一个大写字母 char ch = 'A' + rand()% 26 ;
strShow = ch ; m_show.SetWindowText(strShow); } (8)编辑对话框状态下,双击“OK”按钮。会弹出“Add Member Function”对话框,直接单击“OK”按钮,编辑此函数,代码如下: void CEx010202Dlg::OnOK() { CString strMess ; strMess.Format("你共正确输入了%d个字符",m_iRightNum);
AfxMessageBox(strMess); CDialog::OnOK(); } (9)编译并运行Ex010202.exe,按照提示输入字符。如果想查看成绩,单击“确定”按钮,程序结束时会自动统计成绩。 注意:步骤(6)以后简称为“利用类向导,在类CEx010202Dlg中,为IDC_INPUT的EN_CHANGE消息增加响应函数”,如果类名和Object ID相同,则简称为“利用类向导为XXXX的XXXX消息增加响应函数”,如“利用类向导为CEx010202Dlg的WM_INITDIALOG消息增加响应函数”。如果在“Messages”列表框中选择的是虚函数,则简称为“利用类向导重载XXXX类的虚函数XXXX”,如“利用类向导重载CEx010202D类的虚函数PreTranslateMessage”。有些“消息”实际上是虚函数,为了和类向导保持一致,权且这么称呼。
|
|