📄 chap5_3.htm
字号:
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </p>
<p ALIGN="JUSTIFY">清单</font><font FACE="Times New Roman" SIZE="3">5.6 CRegisterDialog</font><font SIZE="3">类的部分源代码</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">CRegisterDialog::CRegisterDialog(CWnd* pParent /*=NULL*/)</p>
<p ALIGN="JUSTIFY">: CDialog(CRegisterDialog::IDD, pParent)</p>
<p ALIGN="JUSTIFY">{</p>
<p ALIGN="JUSTIFY">//{{AFX_DATA_INIT(CRegisterDialog)</p>
<p ALIGN="JUSTIFY">. . . . . .</p>
<p ALIGN="JUSTIFY">//}}AFX_DATA_INIT</p>
<p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">m_pParent=pParent;</p>
<p ALIGN="JUSTIFY">}</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">void CRegisterDialog::OnAdd() </p>
<p ALIGN="JUSTIFY">{</p>
<p ALIGN="JUSTIFY">// TODO: Add your control notification 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">//</font><font SIZE="3">更新数据</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">UpdateData(TRUE);</p>
<p ALIGN="JUSTIFY">//</font><font SIZE="3">检查数据是否有效</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">if(m_strName=="" || m_nSex<0 || m_nWork<0 ||
m_strUnit=="" </p>
<p ALIGN="JUSTIFY">|| m_strKind=="" || m_strIncome=="")</p>
<p ALIGN="JUSTIFY">{</p>
<p ALIGN="JUSTIFY">AfxMessageBox("</font><font SIZE="3">请输入有效数据</font><font FACE="Times New Roman" SIZE="3">");</p>
<p ALIGN="JUSTIFY">return;</p>
<p ALIGN="JUSTIFY">}</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></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">//</font><font SIZE="3">获取编辑正文</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">m_pParent->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+="\r\n";</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">str+="</font><font SIZE="3">姓名</font><font FACE="Times New Roman" SIZE="3">:";</p>
<p ALIGN="JUSTIFY">str+=m_strName;</p>
<p ALIGN="JUSTIFY">str+="\r\n";</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">str+="</font><font SIZE="3">性别</font><font FACE="Times New Roman" SIZE="3">:";</p>
<p ALIGN="JUSTIFY">str+=m_nSex?"</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">str+="\r\n";</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">str+="</font><font SIZE="3">年龄</font><font FACE="Times New Roman" SIZE="3">:";</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">//</font><font SIZE="3">将数据格式输出到字符串对象中</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">str1.Format("%d",m_nAge);</p>
<p ALIGN="JUSTIFY">str+=str1;</p>
<p ALIGN="JUSTIFY">str+="\r\n";</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">str+="</font><font SIZE="3">婚否</font><font FACE="Times New Roman" SIZE="3">:";</p>
<p ALIGN="JUSTIFY">str+=m_bMarried?"</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">str+="\r\n";</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">str+="</font><font SIZE="3">就业状况</font><font FACE="Times New Roman" SIZE="3">:";</p>
<p ALIGN="JUSTIFY">str+=m_nWork?"</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">str+="\r\n";</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">str+="</font><font SIZE="3">工作单位</font><font FACE="Times New Roman" SIZE="3">:";</p>
<p ALIGN="JUSTIFY">str+=m_strUnit;</p>
<p ALIGN="JUSTIFY">str+="\r\n";</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">str+="</font><font SIZE="3">单位性质</font><font FACE="Times New Roman" SIZE="3">:";</p>
<p ALIGN="JUSTIFY">str+=m_strKind;</p>
<p ALIGN="JUSTIFY">str+="\r\n";</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">str+="</font><font SIZE="3">工资收入</font><font FACE="Times New Roman" SIZE="3">:";</p>
<p ALIGN="JUSTIFY">str+=m_strIncome;</p>
<p ALIGN="JUSTIFY">str+="\r\n";</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">m_pParent->SetWindowText(str);</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">}</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">CRegisterDialog</font><font SIZE="3">的构造函数有一个参数</font><font FACE="Times New Roman" SIZE="3">pParent</font><font SIZE="3">,该参数是一个指向</font><font FACE="Times New Roman" SIZE="3">CWnd</font><font SIZE="3">对象的指针,用于指定对话框的父窗口或拥有者窗口。在</font><font FACE="Times New Roman" SIZE="3">CRegisterView:: 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">this</font><font SIZE="3">参数,</font><font FACE="Times New Roman" SIZE="3">this</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">CRegisterDialog</font><font SIZE="3">的构造函数时,</font><font FACE="Times New Roman" SIZE="3">this</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">m_pParent</font><font SIZE="3">。</font><font FACE="Times New Roman" SIZE="3">OnAdd</font><font SIZE="3">函数可利用</font><font FACE="Times New Roman" SIZE="3">m_pParent</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"></p>
</font><font SIZE="3"><div align="center"><center><table border="2" cellpadding="2" cellspacing="0" width="90%" bgcolor="#99B7EE">
<tr>
<td width="100%">提示:术语父窗口</font><font FACE="Times New Roman" SIZE="3">(Parent)</font><font SIZE="3">是相对于子窗口而言。若某一个窗口拥有一个子窗口</font><font FACE="Times New Roman" SIZE="3">(Child)</font><font SIZE="3">,则该窗口就被称为子窗口的父窗口。子窗口就是具有</font><font FACE="Times New Roman" SIZE="3">WS_CHILD</font><font SIZE="3">风格的窗口,子窗口依赖于父窗口且完全被限制在父窗口内部。拥有者窗口</font><font FACE="Times New Roman" SIZE="3">(owner)</font><font SIZE="3">相对于被拥有者窗口而言。若某一个窗口拥有一个非子窗口,则该窗口被称为拥有者窗口。被拥有窗口</font><font FACE="Times New Roman" SIZE="3">(owned)</font><font SIZE="3">不具有</font><font FACE="Times New Roman" SIZE="3">WS_CHILD</font><font SIZE="3">风格,可在屏幕上任意移动。</font></td>
</tr>
</table>
</center></div><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY"></font><font SIZE="3">当用户用鼠标点击</font><font FACE="Times New Roman" SIZE="3">IDC_ADD</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">CRegisterDialog::OnAdd</font><font SIZE="3">将被调用。在</font><font FACE="Times New Roman" SIZE="3">OnAdd</font><font SIZE="3">中,首先调用了</font><font FACE="Times New Roman" SIZE="3">UpdateData(TRUE)</font><font SIZE="3">以把数据从控件传给对话框的数据成员变量。然后,程序要对数据的有效性进行检查,如果输入的数据不完全有效,则会显示一个消息对话框,提示用户输入有效的数据。接下来进行的工作是在视图中输出数据,这部分代码与清单</font><font FACE="Times New Roman" SIZE="3">5.4</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"></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">MFC</font><font SIZE="3">提供的消息映射宏</font><font FACE="Times New Roman" SIZE="3">ON_CONTROL_RANGE</font><font SIZE="3">可以避免这种麻烦,该映射宏把多个
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -