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