vc6.0++ 技术内幕第四版学习笔记(15章,文档与视图的分离)

简单执行过程:

文档-视图事件发生次序

Cex15aView视图一开始就和IDD = IDD_EX15A_FORM相连,无需设置

文档CEx15aDoc中保存的有CStudent的数据(只是在CEx15aDoc中增加了CStudent 类型的成员变量)

 

Cex15aView:OnInitialUpdata

调用自己编写的函数UpdateControlFromDoc()

UpdateControlFromDoc:

从得到当前文档CEx15aDoc

将当前文档中m_student对象的属性值付给窗口中和EDIT控件相关的成员变量m_strNmae和m_nGrade。

UpdateData(FALSE);//设置数据更新

1.ON_COMMAND 和ON_UPDATE_COMMAND_UI的区别

参考文献:http://blog.163.com/chinabcb/blog/static/2997346200871735250792/

ON_COMMAND 映射的作用为在用户选择该菜单时调用指定的处理函数。如:ON_COMMAND(IDM_COMMAND1, OnCommand1)会使菜单被选择时调用OnCommand1成员函数。
ON_UPDATE_COMMAND_UI(IDM_COMMAND1, OnUpdateCommand1) 映射的作用是在菜单被显示时通过调用指定的函数来进行确定其状态。在这个处理函数中可以设置菜单的允许/禁止状态,其显示字符串是什么,是否在前面打钩。函数的参数为CCmdUI* pCmdUI,CCmdUI是MFC专门为更新命令提供的一个类,可以调用

 

Enable 设置允许/禁止状态
SetCheck 设置是否在前面打钩
SetText 设置文字

 

讲解一个例子:在CView派生类中有一个变量m_fSelected,并且在视中处理两个菜单的消息,当IDM_COMMAND1被选时,对m_fSelected进行逻辑非操作,当IDM_COMMAND2被选中时出一提示;同时IDM_COMMAND1根据m_fSelected决定菜单显示的文字和是否在前面打上检查符号,IDM_COMMAND2根据m_fSelected的值决定菜单的允许/禁止状态。
void CMenuDView::OnCommand1()
{
m_fSelected=!m_fSelected;
TRACE("command1 selected\n");
}
void CMenuDView::OnUpdateCommand1(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_fSelected);//决定检查状态
pCmdUI->SetText(m_fSelected?"当前被选中":"当前未被选中");//决定所显示的文字
}
void CMenuDView::OnUpdateCommand2(CCmdUI* pCmdUI)
{//决定是否为允许
pCmdUI->Enable(m_fSelected);
}
void CMenuDView::OnCommand2()
{//选中时给出提示
AfxMessageBox("你选了command2");
}

 

2.DECLARE_DYNAMIC

参考资料:http://blog.csdn.net/52yyp/archive/2009/04/02/4042942.aspx 没有看懂

原文地址:https://www.cnblogs.com/meetcomet/p/1586732.html