主页 > 今日热点 > > 正文

MFC中模态对话框和非模态对话框的区别?

来源:原创 编辑:admin 2020-06-06 09:10 | 标签:|
浏览:

  模态对话框工作状态:当它获得焦点时,将垄断用户的输入,在完成本对话框之前,用户无法对本程序的其他部分进行操作。

  非模态对话框类似于WORD里的查找替换,就在应用程序打开非模态对话框的同时还可以切换到其他窗口进行操作。

  二者的类都派生于CDialog类,而CDialog类派生于CWnd类。

  区别:

  模态对话框使用CDialog::DoModal函数创建以及销毁。初始化消息WM_INITDIALOG,调用OnInitDialog初始化并显示,创建完毕后,DoModal启动消息循环。

  非模态对话框使用CDialog::Create实现。由于Create函数不会启动新的消息循环,对话框与应用程序共用一个消息循环,就不会独占用户输入,Create函数在对话框显示后就立即返回。DoModal是在对话框关闭后才返回。对话框关闭后说明对话框窗口的对象已经销毁,只剩下C++对象还没有释放,所以必须调用CWnd::DestoryWindows函数来关闭非模态对话框。

  MFC中有两种类型的对话框:模态对话框和非模态对话框。

  模态对话框是指当其显示时,程序会暂停执行,直到关闭e799bee5baa6e79fa5e98193e4b893e5b19e31333264643231这个模态对话框后,才能继续执行程序中其他任务。非模态对话框是指当其显示时,允许转而执行程序中其他任务,而不用关闭这个对话框。

  模态对话框的创建:

  创建模态对话框需要调用CDialog类的成员函数:DoModal,该函数的功能是创建并显示一个模态对话框,其返回值将作为CDialog类的另一个成员函数:EndDialog的参数,后者的功能是关闭模态对话框。一般显示模态对话框的实现代码如下:

  void CASCEView::OnDialog()

  {

  CASCEDlg dlg;

  dlg.DoModal();

  }

  非模态对话框的创建:

  要创建非模态对话框就需要利用CDialog类的Create成员函数,该函数有以下两种形式的声明:

  virtual BOOL Create(

  LPCTSTR lpszTemplateName,

  CWnd* pParentWnd=NULL

  );

  virtual BOOL Create(

  UINT nIDTemplate,

  CWnd* pParentWnd=NULL

  );

  模式对话框 是你必须先响应他先 不然你进不了主对话框

  非模式对话框 就没关系

  你和小小的狐狸这位朋友说的不是同一个东西。

  小小的狐狸说的是用MFC编程,你说的是SDK编程。

  CreateDialog是标zd准的API函数,要想用它的话就得舍弃MFC,因为参数不兼容...

  WindowProc是MFC包装过的函版数,没法向CreateDialog这个函数里套。就算类型强转编译成功了,运行时权一定非法。呵呵,好像MFC下还没法强转。

标签:

热门推荐

更多 >
  • 有关于读书方面的名言警句
    有关于读书方面的名言警句

    有关于读书方面的名言警句简介:1、生活在我们这个世界里,不读书就完整不能够了解人。高尔基2、读万卷书,行万里路。刘彝3、爱看书的青年,大年夜可以看看天职以外的书,即课

  • 百丽鞋业(武汉)有限公司
    百丽鞋业(武汉)有限公司

    百丽国际成立于1991年,年发卖额逾417亿人平易近币,是中国***的鞋服时髦品牌和批发团体、活动鞋服批发效劳商。同时也是adidas全球***的协作错误, Nike全球第二大年夜协作错误。百丽

今日热点苦参为何这么“苦”
今日热点70年代的衣服是甚么色彩
今日热点明日以后营地如何贡献 贡献值速
今日热点日冕之恋 第05集
今日热点青岛钢结构厂房
今日热点mbl帽子DESKAR
今日热点天津膜天膜科技有限公司-企业笼
今日热点股票面值和发行价的差别是甚么?