雞啄公尺vc 2010系列15(訊息對話方塊)

2021-07-02 13:23:50 字數 2653 閱讀 6726

前面幾節雞啄公尺講了屬性頁對話方塊,我們可以根據所講內容方便的建立自己的屬性頁對話方塊。本節講解windows系統中最常用最簡單的一類對話方塊--訊息對話方塊。

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

一.cwnd::messagebox()函式和afxmessagebox()函式的用法

下面雞啄公尺就分別講解兩個函式的用法。

1.cwnd::messagebox()函式

cwnd::messagebox()的函式原型如下:

int messagebox(

lpctstr lpsztext,

lpctstr lpszcaption = null,

uint ntype = mb_ok 

);引數說明:

lpsztext:需要顯示的訊息字串。

lpszcaption:訊息對話方塊的標題字串。預設值為null。取值為null時使用預設標題。

ntype:訊息對話方塊的風格和屬性。預設為mb_ok風格,即只有「確定」按鈕。

ntype的取值可以是下面兩個表中任取乙個值,也可以是各取乙個值的任意組合。即可以指定乙個對話方塊型別,也可以指定乙個對話方塊圖示,還可以兩者都設定。

ntype 取值

引數說明

mb_abortretry

有「終止」、「重試」和「忽略」按鈕

mb_ok

有「確定」按鈕

mb_okcancel

有「確定」和「取消」按鈕

mb_retrycancel

有「重試」和「取消」按鈕

mb_yesno

有「是」和「否」按鈕

mb_yesnocancel

有「是」、「否」和「取消」按鈕

對話方塊型別表

ntype 取值

顯示圖示

mb_iconexclamtion

mb_iconwarning

mb_iconasterisk

mb_iconinformation

mb_iconquestion

mb_iconhand

mb_iconstop

mb_iconerror

對話方塊圖示表

如果想要設定ntype的值為型別和圖示的組合,可以像這樣取值:mb_okcancel | mb_iconquestion。按位取或就可以了。

2.afxmessagebox()函式

afxmessagebox()的函式原型為:

int afxmessagebox(

lpctstr lpsztext,

uint ntype = mb_ok,

uint nidhelp = 0 

);引數說明:

lpsztext:同cwnd::messagebox()函式

ntype:cwnd::messagebox()函式

nidhelp:此訊息的幫助的上下文id。預設值為0,取0時表示要使用應用程式的預設幫助上下文。

二.cwnd::messagebox()和afxmessagebox()的返回值

我們在呼叫了上面兩個函式後,都可以彈出模態訊息對話方塊。訊息對話方塊關閉後,我們也都可以得到它們的返回值。兩者的返回值就是使用者在訊息對話方塊上單擊的按鈕的id,可以是以下值:

idabort:單擊「終止」按鈕。

idcancel:單擊「取消」按鈕。

idignore:單擊「忽略」按鈕。

idno:單擊「否」按鈕。

idok:單擊「確定」按鈕。

idretry:單擊「重試」按鈕。

idyes:單擊「是」按鈕。

三.應用舉例

我們還是拿前面加法計算器的程式做例子。

大家是否記得,在模態對話方塊及其彈出過程中我們修改了cadditiondlg::onbnclickedaddbutton()函式,在點了「計算」按鈕以後先彈出了乙個模態對話方塊,詢問使用者是否確定要進行加法計算,並通過模態對話方塊domodal函式的返回值判斷使用者選擇了「確定」還是「取消」。這些功能很明顯訊息對話方塊完全能夠實現,雞啄公尺就使用訊息對話方塊來替代原來的模態對話方塊。

在非模態對話方塊的建立及顯示中,雞啄公尺注釋了模態對話方塊的相關**,加入了非模態對話方塊的建立和顯示**,我們在加入訊息對話方塊之前將非模態對話方塊的**也注釋或刪除掉,確保此函式中不再生成原來的模態對話方塊或非模態對話方塊。

修改後的cadditiondlg::onbnclickedaddbutton()函式如下:

c++**

void

cadditiondlg::onbnclickedaddbutton()     

編譯執行,在執行結果對話方塊上點「計算」按鈕彈出以下訊息對話方塊:

大家也可以將messagebox函式換為afxmessagebox()函式,同時引數進行相應修改,執行下看看效果。

訊息對話方塊就講到這裡了。在以後的軟體開發中用到它的頻率很高,希望大家慢慢熟悉並掌握它。有問題歡迎回雞啄公尺部落格交流或加入我們的程式設計入門群。

vc2010呼叫儲存過程

coinitialize null connectionptr pmyconnect null hresult hr pmyconnect.createinstance uuidof connection if failed hr return bstr t strconnect provider ...

VC2010的 DYNAMICBASE鏈結選項問題

近期偶然用windbg給乙個控制台程式的入口函式下斷點,位址之際用編譯出的map檔案中main函式的位址。結果windbg報告斷點未下成功,經過反覆檢視,包括在vc環境中除錯執行,均發現main函式的位址和map檔案中位址不一樣,切帶有隨機性。又用vc6.0實驗一遍,發現沒有任何問題。看來問題是出在...

VC 2010讀取BIN檔案

最近在弄stm32更新韌體的上位機,記錄一下碰到的問題點 unsigned long nfilebytes 用於儲存bin檔案總位元組數 unsigned char abinbyte 65536 用於儲存從bin檔案獲取的資料 file pfile wfopen s pfile,strfilepat...