精华内容
下载资源
问答
  • 二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。    详细如下:    非模态(Modeless)对话框,又叫做无模式对话框,当用户打开非模态对话框时,依然可以操作其他窗口。例如...

    以下内容部分摘自百度百科;

     

      Windows应用程序中,对话框分为两种。另一种是模态对话框。二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。

     

          详细如下:

     

          非模态(Modeless)对话框,又叫做无模式对话框,当用户打开非模态对话框时,依然可以操作其他窗口。例如,Windows提供的记事本程序中的【查找】对话框。【查找】对话框不会垄断用户的输入,打开【查找】对话框后,仍可与其他用户界面对象进行交互。用户可以一边查找,一边修改文章,这样就大大方便了使用。

     

         而非模态对话框的显示方式是调用两个函数Creat()和ShowWindow()


           模态对话框,又叫做模式对话框,是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。

     

            模态对话框的显示方式是调用DoModal()

     

     

    记录完毕

    --AmL.tu_s 2011.05.29

    展开全文
  • windows程序设计中,主窗口上的控件与对话框上的控件的区别主要表现为:主窗口的控件需要调用 CreateWindow函数显示出来,但对话框上的控件是不需要调用CreateWindow来显示的,只需要画在对话框上就行。 比如在...

    在windows程序设计中,主窗口上的控件与对话框上的控件的区别主要表现为:主窗口的控件需要调用

    CreateWindow函数显示出来,但对话框上的控件是不需要调用CreateWindow来显示的,只需要画在对话框上就行。
    比如在windows程序设计中的BTNLOOK.c程序中就是用了

    case   WM_CREATE :

    cxChar = LOWORD(GetDialogBaseUnits ()) ;

    cyChar = HIWORD (GetDialogBaseUnits()) ;

    for (i = 0 ; i <NUM ; i++)

    hwndButton[i]=CreateWindow ( TEXT("button"),button[i].szText,WS_CHILD | WS_VISIBLE| button[i].iStyle,cxChar, cyChar * (1 + 2 * i),20 * cxChar, 7 * cyChar /4,hwnd, (HMENU) i,((LPCREATESTRUCT) lParam)->hInstance, NULL) ;

     return 0 ;

    这么一段代码,建立了一列子窗口控件,其中最重要的就是用了CreateWindow函数,之后的几个程序,凡是在主窗口上建立控件的哪个也离不了CreateWindow函数,反观在对话框那一章里,只是把控件画在了对话框上,便能在运行的时候显示出来


    这个是主窗口上的控件,它们需要CreatWindows才能显示


    这个是对话框上的控件,它们只要画出来既可,不需要CreateWindows来显示

    展开全文
  • 一、区别 Windows对话框分为两类:模态对话框和非模态对话框。  (1) 模态对话框是这样的对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应...二、对话框的

    一、区别

    Windows对话框分为两类:模态对话框非模态对话框

            (1) 模态对话框是这样的对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。

           (2) 非模态对话框则是,它弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等

    二、对话框的弹出原理

            打开Xxxxxxxx.cpp文件,可以看到CXxxxxxxApp类有个InitInstance()函数,InitInstance()函数的后半部分有一段代码就是定义对话框对象并弹出对话框的:

    CXxxxxxxxDlg dlg;     // 定义对话框类CXxxxxxxxDlg的对象dlg   
    m_pMainWnd = &dlg;       // 将dlg设为主窗口   
    INT_PTR nResponse = dlg.DoModal();   // 弹出对话框dlg,并将DoModal函数的返回值(退出时点击按钮的ID)赋值给nResponse   
    if (nResponse == IDOK)               // 判断返回值是否为OK按钮(其ID为IDOK)   
    {   
        // TODO: Place code here to handle when the dialog is   
        //  dismissed with OK   
    }   
    else if (nResponse == IDCANCEL)      // 判断返回值是否为Cancel按钮(其ID为IDCANCEL)   
    {   
        // TODO: Place code here to handle when the dialog is   
        //  dismissed with Cancel   
    }
            弹出对话框比较关键的一个函数,就是对话框类的DoModal()函数。CDialog::DoModal()函数的原型为:

           virtual INT_PTR DoModal();   

           返回值:整数值,指定了传递给CDialog::EndDialog(该函数用于关闭对话框)的nResult参数值。如果函数不能创建对话框,则返回-1;如果出现其它错误,则返回IDABORT。


    三、模态对话框的创建与显示

            1、创建对话框模板,修改ID并调整。在对话框模板上点右键选择“Add Class...”,弹出添加类的对话框,设置“Class name”为CTipDlg,点“OK”。在Solution Explorer中可以看到生成了CTipDlg类的头文件TipDlg.h和源文件TipDlg.cpp。
            2、我们要在点“XX”按钮之后弹出此提示对话框,那么就要在“XX”按钮的消息处理函数OnBnClickedXXButton()中访问提示对话框类,所以为了访问CTipDlg类,在XxxxxxxDlg.cpp中包含CTipDlg的头文件:#include "TipDlg.h"。
            3、修改OnBnClickedXXButton()的函数体,在所有代码前,构造CTipDlg类的对象tipDlg,并通过语句tipDlg.DoModal();弹出对话框,最后判断DoModal()函数的返回值IDOK 还是 IDCANCEL 来确定是否继续进行计算。OnBnClickedXXButton()函数修改后如下:

    void CXxxxxxxxDlg::OnBnClickedXXButton()   
    {   
        // TODO: Add your control notification handler code here   
        INT_PTR nRes;             // 用于保存DoModal函数的返回值   
      
        CTipDlg tipDlg;           // 构造对话框类CTipDlg的实例   
        nRes = tipDlg.DoModal();  // 弹出对话框   
        if (IDCANCEL == nRes)     // 判断对话框退出后返回值是否为IDCANCEL,如果是则return,否则继续向下执行   
            return;   
      
        ......   
    }
            4、测试。编译运行程序后,在对话框上输入数据,点“XX”,弹出提示对话框询问,如果选择“确定”,则提示对话框退出,并在主对话框上显示相应的结果,而如果选择“取消”,则提示对话框也会退出,但主对话框显示数据不变。


    四、非模态对话框的创建与显示

            实际上,模态对话框和非模态对话框在创建对话框资源生成对话框类上是没有区别的,所以上面在模态对话框中创建的IDD_TIP_DIALOG对话框资源和CTipDlg类都不需要修改,需要修改的是,对话框类实例的创建和显示,也就是之前在CXxxxxxxxDlg::OnBnClickedXXButton()函数体中添加的对话框显示代码。

            1、在XxxxxxxxDlg.h中包含CTipDlg头文件并定义CTipDlg类型的指针成员变量。详细操作方法是,在XxxxxxxxDlg.cpp中删除之前添加的#include "TipDlg.h",而在XxxxxxxxDlg.h中添加#include "TipDlg.h",这是因为我们需要在XxxxxxxxDlg.h中定义CTipDlg类型的指针变量,所以要先包含它的头文件;然后在XxxxxxxxDlg.h中为CXxxxxxxxDlg类添加private成员变量CTipDlg  *m_pTipDlg;  。

            2、在CXxxxxxxxDlg类的构造函数中初始化成员变量m_pTipDlg。如果cpp文件中函数太多,可以在Class View上半个视图中找到CAdditionDlg类,再在下半个视图中找到其构造函数双击,中间客户区域即可马上切到构造函数的实现处。在构造函数体中添加m_pTipDlg = NULL;,这是个好习惯,在任何指针变量使用前都初始化,可以避免因误访问重要内存地址而破坏此地址的数据。

            3、将上面添加的模态对话框显示代码注释或删除掉,添加非模态对话框的创建和显示代码。修改后的CXxxxxxxxDlg::OnBnClickedXXButton()函数如下:

    void CAdditionDlg::OnBnClickedAddButton()   
    {   
        // TODO: Add your control notification handler code here   
        /*INT_PTR nRes;             // 用于保存DoModal函数的返回值  
     
        CTipDlg tipDlg;           // 构造对话框类CTipDlg的实例  
        nRes = tipDlg.DoModal();  // 弹出对话框  
        if (IDCANCEL == nRes)     // 判断对话框退出后返回值是否为IDCANCEL,如果是则return,否则继续向下执行  
            return;*/  
      
        // 如果指针变量m_pTipDlg的值为NULL,则对话框还未创建,需要动态创建   
        if (NULL == m_pTipDlg)   
        {   
            // 创建非模态对话框实例   
            m_pTipDlg = new CTipDlg();   
            m_pTipDlg->Create(IDD_TIP_DIALOG, this);   
        }   
        // 显示非模态对话框   
        m_pTipDlg->ShowWindow(SW_SHOW);   
      
        ......
    }
    

           4、因为此非模态对话框实例是动态创建的,所以需要手动删除此动态对象来销毁对话框。在CXxxxxxxxDlg类的析构函数中添加删除代码,但是MFC并没有自动给出析构函数,这时需要我们手动添加,在对话框对象析构时就会调用我们自定义的析构函数了。在XxxxxxxxDlg.h文件中为CXxxxxxxxDlg添加析构函数声明:~CAdditionDlg();,然后在XxxxxxxxDlg.cpp文件中添加析构函数的实现,函数体如下:

    CAdditionDlg::~CAdditionDlg()   
    {   
        // 如果非模态对话框已经创建则删除它   
        if (NULL != m_pTipDlg)   
        {   
            // 删除非模态对话框对象   
            delete m_pTipDlg;   
        }   
    }
            这样,非模态对话框创建和显示的代码就添加修改完了。在对话框上输入数据,然后点“XX”按钮,依然像上节一样弹出了提示对话框,但是先不要关闭它,拖动它后面的主对话框,发现主对话框竟然可以拖动了,而且结果编辑框里已经显示了结果,这表明提示对话框显示以后还没有关闭,OnBnClickedXXButton() 就继续向下执行了,不仅如此,主对话框每个编辑框还都可以响应输入。





    以上内容整理转载自:鸡啄米(感谢大神的教程指导)

            (1)模态对话框:http://www.jizhuomi.com/software/160.html

            (2)非模态对话框:http://www.jizhuomi.com/software/162.html


    展开全文
  • 2、非模态对话框窗口有什么区别? 3、如果不调用IsDialogMessage,消息能不能传递到对话框? 4、如果一定要调用IsDialogMessage,那么如果有多个非模态对话框的话,是否对每一个非模态对话框都必须单独调用 ...

    在SDK中使用非模态对话框时的几个问题: 1、为什么要调用IsDialogMessage?? 2、非模态对话框与主窗口有什么区别? 3、如果不调用IsDialogMessage,消息能不能传递到对话框? 4、如果一定要调用IsDialogMessage,那么如果有多个非模态对话框的话,是否对每一个非模态对话框都必须单独调用 IsDialogMessage?如果真是这样,MFC是如何处理的?因为MFC隐藏了主消息循环,我如何增加对IsDialogMessage的调用?

     

     

    在SDK中使用非模态对话框时,主循环中必须插入下列代码:

    1.while(GetMessage(&msg,NULL,0,0) {
    2.if(!IsDialogMessage(hdlg,&msg){
    3.TranslateMessage(&msg);
    4.DispatchMessage(&msg);
    5.}
    6.}

    我的问题是:

    为什么要调用IsDialogMessage?? 非模态对话框与主窗口有什么区别? 如果不调用IsDialogMessage,消息能不能传递到对话框? 如果一定要调用IsDialogMessage,那么如果有多个非模态对话框的话,是否对每一个非模态对话框都必须单独调用 IsDialogMessage?如果真是这样,MFC是如何处理的?因为MFC隐藏了主消息循环,我如何增加对IsDialogMessage的调用?

    要搞掂这一连串的问题,首先要明白IsDialogMessage的作用,不要被它的名字搞懵。

    IsDialogMessage并不是象它的名字那样用来检查对话框消息的,而是用来解释或转换消息的,更贴切的名字应该是TranslateDialogMessage。

    与TranslateAccelerator有点类似,IsDialogMessage解释非模态对话框消息。例如,它映射Tab键和Shift+Tab 键到对话框前/后的控制,并且映射箭头键到对话框相应的操作。你可以将它看成是对话框中专门内建的解释消息的加速键表。实际 上,IsDialogMessage不是对话框专用的-你可以在任何有控制的窗口中使用它来实现与在对话框中一样的键盘行为。但是因为它的第一个参数是对 话框的HWND,所以实际上你必须应用中的每一个非模态对话框都调用这个函数。通常当你创建对话框时可以获得一个全程的HWND类型变量g_hDlg。

     

    下一个要解决的问题是:MFC如何进行对话框消息的解释?在MFC中使用了一个复杂的虚函数:CWnd::PreTranslateMessage,这个 虚函数让任何窗口消息自己进入主消息循环,而不用去修改窗口自身的循环。以下是CDialog::PreTranslateMessage的缺省实现代 码:

    1.BOOL CDialog::PreTranslateMessage(MSG* pMsg)
    2.{
    3.......
    4.// many lines of intimidating code
    5.......
    6.return PreTranslateInput(pMsg);
    7.}

    换句话说,CDialog还传递消息到另一个虚函数:CWnd::PreTranslateInput

    1.BOOL CWnd::PreTranslateInput(LPMSG lpMsg)
    2.{
    3.if (/* keyboard or mouse message */)
    4.{
    5.return IsDialogMessage(lpMsg);
    6.}
    7.return FALSE;
    8.}

    你可能想到了CWnd::IsDialogMessage实际上是一个用m_hWnd作为HWND参数调用全程::IsDialogMessage的打包 函数。这就导致了MFC中每一个对话框解释自己的输入。如果你同时运行五个对话框,每一个对话框的PreTranslateMessage都调用 IsDialogMessage-所以说你就不必做什么了。MFC实在是牛啊,你压根就不必去操心IsDialogMessage,它会自己运转良好。

    转载于:https://www.cnblogs.com/sideny/p/3283538.html

    展开全文
  • 最近去面试,碰到了一个问题是Windows下的模态和非模态对话框在实现原理上的区别是什么?(回答一个能操作父窗口、一个不能操作父窗口是不给分的)当时没有回答到点儿上,回去查了下MSDN找到了答案,顺便在这里记录...
  • 自己看了这篇文,觉得很好,所以转了过来,大家共享,其实在msdn中输入destroying windows搜索,就可以发现 Called by the default OnNcDestroy member function after the window has been destroyed.(PostNcDestroy( )...
  • 本文是在Windows 10 和 visual studio 2017的实验环境下完成的。 正文中的引用出自王正军编著的《Visual C++ 6.0 程序设计从入门到精通》 窗口的概念 ...单文档/多文档/对话框/多顶级文档的区别 单...
  • 第 10 课 Windows 桌面及窗口 新桥镇博爱中学 一教学要点 1. 桌面 2. 窗口的菜单操作 3. 对话框的操作 二教学目标 1 知识目标了解桌面的组成学习窗口的菜单操作学习...2. 难点 窗口对话框的区别有标签对话框的操
  • vc++对话框

    千次阅读 2013-03-07 15:22:16
    对话框的分类:模式对话框和无模式对话框 1、模式对话框是指在程序继续之前需要用户对该对话框作出响应(单击确定或者取消)。当一个模式对话框打开时,用户只能该对话框进行交互,其他用户界面对象收不到输入...
  •  JDialog类和JFrame都是Windows的子类,二者实例都是底层容器,但二者有相似之处也有不同地方,主要区别是JDialog类创建的对话框必须要依靠于某个窗口。  创建对话框与创建窗口类似,通过建立JDialog子类来...
  • 第10课Windows桌面及窗口; Windows启动成功后的整个屏幕称为桌面它是一个特殊的窗口它上面带有文字说明的图形叫图标;快捷方式;桌面对象及操作;...比较windows XP窗口与对话框的区别 ;注意;对话框名称
  • 二者之间的区别是,窗口化版本(WScript)使用一个弹出对话框来显示文本输出消息,而命令行版本(CSCript)通过命令行程序所见的、常规的“标准输出”方法来显示文本。 举例说明: 用记事本编写以下的语句并保存在...
  • 运用无模式对话框

    2011-08-15 21:21:21
    通常当屏幕最前面为模式对话框时,后面的对话框均不可用,这也是模式无模式对话框的区别。  最直接的创造无模式对话框的方法是调用Create()函数,该函数需要传递一个对话框模版资源以及可选的父窗口指针。如果...
  • 1认识Windows2000窗口的组成 2学会窗口操作切换窗口移动窗口 改变窗口大小排列窗口 3了解对话框及其相关对象操作 区别对话框与窗口 区别对话框与窗口 e习提纲II标题栏菜单栏工具栏 窗口组成由操作或显示区域状态栏等...
  • API之对话框

    2009-02-13 11:15:00
    "对话框的一般形式是包含多种子...首先,让我们来看一下这个函数与窗口消息处理程序的区别窗口消息处理程序传回一个LRESULT。对话框传回一个BOOL,它在Windows表头文件中定义为int型态。 如果窗口消息处理程序不处理
  • 关于 子窗口 和 弹出窗口的区别

    千次阅读 2011-11-22 09:25:19
    WS_CHILD 切入在parentwnd中,相当于集成在一起了 WS_POPUP 弹出了,是两个window ...使POPUP窗口和主窗口不再是两个Windows. 以下引用,以作参考 对话框在WS_POPUPWS_CHILD之间转换
  • 模块二 中文Windows 7操作系统 学习目标 1了解Windows 7新增的常用功能 2掌握Windows 7的启动与退出 3掌握设置操作系统工作环境 4理解Windows 7的窗口与对话框的区别并能熟练操作窗口与对话框 5掌握资源管理器的操作...
  • windows 下 WSAAsyncSelect模型

    千次阅读 2017-07-28 15:52:47
    WSAAsyncSelec是Winsock提供一个适合于Windows编程使用函数,它允许在一个套接口上当发生特定网络事件时,给Windows网络应用程序(窗口对话框)发送一个消息(事件通知)。  WSAAsyncSelect模型select...
  • 一、统一风格漂亮界面设计的...在创建对话框窗口时的工作中要发生两个主要过程:对话框的过程和其窗口过程。Win32 SDK对话框使用了系统提供的对话框窗口窗口过程和对话框过程,对话框过程将被窗口过程调用。在MFC下
  • 文章目录Windows程序代码和UI资源文件应用程序的链接Windows.h头文件Windows消息驱动机制注册窗口类消息映射概念介绍对话框的运作模板定义文件(.DEF)资源描述文件(.RC)Windows程序的生与死 —— 窗口生命周期空闲...
  • Windows 消息

    2017-03-14 08:50:11
    message 用于区别其他消息常量值,这些常量可以是Windows单元中预定义常量,也可以是自定义常量。wParam 通常是一个消息有关常量值,也可能是窗口或控件句柄。lParam 通常是一个指向内存中数据指针。...
  • 首先引入网上搜索到的关于这两个消息比较靠谱的区别: 在响应WM_CREATE消息响应函数的时候,对话框及子控件还未创建完成,亦是说只是通知系统说要开始创建窗口啦,这个消息响应完之后,对话框和子控件才开始创建。...
  • 自己动手做漂亮界面(B)

    千次阅读 2014-07-17 03:33:26
    相关链接:让你的软件界面更漂亮 [VC][一]  一、统一风格漂亮界面设计的理论实现 ...在创建对话框窗口时的工作中要发生两个主要过程:对话框的过程和其窗口过程。Win32 SDK对话框使用了系统提供的对话框窗口的窗
  • windows消息码大全

    千次阅读 2015-01-07 19:37:37
    message 用于区别其他消息常量值,这些常量可以是Windows单元中预定义常量,也可以是自定义常量。 wParam 通常是一个消息有关常量值,也可能是窗口或控件句柄。 lParam 通常是一个指向内存中数据...
  • Windows消息大全

    2008-08-04 16:03:00
    message 用于区别其他消息常量值,这些常量可以是Windows单元中预定义常量,也可以是自定义常量。wParam 通常是一个消息有关常量值,也可能是窗口或控件句柄。lParam 通常是一个指向内存中数据指针。...

空空如也

空空如也

1 2 3 4 5 6
收藏数 103
精华内容 41
关键字:

windows窗口与对话框的区别