訊息對話方塊 MessageBox 用法介紹

2021-06-16 16:43:38 字數 2845 閱讀 5123

在軟體中我們經常會彈出個小視窗,給一點點提示.這就會用到訊息對話方塊.

在win32 api程式中只有messagebox這一種用法.

而在mfc中就有三各方法:

1.呼叫api中的messagebox  2.呼叫cwnd的成員函式messagebox 3.呼叫全域性函式afxmessagebox

舉個簡單例子

#include

int winapi winmain(hinstance hinstance,hinstance hpre,pstr szcmdline, int

icmdshow){

messagebox(null,text("hello world."),text("title"

),0);//text跟在mfc中常用的_t()一樣,表示unicode字元

return

0;訊息對話方塊函式定義如下

messagebox(hwndhwnd,lpcwstrlptext,lpcwstrlpcaption,uintutype);

引數hwnd視窗控制代碼,一般用的較少.這例子中也沒有涉及視窗就直接寫null.

引數lptext是訊息對話方塊中顯示的內容

引數lpcaption是對話方塊的標題

引數utype,指定對話方塊按鈕,圖示.

按鈕型別如下

這都是些在winuser.h中定義的巨集.mb是messagebox button的簡稱,後面的文字就表示有幾個按鈕,按鈕上顯示啥字.

比如mb_yesnocancel 就是顯示3個按鈕,分別是yes, no , cancel

mb_ok

mb_okcancel

mb_abortretryignore

mb_yesnocancel

mb_yesno

mb_retrycancel

mb_canceltrycontinue

圖示顯示

另外我還會常在對話方塊上面看到乙個問號和警告的一些圖示,可以通過如下巨集指定

mb_iconwarning

mb_iconerror

mb_iconinformation

mb_iconstop

預設焦點

現在按鈕圖示都有了你可能還會想到如果有幾個按鈕那預設的焦點是在哪個按鈕.可以通過如下巨集

mb_defbutton1

mb_defbutton2

mb_defbutton3

mb_defbutton4

數字代表從左到右按鈕的位置

上面講了按鈕,圖示,預設焦點的三個巨集,但怎麼一起用呢 ?通過|這個符號把它們組合起來就是.舉例

messagebox(null,text("hello world."),text("title"

),mb_okcancel|mb_iconinformation|mb_defbutton1);

對話方塊函式返回值

最後你可能還會想如果使用者點不同的按鈕,我們怎麼得到使用者的選擇資訊呢? 很簡單,就是通過函式messagebox的返回值就判斷.函式會有如下返回值

idok

idcancel

idabort 

idretry

idignore

idyes

idno

所以可以這樣來判斷

if( messagebox(null,text("hello world."),text("title"

),mb_okcancel) == idok)

afxmessagebox是mfc對messagebox的封裝.它有兩個不同的過載函式.

1) int afxapiafxmessagebox(uintnidprompt, uint ntype = mb_ok, uint nidhelp = (uint)-1)

其中nidprompt是字串資源id,也就是你在string table中定義的字串. ntype跟前面messagebox中的完全一樣. hidhelp是跟幫助資訊相關的.它這裡來個(uint)-1,把乙個-1轉成無符號型別.我實在沒搞懂啥意思,我都懷疑是不是它們寫錯了.應該直接寫個0. 反正在這裡預設值0也就表示使用預設的幫助文件資訊.

使用舉例afxmessagebox(ids_msg)

2) int afxapi afxmessagebox(lpctstr lpsztext, uint ntype = mb_ok,

uint nidhelp = 0);

其中的lpsztext是指定對話方塊要顯示的內容.我們發現封裝好處就是使用更簡單,這裡之所以簡單是因為用到了預設引數,使用者使用時不用老指定一堆引數.

不過我們發現有點扯蛋的事封裝到最後竟然連指定對話方塊標題的引數都給能沒了.你沒法再去指定了,只能預設顯示應用程式名字了.我估計當初那些寫**來封裝的人肯定也糾結了番,這title名字嘛給預設指定乙個啥才好啊? 估計肯定不會有滿意的名字,最後乾脆把這引數弄沒了,去動態獲取程式名字做標題了.

只能繼承自cwnd的類才能使用該函式

int messagebox(lpctstr lpsztext, lpctstr lpszcaption = null, uint ntype = mb_ok)

我們發現它也只是稍微封裝了下api的messagebox,只是少了個hwnd的引數,然後後面有兩個引數有預設值.其他完全一樣.

當然如果你想使用訊息對話方塊更漂亮點,新增些額外的訊息.那就直接整成個dialog就行了.

對話方塊 訊息對話方塊

我們在使用windows系統的過程中經常會見到訊息對話方塊,提示我們有異常發生或提出詢問等。因為在軟體開發中經常用到訊息對話方塊,所以mfc提供了兩個函式可以直接生成指定風格的訊息對話方塊,而不需要我們在每次使用的時候都要去建立對話方塊資源和生成對話方塊類等。這兩個函式就是cwnd類的成員函式mes...

自動關閉MessageBox對話方塊

方法1 模擬回車實現 settimer 1,1000,null messagebox test test1 在ontimer uint nidevent 中 if nidevent 1 方法2 getforegroundwindow 得到控制代碼 sendmessagecallback傳送訊息 vo...

Delphi的MessageBox對話方塊使用

messagebox對話方塊是比較常用的乙個資訊對話方塊,其不僅能夠定義顯示的資訊內容 資訊提示圖示,而且可以定義按鈕組合及對話方塊的標題,是乙個功能齊全的資訊對話方塊資訊提示圖示,而且可以定義按鈕組合及對話方塊的標題,是乙個功能齊全的資訊對框。1 函式原型及引數 function messageb...