精华内容
下载资源
问答
  • 一、什么是模式对话框与非模式对话框: ...二、如何创建模式对话框 首先,我们创建一个基于对话框的MFC项目,将对话框ID修改为IDD_DOCTERDLG(当然,ID你可以修改成其他你喜欢的)。然后为对话框关联一个类,...

    一、什么是模式对话框与非模式对话框:

        简单的来说,模式对话框就是一种当子窗口未关闭时父窗口就无法被激活(也就是处于无法操作状态)的一种窗口。非模式对话框就是当子窗口未关闭时,父窗口依然能被操作的一种窗口。
    1
    二、如何创建模式对话框

      首先,我们创建一个基于对话框的MFC项目,将对话框ID修改为IDD_DOCTERDLG(当然,ID你可以修改成其他你喜欢的)。然后为对话框关联一个类,我们可以将类名取为CDoctor(看个人喜好,以后我都以doctor组合)。双击确定按钮进入编辑界面,编辑一个响应事件,创建模式对话框。
      ![双击进入编辑](https://img-blog.csdnimg.cn/20190117185142942.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyODYxMjA4,size_16,color_FFFFFF,t_70)
      ![在里面编辑代码
      CDoctor Doctor;
      Doctor.DoModal();](https://img-blog.csdnimg.cn/20190117185422707.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyODYxMjA4,size_16,color_FFFFFF,t_70)
      编译运行,点击确定按钮,我们可以发现会弹出另一个窗口,![可以发现父窗口标题栏都变为灰白色,表示不能对父窗口做任何操作](https://img-blog.csdnimg.cn/20190117190857378.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyODYxMjA4,size_16,color_FFFFFF,t_70)
    1
    2
    3
    4
    5
    6
    三、如何创建非模式对话框

       步骤同前面一样,先创建一个项目。先在主窗口头文件中引用doctor.h头文件,再在主对话框类中定义一个私有成员变量
       private:
               CDoctor m_Doctor;
       双击确定进入编辑响应事件
    m_Doctor.Create(IDD_DOCTORDLG, NULL);
        m_Doctor.ShowWindow(SW_SHOW);  编译运行,我们发现可以对父窗口做操作;不过,当我们关闭子窗口后再点击确定按钮,会有报错提示![在这里插入图片描述](https://img-blog.csdnimg.cn/20190117192644649.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyODYxMjA4,size_16,color_FFFFFF,t_70)为什么会这样,原因就在于我们关闭子对话框后子对话框只是隐藏了,并没有销毁由create方法创建的对话框资源,此时对象m_Doctor已经关联了对话框,所以产生了以上的错误。那么我们如何来解决这个错误呢。我们可以用IsWindow函数先判断一下m_Doctor有没有关联对话框,我们可以将响应事件的代码编辑为
            if (!IsWindow(m_Doctor.m_hWnd))
            {
                    m_Book.Create(IDD_DOCTORDLG, NULL);
            }
            m_Doctor.ShowWindow(SW_SHOW);编译运行,当关闭子窗口再次点击按钮就不会报错啦!

    模式对话框就不会出现这种问题,因为模式对话框只是定义了一个局部变量,当子窗口关闭之后就会调用析构函数销毁对话框资源。而非模式对话框最初定义的是一个私有成员。

    如果我们将代码修改为
    CDoctor Doctor;
    m_ Doctor.Create(IDD_DOCTORDLG, NULL);
    m_ Doctor.ShowWindow(SW_SHOW);
    编译之后,我们点击确定按钮,会发现子窗口出现之后立马就消失了,这是因为函数调用完之后局部对象作用域消失,释放对话

    原文:https://blog.csdn.net/qq_42861208/article/details/86530344 
     

    展开全文
  • 创建模式对话框

    2009-04-08 16:20:00
    这几天,开始学习VC编程,从创建一个对话框着手,经过琢磨,很快就掌握了其写法,具体过程如下:1、首先创建一个对话框资源,对该资源分配一个ID,例如:IDD_DIALOG_DEPARTMENT。2、在对话框资源编辑界面,点击右键...

    这几天,开始学习VC编程,从创建一个对话框着手,经过琢磨,很快就掌握了其写法,具体过程如下:

    1、首先创建一个对话框资源,对该资源分配一个ID,例如:IDD_DIALOG_DEPARTMENT。

    对话框界面截图

    2、在对话框资源编辑界面,点击右键,显示快捷菜单,选择“添加类”。

    类向导界面

    3、在“类向导”对话框中选择基类(通常选择CDialog),然后填入“类名”,其余默认即可,点击“完成”按钮。

    4、在菜单资源中增加一个菜单项,并给该菜单项分配一个ID,例如:ID_MENU_DEPARTMENT,用来打开该对话框。

    5、右击刚才新建的菜单项,选择快捷菜单中的“添加事件处理程序”。

    事件处理程序向导

    6、注意“类列表”的选择,这里应该选择你所希望处理该消息的类,一般是加载菜单的主窗体类。点击“添加编辑”。系统会自动在文件中添加代码。

    7、在事件处理代码中加入下列代码:

        CDepartment dptDlg;

        dptDlg.DoModal();

    8、在事件处理类的cpp或h文件中加入对Department.h的引用,如下:

        #include "department.h"

     

    上述过程后,系统就能顺利创建一个对话框了。

    展开全文
  • VC下创建一个新的窗口主要有两种模式,一种是创建后主窗口失去鼠标焦点,只有子窗口能获取到用户输入和用户操作,这种方式比如网页弹出警告框,我们必须先处理弹框内的操作才能再去控制浏览器,称之为有模式对话框;...

    VC下创建一个新的窗口主要有两种模式,一种是创建后主窗口失去鼠标焦点,只有子窗口能获取到用户输入和用户操作,这种方式比如网页弹出警告框,我们必须先处理弹框内的操作才能再去控制浏览器,称之为有模式对话框;另外一种是创建新窗口后主窗口与子窗口都能获取到用户焦点,这种对话框为无模式对话框。


    两者的创建方法都很简单,有一些不同的地方。我们打开VC6.0,用MFC Wizard创建一个简单的窗体程序。并创建两个窗体Dialog1(无模式对话框),Dialog2(有模式对话框)

    主窗体如下图


    点击无模式对话框,编辑代码如下:

    void CTDlg::OnClickOne() 
    {
    	// TODO: Add your control notification handler code here
    	CTDlg *newwindow = new CTDlg();
    	newwindow->Create(IDD_DIALOG1);
    	newwindow->ShowWindow(true);
    }
    代码很简单,可是我们要注意不能在这个函数里面进行资源的回收,否则程序会报错,因为毕竟newwindow已经在内存中运行了,而且在创建完毕后必须调用ShowWindow函数设置对话框显示才行,不然不会在屏幕中显示出来。

    资源的销毁回收需要在子对话框的关闭操作中去处理

    void CDialog1::OnClose() 
    {
    	// TODO: Add extra validation here
    	CDialog::OnOK();
    	DestroyWindow();
    }
    调用DestroyWindow函数实现资源回收,防止内存泄露

    创建有模式对话框更简单了,我们点击右侧的按钮输入下面代码

    void CTDlg::OnClickTwo() 
    {
    	// TODO: Add your control notification handler code here
    	CDialog2 dlg; 
    	int iRet=dlg.DoModal();
    }

    其中iRet可以获取对话框的返回状态,这钟有模式对话框不存在资源回收的问题,关闭对话框不用添加DestroyWindow的操作。但是有模式对话框用起来还是不方便,大多数应用程序应该还是偏爱无模式对话框。


    无模式对话框的资源回收也可以由主窗体来做,子窗体在适合的时候发送消息给主窗体,主窗体类注册一个消息处理函数,在函数中delete掉子窗体的对象。我没有写过这种方式销毁窗体对象的代码,网上也有很多这种例子,大家可以百度百度。

    展开全文
  • 最近在做一个WCF程序的时候,WCF程序老是弹出一个错误“当应用程序不是以UserInteractive 模式运行时显示模式对话框窗体是无效操作。请指定ServiceNotification或DefaultDesktopOnly样式,以显示服务应用程序发出...

    最近在做一个WCF程序的时候,WCF程序老是弹出一个错误“当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定ServiceNotification或DefaultDesktopOnly样式,以显示服务应用程序发出的通知”这个错误的警告,后来通过try catch语句来捕获到了这个错误,并找到了一些提示信息。

    很可能由 IncludeExceptionDetailInFaults=true 创建的 ExceptionDetail,其值为:
    System.InvalidOperationException: 当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。
    在 System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp)
    在 System.Windows.Forms.MessageBox.Show(String text)
    在 DataProvider.Utils.SQLServerHelper.Open() 位置 c:\Users\2457\Desktop\宁波市公路局\DataProvider(2015-10-26-最终版)\Utils\DataBaseSQLServerHelper.cs:行号 33
    在 DataProvider.Utils.SQLServerHelper..ctor(String connectStr) 位置 c:\Users\2457\Desktop\宁波市公路局\DataProvider(2015-10-26-最终版)\Utils\DataBaseSQLServerHelper.cs:行号 21
    在 DataProvider.Announcement..ctor() 位置 c:\Users\2457\Desktop\宁波市公路局\DataProvider(2015-10-26-最终版)\Announcement.cs:行号 21
    在 CreateDataProvider.Announcement()
    在 System.ServiceModel.Dispatcher.InstanceProvider.GetInstance(InstanceContext instanceContext, Message message)
    在 System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance(InstanceContext instanceContext, Message request)
    在 System.ServiceModel.InstanceContext.GetServiceInstance(Message message)
    在 System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
    在 System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)}

        看到这些堆栈的调用信息之后,System.Windows.Forms.MessageBox.ShowCore这个是问题的核心,也就是在WCF程序中是不能出现窗体的相关代码,比如MessageBox、OpenFileDialog等相关代码,如果出现这些信息,程序就会经常出现这个错误,应为我们的WCF程序是部署在IIS上面的,IIS是不允许这样处理的。然后再看看我们的代码。

    private void Open()
    {
      try
      {
        sqlConn.Open();//打开数据库
      }
      catch (Exception ex) 
      {
        //MessageBox.Show(ex.Message);
      }
    }

    然后去掉整个程序中出现的MessageBox就可以了。通过这个BUG至少可以得出两点结论:

       1  必须学会使用try catch去捕获未知的错误,然后去查找相关的堆栈信息,然后一步步根据提示来解决问题。

       2  WCF程序中必须不能使用任何和窗体相关的类或者代码。

    对于Web版本也会出现类似的问题(MessageBox。Show());

    展开全文
  • Delphi的对话框窗体

    2012-01-01 23:56:00
    “真正的对话框”意思是指用传统方法建立起来的对话框,它有资源编译器和资源脚本文件建立,在其他一些编程环境中其对话框就是用这种方式建立的,Delphi没有用传统的对话框)。 对话框有以下几种特征,这正是与正常...
  • JDialog窗体和JFrame窗体类似,在使用时也需要调用getContentPane()方法窗体转化为容器,然后在容器中设置窗体的特性3:JDialog有五种构造方法,可以用来指定标题,窗体,和模式对话框 package...
  • 让非模式对话框模拟模式对话框

    千次阅读 2009-11-30 16:46:00
     分析:由于用Java实现模式对话框需要JFrame父窗体对象,所以,只能在JAVA里构造一个非模式的对话框,给VC++调用。这样就要求在VC++里,将这个非模式对话框模拟成模式对话框。在VC++中,模式对话框和非模式对话框都...
  • 创建自定义对话框dialog,弹出模式窗口 用于创建自定义对话框的轻量级(约 4.5 KB)代码库。四种对话框可用: alerts(出错), warnings(警告), prompts(提示), success(成功)。利用一个简单的函数,你可以自定义对话框...
  • 模式对话框

    2013-09-03 19:23:21
    模式(modal)对话框,即模态对话框,是指用户在Windows应用程序的对话框中,想要对...模式对话框是指用户只能在当前的窗体中进行操作,在该窗体没有关闭之前不能切换到其他的窗体。非模式对话框是指当前的所操作的窗体
  • 模式对话框与非模式对话框的区别

    千次阅读 2018-09-28 14:56:47
    模式对话框就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话框也可以处理父窗口.例子:在桌面上右击我的电脑,选择属性,弹出系统属性窗口,点击下面的技术支持,弹出技术支持信息,现在再对系统属性窗口...
  • winform模式对话框和非模式对话框

    千次阅读 2009-07-23 15:34:00
    winform模式对话框和非模式对话框对于窗体的show和showdialog方法,大部人知道它们的区别,show是显示出窗体后,本项目中的其他窗体也能获得焦点,而showdialog则不然,只能当前窗体的激活状态。这只是一方面。另一...
  • 模式和非模式对话框

    2021-01-14 12:52:35
    模式和无模式对话框 可以使用类 CDialog 来管理两种类型的对话框: 1:模式对话框,要求用户在继续之前做出响应。 2:无模式对话框,可随时停留在屏幕上,但允许其他用户活动使用。 现在,通过程序来看一下什么是...
  • 当有弹出窗体时,主窗体也可以编辑,这样的窗体称为非模式窗体,又叫做无在弹出窗体时,弹出的窗体要以进行编辑,而主窗体不能被编辑,这样的窗体称为模式窗口,又叫模态窗口。当有弹出窗体时,主窗体也可以编辑,...
  • VC 创建对话框对象、显示对话框窗口、删除对话框对象,在一个模式对话框创建确认和取消按钮,以下代码为主要的代码:  void CDemoDlg::OnOK()  {   //获得并检验对话框数据   if (!UpdateData(TRUE))   {   ...
  • dll中创建模式对话框的问题

    千次阅读 2010-07-08 14:21:00
    今天在dll的输出函数中用非模态对话框遇到一个错误,File : dlgcore.cpp,line : 173。经过追踪调试,发现在非模态对话的创建过程中,在查找资源的时候出了问题。 HINSTANCE hInst = AfxFindResourceHandle...
  • 记事本打开查找对话框,按钮禁用不允许打开第2个,关闭对话框按钮又变为可用。本文解决用Toplevel窗体右上角X按钮关闭对话框时,使按钮又能使用的方法
  • 模式对话框弹出时能使背景窗体变灰,实现BS程序的美观效果
  • MFC创建模态对话框

    千次阅读 2019-06-04 14:15:08
    操作步骤 1、工程项目的创建(VS2013) ... 选择“基于对话框” 3、创建两个按钮(button) 说明 在“视图”中,可找到工具箱,其他选项没快捷方式也可这样查找 4、打开资源视图 5、在“资源...
  • 我们需要先创建一个窗体,格式如下: JFrame jf=new JFrame("窗体"); 这个时候运行程序是什么都看不见的,那我们就要设置窗体可见: jf.setVisible(true); 这个时候发现窗体是左上角很小很小几乎看不见的一条横杠...
  • 用vc++实现非模式对话框创建与销毁,并实现对话框收缩与扩展的功能
  • 对话框与多窗体设计

    2020-09-15 17:03:37
    对话框与多窗体设计 本章介绍对话框和多窗体设计,调用方式,数据传递等问题 - Qt提供的标准对话框的式样 - 自定义对话框的设计和调用 - 在一个应用程序中如何设计多种窗体,基于QDialog, QWidget, QMainWindow创建...
  • 本文介绍用Toplevel类实现“登录和注册”这样的模式对话框和文本编辑器“查找和替换”这样的非模式对话框的基本方法
  • 模式对话框创建方法:1、先添加一个对话框资源,然后随便加些控件,把资源名命好。2、在其中一个菜单选项里面,用DialogBox这个函数进行创建。3、你要有一个模式对话框专用的回调函数,我这里的是:4、模式对话框就...
  • 创建模态对话框 CDialog::DoModal virtual int DoModal(); 返回值: 整数值,指定了传递给CDialog::EndDialog 的nResult参数值。该函数用于关闭对话框。如果函数不能创建对话框,则返回-1;如果出现其它...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,494
精华内容 6,997
关键字:

创建模式对话框窗体的方法是