📄 chap5_5.htm
字号:
<p ALIGN="JUSTIFY">SetModified(TRUE); //</font><font SIZE="3">使</font><font FACE="Times New Roman" SIZE="3">Apply</font><font SIZE="3">按钮允许</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">UpdateData(TRUE);</b></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"></font><font SIZE="3">当页中的编辑框的内容被改变时,页会收到</font><font FACE="Times New Roman" SIZE="3">EN_CHANGE</font><font SIZE="3">消息,这将导致</font><font FACE="Times New Roman" SIZE="3">OnChangeName</font><font SIZE="3">或</font><font FACE="Times New Roman" SIZE="3">OnChangeUnit</font><font SIZE="3">被调用。对该消息的处理是使</font><font FACE="Times New Roman" SIZE="3">Apply</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"></p>
<p ALIGN="JUSTIFY"></font><b><font SIZE="3"> </p>
<p ALIGN="JUSTIFY">清单</font><font FACE="Times New Roman" SIZE="3">5.14 CRegisterSheet</font><font SIZE="3">类的部分代码</font></b><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">//</font><font SIZE="3">文件</font><font FACE="Times New Roman" SIZE="3">RegisterSheet.h</p>
<p ALIGN="JUSTIFY">class CRegisterSheet : public CPropertySheet</p>
<p ALIGN="JUSTIFY">{</p>
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">. . . . . .</b></p>
<p ALIGN="JUSTIFY">// Construction</p>
<p ALIGN="JUSTIFY">public:</p>
<p ALIGN="JUSTIFY">CRegisterSheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT
iSelectPage = 0);</p>
<p ALIGN="JUSTIFY">CRegisterSheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT
iSelectPage = 0);</p>
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">public:</p>
<p ALIGN="JUSTIFY">CPersonalPage m_PersonalPage;</p>
<p ALIGN="JUSTIFY">CUnitPage m_UnitPage;</p>
<p ALIGN="JUSTIFY">. . . . . .</b></p>
<p ALIGN="JUSTIFY">protected:</p>
<p ALIGN="JUSTIFY">//{{AFX_MSG(CRegisterSheet)</p>
<p ALIGN="JUSTIFY">// NOTE - the ClassWizard will add and remove member functions here.</p>
<p ALIGN="JUSTIFY">//}}AFX_MSG</p>
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">afx_msg void OnApplyNow();</b></p>
<p ALIGN="JUSTIFY">DECLARE_MESSAGE_MAP() </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">//</font><font SIZE="3">文件</font><font FACE="Times New Roman" SIZE="3">RegisterSheet.cpp</p>
<p ALIGN="JUSTIFY">#include "stdafx.h"</p>
<p ALIGN="JUSTIFY">#include "Register.h"</p>
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">#include "PersonalPage.h"</p>
<p ALIGN="JUSTIFY">#include "UnitPage.h"</b></p>
<p ALIGN="JUSTIFY">#include "RegisterSheet.h"</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">CRegisterSheet::CRegisterSheet(LPCTSTR pszCaption, CWnd* pParentWnd,
UINT iSelectPage)</p>
<p ALIGN="JUSTIFY">:CPropertySheet(pszCaption, pParentWnd, iSelectPage)</p>
<p ALIGN="JUSTIFY">{</p>
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">AddPage(&m_PersonalPage); //</font><font SIZE="3">向标签对话框中添加页</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">AddPage(&m_UnitPage);</b></p>
<p ALIGN="JUSTIFY">}</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">BEGIN_MESSAGE_MAP(CRegisterSheet, CPropertySheet)</p>
<p ALIGN="JUSTIFY">//{{AFX_MSG_MAP(CRegisterSheet)</p>
<p ALIGN="JUSTIFY">// NOTE - the ClassWizard will add and remove mapping macros here.</p>
<p ALIGN="JUSTIFY">//}}AFX_MSG_MAP</p>
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">ON_BN_CLICKED(ID_APPLY_NOW, OnApplyNow)</b></p>
<p ALIGN="JUSTIFY">END_MESSAGE_MAP()</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">void CRegisterSheet::OnApplyNow()</p>
<p ALIGN="JUSTIFY">{</p>
<p ALIGN="JUSTIFY">CFrameWnd* pFrameWnd = (CFrameWnd*) AfxGetMainWnd();</p>
<p ALIGN="JUSTIFY">//</font><font SIZE="3">获取指向视图的指针</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">CView* pView = pFrameWnd->GetActiveFrame()->GetActiveView();</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">pView->SendMessage(WM_USER_OUTPUT, (WPARAM)this);</p>
<p ALIGN="JUSTIFY">m_PersonalPage.SetModified(FALSE);</p>
<p ALIGN="JUSTIFY">m_UnitPage.SetModified(FALSE); //</font><font SIZE="3">使</font><font FACE="Times New Roman" SIZE="3">Apply</font><font SIZE="3">按钮禁止</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">}</b></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">CRegisterSheet</font><font SIZE="3">类内嵌入了</font><font FACE="Times New Roman" SIZE="3">CPersonalPage</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">CUnitPage</font><font SIZE="3">对象,在该类的构造函数中调用</font><font FACE="Times New Roman" SIZE="3">CPropertySheet::AddPage</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">OK</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">Cancel</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">Apply</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">IDOK</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">IDCANCEL</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">ID_APPLY_NOW</font><font SIZE="3">。在按下</font><font FACE="Times New Roman" SIZE="3">Apply</font><font SIZE="3">按钮后,</font><font FACE="Times New Roman" SIZE="3">CRegisterSheet</font><font SIZE="3">对象应该作出响应,由于</font><font FACE="Times New Roman" SIZE="3">ClassWizard</font><font SIZE="3">不能为</font><font FACE="Times New Roman" SIZE="3">CRegisterSheet</font><font SIZE="3">类提供</font><font FACE="Times New Roman" SIZE="3">Apply</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">OnApplyNow</font><font SIZE="3">,并在消息映射表中手工加入</font><font FACE="Times New Roman" SIZE="3">ID_APPLY_NOW</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">ON_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">OnApplyNow</font><font SIZE="3">用</font><font FACE="Times New Roman" SIZE="3">CWnd::SendMessage</font><font SIZE="3">向视图发送用户定义消息</font><font FACE="Times New Roman" SIZE="3">WM_USER_OUTPUT</font><font SIZE="3">,并调用</font><font FACE="Times New Roman" SIZE="3">CPropertyPage::SetModified(FALSE)</font><font SIZE="3">来禁止</font><font FACE="Times New Roman" SIZE="3">Apply</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">wParam</font><font SIZE="3">参数一并发送,这是因为视图对象需要指向</font><font FACE="Times New Roman" SIZE="3">CRegisterSheet</font><font SIZE="3">对象的指针来访问该对象。该函数演示了如何在程序的任意地方获得当前活动视图的方法:首先,调用</font><font FACE="Times New Roman" SIZE="3">AfxGetMainWnd()</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">CFrameWnd</font><font SIZE="3">类型,接着调用</font><font FACE="Times New Roman" SIZE="3">CFrameWnd::GetActiveFrame</font><font SIZE="3">返回当前活动的框架窗口的一个</font><font FACE="Times New Roman" SIZE="3">CFrameWnd</font><font SIZE="3">型指针,最后调用</font><font FACE="Times New Roman" SIZE="3">CFrameWnd::GetActiveView</font><font SIZE="3">返回当前活动视图的一个</font><font FACE="Times New Roman" SIZE="3">Cview</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">OnApplyNow</font><font SIZE="3">中主要调用了下列函数:</p>
<blockquote>
<blockquote>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">CWnd* AfxGetMainWnd( );<br>
</font><font SIZE="3">该函数返回一个指向程序的主窗口</font><font FACE="Times New Roman" SIZE="3">CWnd</font><font SIZE="3">指针。程序的主窗口可以是一个框架窗口,也可以是一个对话框。</p>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">virtual CFrameWnd*
GetActiveFrame( );<br>
</font><font SIZE="3">函数返回一个</font><font FACE="Times New Roman" SIZE="3">CFrameWnd</font><font SIZE="3">型的指针。如果是</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">(多文档界面)程序,则该函数将返回当前活动的子框架窗口,如果是</font><font FACE="Times New Roman" SIZE="3">SDI</font><font SIZE="3">(单文档界面)程序,该函数将返回主框架窗口本身。</p>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">CView* GetActiveView( )
const;<br>
</font><font SIZE="3">返回一个指向当前活动视图的</font><font FACE="Times New Roman" SIZE="3">Cview</font><font SIZE="3">型指针。</p>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">LRESULT SendMessage( UINT
message, WPARAM wParam = 0, LPARAM lParam = 0 );<br>
</font><font SIZE="3">用于向本窗口发送消息。</font><font FACE="Times New Roman" SIZE="3">SendMessage</font><font SIZE="3">会直接调用发送消息的处理函数,直到发送消息被处理完后该函数才返回。参数</font><font FACE="Times New Roman" SIZE="3">message</font><font SIZE="3">说明了要发送的消息,</font><font FACE="Times New Roman" SIZE="3">wParam</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">lParam</font><font SIZE="3">则提供了消息的附加信息。</p>
</font>
</blockquote>
</blockquote>
<p><b><font SIZE="3"> </p>
<p ALIGN="JUSTIFY">清单</font><font FACE="Times New Roman" SIZE="3">5.15 CRegisterView</font><font SIZE="3">类的部分代码</font></b><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">//</font><font SIZE="3">文件</font><font FACE="Times New Roman" SIZE="3">RegisterView.h</p>
<p ALIGN="JUSTIFY">class CRegisterView : public CEditView</p>
<p ALIGN="JUSTIFY">{</p>
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">. . . . . .</b></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -