欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年模式对话框与非模式对话框的区别 .pdf

    • 资源ID:26171980       资源大小:58.37KB        全文页数:6页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年模式对话框与非模式对话框的区别 .pdf

    模式对话框就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话框也可以处理父窗口 .例子 :在桌面上右击我的电脑,选择属性 ,弹出系统属性窗口,点击下面的技术支持,弹出技术支持信息,现在再对系统属性窗口进行操作就操作不了,这种叫做模式对话框;关闭技术支持信息,在系统属性里选择硬件,点击设备管理器,弹出设备管理器窗口,现在再对系统属性窗口进行操作仍然可以操作,这种就叫做非模式对话框。在 WIN32 中,模式对话框的创建一般是使用DialogBox 来进行创建的。而非模式对话框则是利用 CreateWindow 来创建的。在MFC 或是 WTL 中,模式对话框一般是使用DoModal,而非模式对话框的创建则是使用Create。一、使用中的区别模式对话框创建后,程序的其他窗口便不能进行操作,必须将该窗口关闭后,其他窗口才能进行操作。 而非模式对话框则无需这样,它不强制要求用户立即反应,而是与其他窗口同时接受用户操作。二、消息响应的区别在消息响应方面,模式对话框和非模式对话框之间又有着很大的区别。模式对话框工作的时候,它有内部的消息泵机制,控件之间的交互不用我们人为的去控制,系统会帮助我们去处理。非模式对话框则像普通窗口一样,则由WinMain 中书写的消息循环驱动。但由于是对话框, 它对一些消息有特殊的处理。因此, 在消息循环中,需要先对对话框提供截获消息的机会。While (GetMessage(&msg, NULL, 0, 0) if (hDlgModeless = 0 | !IsDialogMessage(hDlgModeless, &msg) TranslateMessage(&msg); DispatchMessage( &msg); 如果当前取得的消息是对话框的消息,IsDialogMessage 将它交由对话消息处理函数处理,并返回 TRUE。不需要再派发了。注意: 这个方法并不是很好用,因为当对话框过多的时候,处理起来就比较麻烦了。另一种处理的方法是利用子类化控件的方法,来处理控件间的交互。三、销毁的区别模式对话框的销毁是使用EndDialog,而非模式对话框的销毁是使用DestroyWindow. 。所以我们在销毁对话框的时候,也要对其进行区别。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 非模式对话框, 用户关闭对话框时,对话框消息处理函数将收到WM_CLOSE 消息, 接到后调用 DestroyWindow 以销毁非模式对话框。模式对话框,则一般响应IDOK 和 IDCANCEL 。在 PPC 上,我们对于OK 键和 X 键的处理要注意这点。四、其他非模态对话框的模板必须具有Visible 风格,否则对话框将不可见,而模态对话框则无需设置该项风格。更保险的办法是调用ShowWindow(hDialog, SW_SHOW) 来显示对话框,而不管对话框是否具有Visible 风格。非模态对话框对象是用new 操作符在堆中动态创建的,而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建在堆栈上。通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量,通过该指针可访问对话框对象。通过调用Create 函数来启动对话框,而不是DoModal ,这是模态对话框的关键所在。由于Create 函数不会启动新的消息循环,对话框与应用程序共用同一个消息循环,这样对话框就不会垄断用户的输入。Create 在显示了对话框后就立即返回,而DoModal 是在对话框被关闭后才返回的。众所周知,在MFC 程序中,窗口对象的生存期应长于对应的窗口,也就是说,不能在未关闭屏幕上窗口的情况下先把对应的窗口对象删除掉。由于在Create返回后,不能确定对话框是否已关闭,这样也就无法确定对话框对象的生存期,因此只好在堆中构建对话框对象,而不能以局部变量的形式来构建之。因为是用new 操作符构建非模态对话框对象,因此必须在对话框关闭后,用delete 操作符删除对话框对象。必须有一个标志表明非模态对话框是否是打开的。这样做的原因是用户有可能在打开一个模态对话框的情况下,又一次选择打开命令。程序根据标志来决定是打开一个新的对话框,还是仅仅把原来打开的对话框激活。通常可以用拥有者窗口中的指向对话框对象的指针作为这种标志,当对话框关闭时,给该指针赋 NULL 值,以表明对话框对象已不存在了。注意: 在 C+编程中, 判断一个位于堆中的对象是否存在的常用方法是判断指向该对象的指针是否为空。这种机制要求程序员将指向该对象的指针初始化为NULL值,在创建对象时将返回的地址赋给该指针,而在删除对象时将该指针置成NULL 值。- 模态与 非模态的对比:模态形式上: 一个模式对话框是一个有系统菜单、标题栏、 边线等的弹出式窗口。在创建对话框时指定WS_POPUP, WS_SYSMENU, WS_CAPTION和DS_MODALFRAME风格。即使没有指定WS_VISIBLE风格,模式对话框也会被显示。创建 对话框 窗口 时,将 发送WM_INITDIALOG消 息( 如果指 定对 话框的DS_SETFONT 风格, 还有 WM_SETFONT消息) 给对话框过程。 (对话框的窗口名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 过程由 Windows 系统提供,用户在创建对话框窗口时提供一个对话框过程由窗口过程调用。 ) 对话框窗口被创建之后,Windows 使得它成为一个激活的窗口,它保持激活直到对话框过程调用:EndDialog 函数结束对话框的运行或者Windows 激活另一个应用程序为止,在激活时,用户或者应用程序不可以激活它的所属窗口(Owner window ) 。创建: DoModal() 销毁 : 一个应用程序通过调用:EndDialog 函数来销毁一个模式对话框。一般情况下, 当用户从系统菜单里选择了关闭(Close)命令或者按下了确认(OK)或取消( CANCLE )按钮, :EndDialog被对话框过程所调用。调用:EndDialog时,指定其参数nResult的值, Windows 将在销毁对话框窗口后返回这个值,一般,程序通过返回值判断对话框窗口是否完成了任务或者被用户取消。EndDialog(IDC_BUTTON_DEFAULT);我 们 的 代 码中EndDialog方 法 在 指 定 的BUTTON 处理事件结束时调用,来关闭对话框非模态形式上: 一个无模式对话框是一个有系统菜单、标题栏、 边线等的弹出式窗口。在创建对话框模板时指定WS_POPUP、WS_CAPTION 、WS_BORDER 和 WS_SYSMENU风格。如果没有指定WS_VISIBLE风格,无模式对话框不会自动地显示出来。一个无模式对话框既不会禁止所属窗口,也不会给它发送消息。当创建一个模式对话框时, Windows 使它成为活动窗口,但用户或者程序可以随时改变和设置活动窗口。如果对话框失去激活,那么即使所属窗口是活动的,在Z 轴顺序上,它仍然在所属窗口之上。创建: Create() 销毁 : 在应用程序结束之前,它必须销毁所有的无模式对话框。使用:DestroyWindow销毁一个无模式对话框,不是使用:EndDiaLog 。一般来说,对话框过程响应用户输入,如用户选择了“取消”按钮,则自动调用:DestroyWindow ;如果用户没有有关动作,则应用程序必须调用:DestroyWindow 。本文来自CSDN博客,转载请标明出处:http:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - 对话框分为模态对话框和非模态对话框,创建模态对话框用DialogBox() ,创建非模态对话框用CreateDialog() ,一个对话框通常都应当有一个父窗口,对话框的定位以父窗口的坐标系统为基准, 父窗口关闭对话框也随即关闭。如果模态对话框没有父窗口就不再具有模态对话框的特性(用户必须处理完模态对话框的要求之后才能继续在主窗口的操作)。例如使用MessageBox(NULL,Message,Error,MB_OK)弹出一个警告对话框阻止用户的进一步操作,但是第一个参数指定其父窗口为NULL ,该信息框将不再具有预料的功能,在该对话框显示时,用户仍然能够在程序的主窗口中进行操作。一、模态对话框和非模态对话框1、调用模态对话框调用DialogBox() 或者DialogBoxIndirect() ,模态对话框显示后,其父窗口接到一个WM_CANCELMODE消息,要求其释放对鼠标的捕获,供对话框使用。对话框有自己的消息队列,当该消息队列空闲时,其父窗口将接收到WM_ENTRYIDLE消息,可以在这个消息的处理函数中进行后台操作。在处理的过程中应不断调用PeekMessage()监视对话框的消息队列,一旦发现消息立刻将控制权转移给对话框。2、调用非模态对话框调用 CreateDialog() 或者 CreateDialogIndirect() ,参数和 DialogBox() 的参数完全相同,不过非模态对话框不会自动显示,因此要再调用一下ShowWindow() 函数,或者在资源编辑器中编辑对话框时指定对话框的Style 为 Visible。例如:ShowWindow(CreateDialog(hInst,(LPCSTR)IDD_DIALOG,hwnd,(DLGPROC)DlgProc),TRUE); 二、对话框模板对话框模板用来描述一个对话框的外观和其包含的控件,一个对话框可以一个可执行程序中的对话框资源,也可以使用一个内存模板。1、使用内存模板建立对话框内存对话框模板由两部分组成,第一部为一个DLGTEMPLA TE (或 DLGTEMPLA TEEX )结 构 , 描 述 对 话 框 的 整 体 结 构 , 第 二 部 分 为 若 干 个DLGITEMTEMPLATE ( 或DLGITEMTEMPLATEEX ) 结 构 , 描 述 对 话 框 内 部 的 控 件 , 模 板 建 立 后 调 用CreateDialogIndirect() 或 DialogBoxIndirect() 函数建立对话框2、DLGTEMPLA TE 结构typedef struct DWORD style; DWORD dwExtendedStyle; WORD cdit; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - short x; short y; short cx; short cy; DLGTEMPLA TE, *LPDLGTEMPLATE; 三、DLGITEMTEMPLA TE 结构typedef struct DWORD style; DWORD dwExtendedStyle; short x; short y; short cx; short cy; WORD id; / on Windows 95/98, this is a byte. DLGITEMTEMPLATE, *PDLGITEMTEMPLATE; 四、Modeless 对话框1、调用非模态对话框if(!IsWindow(hwndDlg) hwndDlg=CreateDialog(hInst,(LPCSTR)IDD_DLG,hWnd,(DLGPROC)DlgProc); ShowWindow(hwndDlg,SW_SHOW); IsWindow() 函数判断hwndDlg 是否已经指向一个窗口,如果返回 TRUE,表示对话框已经显示,不需要再调用对话框,如果返回FALSE,调用 CreateDialog() 显示对话框。要注意一点, hwndDlg 必须声明为全局变量,而不是对话框函数的私有变量,否则每次对话框函数被调用都将重新初始化该变量IsWindow(hwndDlg) 总方会 FALSE, 上面的判断语句就形同虚设了。 同时应在调用EndDialog() 前设 hwndDlg=NULL , 否则对话框关闭后IsWindow(hwndDlg)总返回 TRUE,再也打不开了。2、处理非模态对话框消息对于非模态对话框,对话框接收的消息有可能被传递给父窗口,因此在父窗口的消息处理中派遣消息之前要区分来自窗口的和来自对话框的消息:if(!IsDialogMessage(&msg) TranslateMessage(&msg); DispatchMessage(&msg); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 本文来自CSDN博客,转载请标明出处:http:/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -

    注意事项

    本文(2022年模式对话框与非模式对话框的区别 .pdf)为本站会员(Q****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开