📄 chap5_5.htm
字号:
<tr>
<td WIDTH="33%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">控件类型</span></b></td>
<td WIDTH="33%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">控件ID</span></b></td>
<td WIDTH="33%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">控件标题</span></b></td>
</tr>
<tr>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">静态正文</span></td>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">缺省</span></td>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">姓名:</span></td>
</tr>
<tr>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">编辑框</span></td>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">IDC_NAME</span></td>
<td WIDTH="33%"><span style="font-size: 9pt"> </span></td>
</tr>
</table>
<p><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">用ClassWizard为模板IDD_PERSONAL创建CPropertyPage类的派生类,类名为CPersonalPage。在该类中为控件IDC_NAME加入对应的成员变量,变量名为m_strName,类型为CString。为控件IDC_NAME加入EN_CHANGE消息处理函数OnChangeName,当编辑框的内容被改变时,控件会向对话框发出EN_CHANGE消息。在OnChangeName中,应该使Apply按钮允许。</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">仿照步2,为标签式对话框的第二页创建对话框模板。指定其ID为IDD_UNIT,标题为“单位情况”。在模板中加入的控件如图5.11和表5.7所示。</span></p>
<b>
</blockquote>
</blockquote>
<p><span style="font-size: 9pt"> </span></p>
<p ALIGN="CENTER"><span style="font-size: 9pt">表5.7</span></b></p>
<table BORDER="1" CELLSPACING="1" CELLPADDING="1" WIDTH="579">
<tr>
<td WIDTH="33%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">控件类型</span></b></td>
<td WIDTH="33%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">控件ID</span></b></td>
<td WIDTH="33%"><b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">控件标题</span></b></td>
</tr>
<tr>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">静态正文</span></td>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">缺省</span></td>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">工作单位:</span></td>
</tr>
<tr>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">编辑框</span></td>
<td WIDTH="33%"><p ALIGN="JUSTIFY"><span style="font-size: 9pt">IDC_UNIT</span></td>
<td WIDTH="33%"><span style="font-size: 9pt"> </span></td>
</tr>
</table>
<p><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">用ClassWizard为模板IDD_UNIT创建CPropertyPage类的派生类,类名为CUnitPage。在该类中为控件IDC_UNIT加入对应的成员变量,变量名为m_strUnit,类型为CString。为控件IDC_UNIT加入EN_CHANGE消息处理函数OnChangeUnit。</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">用ClassWizard创建一个CPropertySheet的派生类,类名为CRegisterSheet。</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">在CRegisterApp类的头文件的开头加入下面一行<br>
<b>#define WM_USER_OUTPUT (WM_USER+200)<br>
</b>WM_USER_OUTPUT不是标准的Windows消息,而是一个用户定义消息。在本例中,当标签式对话框的Apply按钮被按下后,程序会向编辑视图发送该消息,编辑视图对应的消息处理函数应该输出对话框的数据。用户定义消息的编码范围是WM_USER—0x7FFF。</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">请读者按清单5.13、5.14、5.15修改程序,限于篇幅,这里仅列出了需要修改的部分源代码。</span></p>
</blockquote>
</blockquote>
<p><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">清单5.13 CPersonalPage类和CUnitPage类的部分代码</span></b></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">void CPersonalPage::OnChangeName() </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">// TODO: Add your control notification
handler code here</span></p>
<p><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">SetModified(TRUE); //使Apply按钮允许</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">UpdateData(TRUE);</span></b></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">void CUnitPage::OnChangeUnit() </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">// TODO: Add your control notification
handler code here</span></p>
<p><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">SetModified(TRUE); //使Apply按钮允许</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">UpdateData(TRUE);</span></b></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">当页中的编辑框的内容被改变时,页会收到EN_CHANGE消息,这将导致OnChangeName或OnChangeUnit被调用。对该消息的处理是使Apply按钮允许并调用UpdateData(TRUE)更新数据。</span></p>
<p ALIGN="JUSTIFY"><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">清单5.14 CRegisterSheet类的部分代码</span></b></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">//文件RegisterSheet.h</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">class CRegisterSheet : public
CPropertySheet</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
<p><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">. . . . . .</span></b></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">// Construction</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">public:</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">CRegisterSheet(UINT nIDCaption, CWnd*
pParentWnd = NULL, UINT iSelectPage = 0);</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">CRegisterSheet(LPCTSTR pszCaption, CWnd*
pParentWnd = NULL, UINT iSelectPage = 0);</span></p>
<p><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">public:</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">CPersonalPage m_PersonalPage;</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">CUnitPage m_UnitPage;</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">. . . . . .</span></b></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">protected:</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">//{{AFX_MSG(CRegisterSheet)</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">// NOTE - the ClassWizard will add and
remove member functions here.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">//}}AFX_MSG</span></p>
<p><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">afx_msg void OnApplyNow();</span></b></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">DECLARE_MESSAGE_MAP() </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">};</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">//文件RegisterSheet.cpp</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include "stdafx.h"</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include "Register.h"</span></p>
<p><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include "PersonalPage.h"</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include "UnitPage.h"</span></b></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include "RegisterSheet.h"</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">CRegisterSheet::CRegisterSheet(LPCTSTR
pszCaption, CWnd* pParentWnd, UINT iSelectPage)</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">:CPropertySheet(pszCaption, pParentWnd,
iSelectPage)</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
<p><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">AddPage(&m_PersonalPage); //向标签对话框中添加页</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">AddPage(&m_UnitPage);</span></b></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">BEGIN_MESSAGE_MAP(CRegisterSheet,
CPropertySheet)</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">//{{AFX_MSG_MAP(CRegisterSheet)</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">// NOTE - the ClassWizard will add and
remove mapping macros here.</span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">//}}AFX_MSG_MAP</span></p>
<p><b><span style="font-size: 9pt"> </span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">ON_BN_CLICKED(ID_APPLY_NOW, OnApplyNow)</span></b></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">END_MESSAGE_MAP()</span></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -