当前位置: 首页 > wzjs >正文

深圳网站建设设计科技有限公司电脑优化大师

深圳网站建设设计科技有限公司,电脑优化大师,品牌传播策略,深圳网站建设加盟MFC多文档程序,从菜单关闭一个文档和直接点击右上角的x效果不同 若文档内容有修改,则前者会询问用户,是否保存修改;后者不保存修改直接关闭。 原因在于,从菜单关闭时,调用OnClose,一定会调用Sa…

MFC多文档程序,从菜单关闭一个文档和直接点击右上角的x效果不同

若文档内容有修改,则前者会询问用户,是否保存修改;后者不保存修改直接关闭。
原因在于,从菜单关闭时,调用OnClose,一定会调用SaveModified(),其源码如下

/
// Standard file menu commandsvoid CDocument::OnFileClose()
{if (!SaveModified())return;// shut it downOnCloseDocument();// this should destroy the document
}

而点击x关闭时,CanCloseFrame()函数会判断是否保存文档,其源码如下:

BOOL CDocument::CanCloseFrame(CFrameWnd* pFrameArg)// permission to close all views using this frame//  (at least one of our views must be in this frame)
{ASSERT_VALID(pFrameArg);UNUSED(pFrameArg);   // unused in release buildsPOSITION pos = GetFirstViewPosition();while (pos != NULL){CView* pView = GetNextView(pos);ASSERT_VALID(pView);CFrameWnd* pFrame = pView->GetParentFrame();// assume frameless views are ok to closeif (pFrame != NULL){// assumes 1 document per frameASSERT_VALID(pFrame);if (pFrame->m_nWindow > 0)return TRUE;        // more than one frame refering to us}}// otherwise only one frame that we know aboutreturn SaveModified();
}

可见,仅当父框架的窗口为0时才会执行SaveModified()语句,其余情况都只会返回TRUE。在使用多文档编程时,要注意为了文档的安全,在自己重载的CanCloseFrame()中加上SaveModified()语句。

如何默默保存,不询问用户?

CDocument::SaveModified()的实现如下:

BOOL CDocument::SaveModified()
{if (!IsModified())return TRUE;        // ok to continue// get name/title of documentCString name;if (m_strPathName.IsEmpty()){// get name based on captionname = m_strTitle;if (name.IsEmpty())VERIFY(name.LoadString(AFX_IDS_UNTITLED));}else{// get name based on file title of path namename = m_strPathName;if (afxData.bMarked4){AfxGetFileTitle(m_strPathName, name.GetBuffer(_MAX_PATH), _MAX_PATH);name.ReleaseBuffer();}}CString prompt;AfxFormatString1(prompt, AFX_IDP_ASK_TO_SAVE, name);switch (AfxMessageBox(prompt, MB_YESNOCANCEL, AFX_IDP_ASK_TO_SAVE)){case IDCANCEL:return FALSE;       // don't continuecase IDYES:// If so, either Save or Update, as appropriateif (!DoFileSave())return FALSE;       // don't continuebreak;case IDNO:// If not saving changes, revert the documentbreak;default:ASSERT(FALSE);break;}return TRUE;    // keep going
}

可见,真正执行“保存”动作的是DoFileSave(),因此开发者可以考虑在用户进行某些动作时执行该函数,默默保存当前编辑结果,而无需弹出对话框让用户确认。

http://www.dtcms.com/wzjs/453444.html

相关文章:

  • 做抽奖网站违法吗友链申请
  • 太原网站建设哪家便宜互联网广告投放公司
  • wordpress content.php页面优化的方法
  • Python建网站的步骤上海有哪些优化网站推广公司
  • 政府英文网站建设外包服务方案线下推广渠道有哪些方式
  • 做网站项目收获百度入口的链接
  • 做教育网站的公司线上营销手段
  • 个人博客模板 wordpress安徽seo优化
  • 网站建设宣传单新产品推广方案策划
  • 郑州市网站建设软文推广代理
  • 做网站容易还是app容易如何推广产品
  • 免费做自我介绍网站长春网站建设策划方案
  • 厦门本地企业网站建设站长统计app下载免费
  • 那个装修公司的网站做的好怎么做好网络营销推广
  • 德阳网站建设 选哪家好百度网页版登录入口
  • 百度搜索公司网站展现图片手机如何制作一个网页链接
  • 邵阳做网站站长工具seo综合查询问题
  • 金牛区建设审批网站网络营销策划方案800字
  • 做网站好不好优化建议
  • html网页制作平台福州seo按天收费
  • 内蒙古旅游攻略周口搜索引擎优化
  • 买公司 网站建设百度代做seo排名
  • 做海鲜哪个b2b网站好点semantic
  • 加盟网站建设的内容网络商城应该如何推广
  • 济南网站建设的公司苏州网站建设书生
  • 国内用python做的网站浅谈一下网络营销的几个误区
  • 做电池的外贸网站自助快速建站
  • 网站简单布局图夫唯老师seo
  • 成都网站搜索排名优化公司网络营销内容
  • 网站建设案例展示软文经典案例