第七章 消息框的四種樣式
在前幾章中我們多次用到消息框,但都是最簡單的樣式,即只有一個【確定】按鈕的形式。但是VC++給消息框提供了四種不同的形式,本章介紹這四種不同的形式的設計方法。
本章要點
1 四種消息框的的設計方法
2 函數的重載
7.1 MessageBox()函數的三種格式
MessageBox()函數可以有一到三個參數,因此它有四種格式,它們是
1)MessageBox(String)
2)MessageBox(String,String1)
3)MessageBox(String,String1, const)
格式1的參數是字符串,表示要顯示的消息。格式2的兩個參數都是字符串,表示消息和標題。格式3的參數const是整數常量,它表示要顯示的按鈕樣式和圖標樣式。圖chap07-01是四種樣式之一,它使用了YES-NO按鈕和感嘆號圖標。按鈕上的文字出現漢字是因爲我的VC系統是漢字版的,英文版的就是[YES]和[NO]。
在C++中,函數名相同但功能不同的語言現象叫做函數的重載。函數重載就是它們的參數表不同——參數個數不同或個數相同但參數的類型不同,通過不同的參數生成不同的消息框就是應用了MessageBox()函數的重載。
選擇不同按鈕樣式的常量有如下6個:
MB_OK 只有OK按鈕
MB_OKCANCEL 確定-取消式
MB_YESNO 是-否式
MB_YESNO_CANCEL 是-否-取消式
MB_RETRYCANCEL 重試-取消式
MB_ABORTRETRYIGNORE 終止-重試-忽略按鈕
選擇不同圖標樣式的常量有如下4個:
MB_ICONSTOP ×叉號
MB_ICONEXCLAMATION !驚歎號
MB_ICONINFORMATION i 信息號
MB_ICONQUESTION ?疑問號
需要同時選取按鈕和圖標時就用兩個常量相加,如MB_OKCANCEL + MB_ICONSTOP。所以按按鈕來分類,消息框有四種樣式,缺少該參數時就只有一個【確定】按鈕。
7.2 MyMsg程序的界面和功能
本章我們要設計一個程序MyMsg.exe,它有四個按鈕,按每個按鈕都彈出一個消息框,其標題顯示代表按鈕常量的字符串,而信息內容則代表圖標常量的字符串,同時在編輯框中顯示該按鈕的名稱。通過把玩本程序就可以方便地查到不同樣式對應的常量該怎麼寫。程序運行時的界面如下。
圖chap07-02
7.3 MyMsg程序界面的設計
我們在D:\myVC\ch07\位置創建MyMsg.exe的工程文件,還是用對話框模式。參考圖chap07-02和麪的參數表設計界面。
控件 | 標題 | ID | EXTENDED STYLES |
按鈕 | OK-CANCEL | IDC_OKCANCEL_BUTTON |
Client Static Modal Frame 都選中 |
按鈕 | YES - NO | IDC_YESNO_BUTTON | |
按鈕 | YESNO-CANCEL | IDC_YESNOCANCEL_BUTTON | |
按鈕 | RETRY-CANCEL | IDC_YESNOCANCEL_BUTTON | |
按鈕 | E&XIT | IDC_EXIT_BTN | |
編輯框 | —— | IDC_RESULTS_EDIT |
多行,排列居中, Client,Static,Modal Frame |
組框 | Yours selected | IDC_STATIC | |
對話框 | MyMsg | IDD_MYMSG_DIALOG | 字體 12 |
7.4 編寫代碼
首先,我們給編輯框引進一個值變量String m_ResultsEdit,用來存放要顯示的信息。然後給[OK-CANCEL]按鈕寫代碼,這次彈出的消息框用的常量是MB_OKCANCEL + MB_ICONSTOP。然後更新編輯框的內容,這是在消息框被關閉後執行的。全部代碼如下:
void CMyMsgDlg::OnOkcancelButton()
{
CString info, title ;
info = "Icon_constent is MB_ICONSTOP";
title= "MB_OKCANCEL";
MessageBox(info, title, MB_OKCANCEL+MB_ICONSTOP);
m_ResultsEdit = "OK_CANCEL fashion";
UpdateData(FALSE);
}
其它三個按鈕的代碼也類似,列舉如下:
void CMyMsgDlg::OnYesnoButton()
{
CString info, title ;
info = "Icon_constent is MB_ICONEXCLAMATION";
title= "MB_YESNO";
MessageBox(info, title, MB_YESNO+MB_ICONEXCLAMATION);
m_ResultsEdit = "MB_YESNO fashion";
UpdateData(FALSE);
}
void CMyMsgDlg::OnYesnocancelButton()
{
CString info, title ;
info = "Icon_constent is MB_ICONINFORMATION";
title= "YESNO_CANCEL";
MessageBox(info, title, MB_YESNOCANCEL+MB_ICONINFORMATION);
m_ResultsEdit = "YESNO_CANCEL fashion";
UpdateData(FALSE);
}
void CMyMsgDlg::OnRetrycancelButton()
{
CString info, title ;
info = "Icon_constent is MB_ICONQUESTION";
title= "MB_RETRYCANCEL";
MessageBox(info, title, MB_RETRYCANCEL+MB_ICONQUESTION);
m_ResultsEdit = "RETRY_CANCEL fashion";
UpdateData(FALSE);
}
編譯和連接後運行之,如果按EXIT按鈕不能退出,那是你忘記給它寫退出代碼了,我以後不再提醒了。
—END—