⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap5_3.htm

📁 非常好的应用vc++6.0进行相关网络程序开发的教程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
    <p ALIGN="JUSTIFY">// TODO: Add your command handler code here</p>
    <p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CRegisterDialog dlg;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">if(dlg.DoModal()==IDOK)</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">CString str;</p>
    <p ALIGN="JUSTIFY">//</font><font SIZE="3">获取编辑正文</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">GetWindowText(str);</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">//</font><font SIZE="3">换行</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">str+=&quot;\r\n&quot;;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">str+=&quot;</font><font SIZE="3">姓名</font><font FACE="Times New Roman" SIZE="3">:&quot;;</p>
    <p ALIGN="JUSTIFY">str+=dlg.m_strName;</p>
    <p ALIGN="JUSTIFY">str+=&quot;\r\n&quot;;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">str+=&quot;</font><font SIZE="3">性别</font><font FACE="Times New Roman" SIZE="3">:&quot;;</p>
    <p ALIGN="JUSTIFY">str+=dlg.m_nSex?&quot;</font><font SIZE="3">女</font><font FACE="Times New Roman" SIZE="3">&quot;:&quot;</font><font SIZE="3">男</font><font FACE="Times New Roman" SIZE="3">&quot;;</p>
    <p ALIGN="JUSTIFY">str+=&quot;\r\n&quot;;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">str+=&quot;</font><font SIZE="3">年龄</font><font FACE="Times New Roman" SIZE="3">:&quot;;</p>
    <p ALIGN="JUSTIFY">CString str1;</p>
    <p ALIGN="JUSTIFY">//</font><font SIZE="3">将数据格式输出到字符串对象中</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">str1.Format(&quot;%d&quot;,dlg.m_nAge);</p>
    <p ALIGN="JUSTIFY">str+=str1;</p>
    <p ALIGN="JUSTIFY">str+=&quot;\r\n&quot;;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">str+=&quot;</font><font SIZE="3">婚否</font><font FACE="Times New Roman" SIZE="3">:&quot;;</p>
    <p ALIGN="JUSTIFY">str+=dlg.m_bMarried?&quot;</font><font SIZE="3">已婚</font><font FACE="Times New Roman" SIZE="3">&quot;:&quot;</font><font SIZE="3">未婚</font><font FACE="Times New Roman" SIZE="3">&quot;;</p>
    <p ALIGN="JUSTIFY">str+=&quot;\r\n&quot;;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">str+=&quot;</font><font SIZE="3">就业状况</font><font FACE="Times New Roman" SIZE="3">:&quot;;</p>
    <p ALIGN="JUSTIFY">str+=dlg.m_nWork?&quot;</font><font SIZE="3">下岗</font><font FACE="Times New Roman" SIZE="3">&quot;:&quot;</font><font SIZE="3">在职</font><font FACE="Times New Roman" SIZE="3">&quot;;</p>
    <p ALIGN="JUSTIFY">str+=&quot;\r\n&quot;;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">str+=&quot;</font><font SIZE="3">工作单位</font><font FACE="Times New Roman" SIZE="3">:&quot;;</p>
    <p ALIGN="JUSTIFY">str+=dlg.m_strUnit;</p>
    <p ALIGN="JUSTIFY">str+=&quot;\r\n&quot;;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">str+=&quot;</font><font SIZE="3">单位性质</font><font FACE="Times New Roman" SIZE="3">:&quot;;</p>
    <p ALIGN="JUSTIFY">str+=dlg.m_strKind;</p>
    <p ALIGN="JUSTIFY">str+=&quot;\r\n&quot;;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">str+=&quot;</font><font SIZE="3">工资收入</font><font FACE="Times New Roman" SIZE="3">:&quot;;</p>
    <p ALIGN="JUSTIFY">str+=dlg.m_strIncome;</p>
    <p ALIGN="JUSTIFY">str+=&quot;\r\n&quot;;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">//</font><font SIZE="3">更新编辑视图中的正文</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">SetWindowText(str);</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">OnEditRegister</font><font SIZE="3">函数中,首先构建了一个</font><font FACE="Times New Roman" SIZE="3">CRegisterDialog</font><font SIZE="3">对象,然后调用</font><font FACE="Times New Roman" SIZE="3">CDialog::DoModal</font><font SIZE="3">来实现模态对话框。如果</font><font FACE="Times New Roman" SIZE="3">DoModal</font><font SIZE="3">返回</font><font FACE="Times New Roman" SIZE="3">IDOK</font><font SIZE="3">,则说明用户确认了登录数据的操作,程序需要将录入的数据在编辑视图中输出。程序用一个</font><font FACE="Times New Roman" SIZE="3">CString</font><font SIZE="3">对象来作为编辑正文的缓冲区,</font><font FACE="Times New Roman" SIZE="3">CString</font><font SIZE="3">是一个功能强大的字符串类,它的最大特点在于可以存储动态改变大小的字符串,这样,用户不必担心字符串的长度超过缓冲区的大小</font><font FACE="Times New Roman" SIZE="3">, </font><font SIZE="3">使用十分方便。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">在输出数据时,程序首先调用</font><font FACE="Times New Roman" SIZE="3">CWnd::GetWindowText</font><font SIZE="3">获得编辑正文,这是一个多行的编辑正文。</font><font FACE="Times New Roman" SIZE="3">CWnd::GetWindowText</font><font SIZE="3">用来获取窗口的标题,若该窗口是一个控件,则获取的是控件内的正文。</font><font FACE="Times New Roman" SIZE="3">CRegisterView</font><font SIZE="3">是</font><font FACE="Times New Roman" SIZE="3">CEditView</font><font SIZE="3">的继承类,而</font><font FACE="Times New Roman" SIZE="3">CEditView</font><font SIZE="3">实际上包含了一个编辑控件,因此在</font><font FACE="Times New Roman" SIZE="3">CRegisterView</font><font SIZE="3">中调用</font><font FACE="Times New Roman" SIZE="3">GetWindowText</font><font SIZE="3">获得的是编辑正文。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">然后,程序在该编辑正文的末尾加入新的数据。在程序中大量使用了</font><font FACE="Times New Roman" SIZE="3">CString</font><font SIZE="3">类的重载操作符“+=”,该操作符的功能是将操作符右侧字符串添加到操作符左侧的字符串的末尾。注意在多行编辑控件中每行末尾都有一对回车和换行符。在程序中还调用了</font><font FACE="Times New Roman" SIZE="3">CString::Format</font><font SIZE="3">来将数据格式化输出到字符串中,</font><font FACE="Times New Roman" SIZE="3">Format</font><font SIZE="3">的功能与</font><font FACE="Times New Roman" SIZE="3">sprintf</font><font SIZE="3">类似。最后,调用</font><font FACE="Times New Roman" SIZE="3">CWnd::SetWindowText</font><font SIZE="3">来更新编辑视图中的正文。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">编译并运行</font><font FACE="Times New Roman" SIZE="3">Register</font><font SIZE="3">,打开登录数据对话框,输入一些数据试试。现在,</font><font FACE="Times New Roman" SIZE="3">Register</font><font SIZE="3">已经是一个简易的数据库应用程序了,它可以将与就业情况有关的数据输出到一个编辑视图中。用户可以编辑视图中的正文,并将结果保存在文本文件中。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font color="#3973DE" FACE="Times New Roman" SIZE="3">5.3.6</font><font SIZE="3" color="#3973DE">处理控件通知消息</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">虽然</font><font FACE="Times New Roman" SIZE="3">Register</font><font SIZE="3">已经可以登录数据了,但读者会很快会发现该程序还有一些不完善的地方:</p>
    <blockquote>
      <p ALIGN="JUSTIFY">登录完一个人的数据后,对话框就关闭了,若用户有很多人的数据要输入,则必须频繁地打开对话框,很不方便。在登录数据时,应该使对话框一直处于打开状态。</p>
      <p ALIGN="JUSTIFY">登录数据对话框分个人情况和单位情况两组,若被调查人是下岗职工,则不必输入单位情况。程序应该能够对用户的输入及时地作出反应,即当用户选择了“下岗”单选按钮时,应使单位情况组中的控件禁止。一个禁止的控件呈灰色示,并且不能接收用户的输入。</p>
      </font>
    </blockquote>
    <p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">要解决上述问题,就必须对控件通知消息进行处理。当控件的状态因为输入等原因而发生变化时,控件会向其父窗口发出控件通知消息。例如,如果用户在登录数据对话框中的某一按钮(包括普通按钮、检查框和单选按钮)上单击鼠标,则该按钮会向对话框发送</font><font FACE="Times New Roman" SIZE="3">BN_CLICKED</font><font SIZE="3">消息。对话框根据按钮的</font><font FACE="Times New Roman" SIZE="3">ID</font><font SIZE="3">激活相应的</font><font FACE="Times New Roman" SIZE="3">BN_CLICKED</font><font SIZE="3">消息处理函数,以对单击按钮这一事件作出反应。通过对按钮的</font><font FACE="Times New Roman" SIZE="3">BN_CLICKED</font><font SIZE="3">消息的处理,我们可以使登录数据对话框的功能达到上述要求。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">首先,让我们来解决第一个问题。我们的设想是修改原来的“确定</font><font FACE="Times New Roman" SIZE="3">(Y)</font><font SIZE="3">”按钮,使得当用户点击该按钮后,将数据输出到视图中,并且对话框不关闭,以便用户输入下一个数据。请读者按下面几步进行修改。</p>
    <blockquote>
      <p ALIGN="JUSTIFY">修改登录数据对话框的“确定<font FACE="Times New Roman" SIZE="3">(Y)</font>”按钮,使该按钮的标题变为“添加<font FACE="Times New Roman" SIZE="3">(&amp;A)</font>”,<font FACE="Times New Roman" SIZE="3">ID</font>变为<font FACE="Times New Roman" SIZE="3">IDC_ADD</font>。这样,当用户点击该按钮后,对话框会收到<font FACE="Times New Roman" SIZE="3">BN_CLICKED</font>消息。由于这个<font FACE="Times New Roman" SIZE="3">BN_CLICKED</font>消息对应的按钮<font FACE="Times New Roman" SIZE="3">ID</font>不是<font FACE="Times New Roman" SIZE="3">IDOK</font>,不会触发<font FACE="Times New Roman" SIZE="3">OnOK</font>消息处理函数,因此不会关闭对话框。</p>
      <p ALIGN="JUSTIFY">为按钮<font FACE="Times New Roman" SIZE="3">IDC_ADD</font>的<font FACE="Times New Roman" SIZE="3">BN_CLICKED</font>消息创建消息处理函数。创建的方法是进入<font FACE="Times New Roman" SIZE="3">ClassWizard</font>后,选<font FACE="Times New Roman" SIZE="3">Message Maps</font>页并在<font FACE="Times New Roman" SIZE="3">Class name</font>栏中选择<font FACE="Times New Roman" SIZE="3">CRegisterDialog</font>,然后在<font FACE="Times New Roman" SIZE="3">Object IDs</font>栏中选择<font FACE="Times New Roman" SIZE="3">IDC_ADD</font>,在<font FACE="Times New Roman" SIZE="3">Messages</font>栏中双击<font FACE="Times New Roman" SIZE="3">BN_CLICKED</font>。在确认使用缺省的消息处理函数名<font FACE="Times New Roman" SIZE="3">OnAdd</font>后,按回车键退出<font FACE="Times New Roman" SIZE="3">ClassWizard</font>。</p>
      <font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">OnAdd</font>要向编辑视图输出正文,就必须获得一个指向<font FACE="Times New Roman" SIZE="3">CRegisterView</font>对象的指针以访问该对象。为此,请在<font FACE="Times New Roman" SIZE="3">CRegisterDialog</font>类的说明中加入下面一行<font SIZE="3"><br>
      </font><font FACE="Times New Roman" SIZE="3">Cwnd* m_pParent;<br>
      </font>注意不要加在<font FACE="Times New Roman" SIZE="3">AFX</font>注释对中。</p>
      <p ALIGN="JUSTIFY">为实现<font FACE="Times New Roman" SIZE="3">IDC_ADD</font>按钮的功能,请按清单<font FACE="Times New Roman" SIZE="3">5.5</font>和清单<font FACE="Times New Roman" SIZE="3">5.6</font>修改程序。主要的改动是把原来由<font FACE="Times New Roman" SIZE="3">CRegiserView::OnEditRegister</font>完成的在视图中输出数据的任务交给<font FACE="Times New Roman" SIZE="3">CRegisterDialog::OnAdd</font>来完成。</p>
      </font>
    </blockquote>
    <p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </p>
    <p ALIGN="JUSTIFY">清单</font><font FACE="Times New Roman" SIZE="3">5.5 
    CRegisterView::OnEditRegister</font><font SIZE="3">函数</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">void CRegisterView::OnEditRegister() </p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">// TODO: Add your command handler code here</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CRegisterDialog dlg(this);</p>
    <p ALIGN="JUSTIFY">dlg.DoModal();</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -