1.2.2  增加消息映射项

本节介绍了如何增加消息映射项。

1.实例说明

本示例是一个简单的打字练习软件,程序在第一个编辑框随机显示一个大写字母,当用户在第2个编辑框中输入一个字符后,程序会在第一个编辑框中重新显示一个新字符。用户单击“确定”按钮结束练习时,可以获得正确输入的总次数,效果如图1-46所示。

1-46 Ex010202.exe效果图

 

2.实现

本实例的具体操作步骤如下。

1)新建一个基于对话框的工程Ex010202

2)在对话框上增加两个编辑框,ID分别为ID_SHOWID_INPUT。打开类向导,为ID_SHOW关联一个CEdit型的变量m_show,为ID_INPUT关联一个CEdit型的变量m_input

3)打开类向导,类名和Object IDs都选择CEx010202DlgMessages中选择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_INPUTEN_CHANGE消息增加响应函数”,如果类名和Object ID相同,则简称为“利用类向导为XXXXXXXX消息增加响应函数”,如“利用类向导为CEx010202DlgWM_INITDIALOG消息增加响应函数”。如果在“Messages”列表框中选择的是虚函数,则简称为“利用类向导重载XXXX类的虚函数XXXX”,如利用类向导重载CEx010202D类的虚函数PreTranslateMessage”。有些“消息”实际上是虚函数,为了和类向导保持一致,权且这么称呼。



回目录