【Win32】只此一篇 让你清楚明细模式(DialogBoxParam)与非模式(CreateDialogParam)对话框的区别
作者:Mitu_-_
除非特殊聲明,本貼均為原創(chuàng),轉(zhuǎn)載請務(wù)必保留本文鏈接
模式對話框與非模式對話框的四大區(qū)別
- 前言
- 一、顯示方法
- 二、返回方式與返回值
- 三、關(guān)閉方式
- 四、消息循環(huán)方式
前言
顧名思義,對話框完成的就是“”對話“”的功能,我們大部分的工作都是在主窗口的客戶區(qū)完成的,但程序往往需要和用戶進行交互,如輸入文本、輸入?yún)?shù)等等,這些界面完全不必放入主窗口中,而通常是通過彈出一個對話框來和用戶進行“”交流”。
創(chuàng)建對話框與創(chuàng)建窗口其實很相似,只不過用的函數(shù)不同而已。
我們可以通過兩種辦法來創(chuàng)建對話框:
1.模式對話框:DialogBoxParam
2非模式對話框:CreateDialogParam
HWND CreateDialogParamA(HINSTANCE hInstance,LPCSTR lpTemplateName,HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam );大家可以看出它們的參數(shù)都是相同的,那么它們有什么區(qū)別呢?
一、顯示方法
——*非模式對話框(CreateDialogParam)在創(chuàng)建對話框后,會根據(jù)對話框模板的風格是否定義了WS_VISIBLE來決定是否顯示對話框。
*如果定義了則顯示,沒有的話,則需要在以后自行調(diào)用ShowWindow來顯示它。
——而模式對話框(DialogBoxParam)不管是否定義了WS_VISIBLE風格都會顯示對話框
所以非模式對話框必須顯式地定義WS_VISIBLE才能在屏幕上顯示。
二、返回方式與返回值
——非模式對話框在建立對話框窗口后直接返回,返回值是對話框的句柄。
——模式對話框需要在對話框關(guān)閉后才能返回,返回值是EndDialog(如果不知道此函數(shù),可以先跳到“三、關(guān)閉方式”,再回來看)中的dwResult參數(shù)。
三、關(guān)閉方式
——關(guān)閉非模式對話框使用DestroyWindow函數(shù),!注意,這里不要用EndDialog函數(shù)。
——關(guān)閉模式對話框使用EndDialog函數(shù)。!同樣,這里不能使用DestroyWindow函數(shù)
(悄咪咪~~)(此處不懂,接著看“四、消息循環(huán)方式”,再回來看)
四、消息循環(huán)方式
——由“二、返回方式”可知,非模式對話框建立好后,就會直接返回,把消息循環(huán)交給應(yīng)用程序去處理,應(yīng)用程序就可以在自己的消息循環(huán)中獲取對話框消息。
——*而模式對話框是使用Windows為它內(nèi)建的消息循環(huán),然后才去調(diào)用對話框過程。調(diào)用完后才能返回到應(yīng)用程序的消息循環(huán)中去。
*(!!!注意:)由“二、返回方式”知,模式對話框去調(diào)用對話框過程的中間是不能返回值的, 只有對話框過程結(jié)束了之后,才能返回值,并返回到應(yīng)用程序的消息隊列。
這也就是為什么模式消息框打開后如果不關(guān)閉,就無法打開它的父程序了;
而非模式消息框打開后,仍可以打開它的父程序的原因了。
贈人玫瑰,手有余香!!!還望大家隨手點個贊喲(^U^)ノ~YO
碼字不易,大家的支持就是我堅持下去的動力。也不要忘記關(guān)注我哦!
我會持續(xù)為大家?guī)砀喔韶泦褈~~
總結(jié)
以上是生活随笔為你收集整理的【Win32】只此一篇 让你清楚明细模式(DialogBoxParam)与非模式(CreateDialogParam)对话框的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大话数据结构 前言
- 下一篇: 非模式对话框CreateDialog()