2)MFC对话框程序设计
文章目錄
- 對(duì)話框程序設(shè)計(jì)概述
- 常用成員函數(shù)
- 對(duì)話框主要屬性
- 一、在對(duì)話框使用按鈕控件
- 1、按鈕添加變量
- 2、按鈕添加事件處理程序
- Messagebox
- AfxMessagebox
- 二、對(duì)話框窗口消息
- 1、為消息對(duì)話框顯示消息處理函數(shù)
- WM_CREATE
- WM_CLOSE
- WM_DESTROY
- 2、為對(duì)話框添加自定義消息
- 三、模態(tài)對(duì)話框和非模態(tài)對(duì)話框
- 1、模態(tài)對(duì)話框
- 2、非模態(tài)對(duì)話框
- 四、通用對(duì)話框
- 1、文件對(duì)話框的使用
- 示例:
- 簡(jiǎn)單文件打開對(duì)話框
- 設(shè)置初始目錄的文件打開對(duì)話框
- 獲取文件打開對(duì)話框所選的路徑名
- 獲取文件打開對(duì)話框所選的文件名
- 獲取文件打開對(duì)話框所選的文件標(biāo)題
- 獲取所選文件的擴(kuò)展名
- 打開文件對(duì)話框選擇多個(gè)文件
- 設(shè)置文件打開對(duì)話框的過濾功能
- 設(shè)置打開對(duì)話框的過濾功能
- 帶有標(biāo)題的文件打開對(duì)話框
- 最簡(jiǎn)單文件保存對(duì)話框
- 帶自定義保存文件名的保存文件對(duì)話框
- 帶自定義文件名和擴(kuò)展名的保存文件對(duì)話框
- 2、字體對(duì)話框的使用
- 3、瀏覽文件夾對(duì)話框的使用
- 4、查找 / 替換對(duì)話框的使用
- 示例:
對(duì)話框程序設(shè)計(jì)概述
常用成員函數(shù)
對(duì)話框主要屬性
一、在對(duì)話框使用按鈕控件
1、按鈕添加變量
變量名的基本形式:變量名=屬性+類型+對(duì)象描述
2、按鈕添加事件處理程序
事件處理程序是某個(gè)事件發(fā)生后控件要執(zhí)行的程序。
事件處理程序就是一個(gè)類成員函數(shù)
Messagebox
AfxMessagebox
二、對(duì)話框窗口消息
通常用于向用戶顯示一段文本字符串信息
? ?在**WM_CREATE**消息的時(shí)候,對(duì)話框還沒有被顯示在屏幕上要對(duì)控件初始化,通常是在對(duì)話框類的虛函數(shù)OnInitDialog 中進(jìn)行 **WM_DESTROY和WM_CLOSE發(fā)送順序:**1、為消息對(duì)話框顯示消息處理函數(shù)
**注意:**WM_CLOSE 和WM_DESTROY 的觸發(fā)條件是不同的
WM_CREATE
WM_CREATE 出現(xiàn)在對(duì)話框出現(xiàn)之前
int CTest1Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct) {if (CDialogEx::OnCreate(lpCreateStruct) == -1)return -1;AfxMessageBox(_T("我是消息對(duì)話框,馬上出現(xiàn)"));return 0; }WM_CLOSE
詢問是否關(guān)閉程序
void CTest1Dlg::OnClose() {if (AfxMessageBox(_T("確定要關(guān)閉程序嗎?"), MB_YESNO) == IDYES)CDialogEx::OnClose(); }WM_DESTROY
以下代碼體現(xiàn)主對(duì)話框雖然關(guān)閉了,但并不意味著進(jìn)程的退出
void CTest1Dlg::OnDestroy() {CDialogEx::OnDestroy();AfxMessageBox(_T("主對(duì)話框已消失,但進(jìn)程未退出!")); }2、為對(duì)話框添加自定義消息
在對(duì)話框中可以直接使用這兩個(gè)函數(shù),雖然這兩個(gè)函數(shù)都是發(fā)送消息,但存在一定的區(qū)別。SendMessage 函數(shù)發(fā)送出消息后,該函數(shù)SendMessage 不會(huì)立即返回,而要等到發(fā)出消息所對(duì)應(yīng)的消息處理函數(shù)執(zhí)行完畢后才能返回,繼續(xù)執(zhí)行消息函數(shù)后面的代碼。PostMessage 發(fā)出消息后立即返回,馬上執(zhí)行PostMessage后面的代碼,而不會(huì)去管消息處理函數(shù)是否執(zhí)行完畢。
三、模態(tài)對(duì)話框和非模態(tài)對(duì)話框
? ?模態(tài)對(duì)話框使用CDialog::DoModal 函數(shù)進(jìn)行創(chuàng)建。DoModel 會(huì)啟動(dòng)一個(gè)模態(tài)對(duì)話框自己的消息循環(huán),這也是模態(tài)對(duì)話框要關(guān)閉后才能使用程序其他窗口的原因。DoModel 函數(shù)在對(duì)話框關(guān)閉后才會(huì)返回。
? ?非模態(tài)對(duì)話框使用CDialog::Create 函數(shù)來實(shí)現(xiàn),Create不會(huì)啟動(dòng)新的消息循環(huán),對(duì)話框與應(yīng)用程序共用一個(gè)消息循環(huán),因此不會(huì)獨(dú)占用戶輸入
1、模態(tài)對(duì)話框
2、非模態(tài)對(duì)話框
四、通用對(duì)話框
是操作系統(tǒng)提供給所有應(yīng)用程序使用的對(duì)話框,其功能已經(jīng)實(shí)現(xiàn)好了,可以直接使用。例如,打開、保存文件對(duì)話框、字體選擇對(duì)話框、顏色選擇對(duì)話框、打印設(shè)置對(duì)話框、查找替換對(duì)話框等等。
??在VS2017中所有的通用對(duì)話框都是從CCommonDialog 繼承而來
1、文件對(duì)話框的使用
打開文件或保存文件的對(duì)話框,在文件對(duì)話框用戶可以設(shè)置路徑名和文件名等。
??類CFILEDialog 實(shí)現(xiàn)文件對(duì)話框的各種功能,構(gòu)造函數(shù)的第一個(gè)參數(shù)是TRUE 時(shí),為打開對(duì)話框;第一個(gè)參數(shù)為FALSE 時(shí),為保存對(duì)話框。
??構(gòu)造函數(shù)原型如下:
示例:
簡(jiǎn)單文件打開對(duì)話框
void CTextDlg::OnBnClickedButton1() {CFileDialog dlg(true, NULL, _T("MyDat"), NULL, NULL, this);dlg.m_ofn.lpstrInitialDir=_T("c:\\windows");dlg.DoModal(); }設(shè)置初始目錄的文件打開對(duì)話框
void CTextDlg::OnBnClickedButton1() {CFileDialog dlg(true, NULL, _T("MyDat"), NULL, NULL, this);dlg.m_ofn.lpstrInitialDir=_T("c:\\windows");dlg.DoModal();AfxMessageBox(_T("設(shè)置的目錄路徑為:") + dlg.GetFolderPath());//GetFolderPath(); }獲取文件打開對(duì)話框所選的路徑名
void CTextDlg::OnBnClickedButton1() {CFileDialog dlg(true, NULL, NULL, NULL, NULL, this);dlg.m_ofn.lpstrInitialDir=_T("c:");if(IDOK==dlg.DoModal())AfxMessageBox(_T("設(shè)置的目錄路徑為:") + dlg.GetPathName()); }獲取文件打開對(duì)話框所選的文件名
類似同上
AfxMessageBox(_T("設(shè)置的目錄路徑為:") + dlg.GetFileName());獲取文件打開對(duì)話框所選的文件標(biāo)題
AfxMessageBox(_T("設(shè)置的目錄路徑為:") + dlg.GetFileTitle());獲取所選文件的擴(kuò)展名
AfxMessageBox(_T("設(shè)置的目錄路徑為:") + dlg.GetFileExt());打開文件對(duì)話框選擇多個(gè)文件
p186
設(shè)置文件打開對(duì)話框的過濾功能
設(shè)置打開對(duì)話框的過濾功能
帶有標(biāo)題的文件打開對(duì)話框
void CTextDlg::OnBnClickedButton1() {CFileDialog dlg(true, NULL, NULL, NULL, NULL, this);dlg.m_pOFN->lpstrTitle = _T("請(qǐng)選擇要打開的文件");dlg.DoModal(); }最簡(jiǎn)單文件保存對(duì)話框
void CTextDlg::OnBnClickedButton1() {CFileDialog dlg(false, NULL, NULL, NULL, NULL, this);dlg.DoModal(); }帶自定義保存文件名的保存文件對(duì)話框
void CTextDlg::OnBnClickedButton1() {CFileDialog dlg(false, NULL,_T("Mydata"), NULL, NULL, this);dlg.DoModal(); }帶自定義文件名和擴(kuò)展名的保存文件對(duì)話框
void CTextDlg::OnBnClickedButton1() {LPCTSTR lpszFilters;lpszFilters = _T("BMP文件|*.bmp|DIB文件|*.dib||");CFileDialog dlgfile(FALSE, _T(""),_T("圖片"), OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, lpszFilters, this);if (dlgfile.DoModal()) {CString sPathName = dlgfile.GetPathName();AfxMessageBox(sPathName);} }2、字體對(duì)話框的使用
3、瀏覽文件夾對(duì)話框的使用
可以讓用戶來選擇文件夾。顯示文件夾對(duì)話框可調(diào)用系統(tǒng)函數(shù)SHBrowseForFolder 該函數(shù)由操作系統(tǒng)shell32.lib 提供可直接拿來使用。
4、查找 / 替換對(duì)話框的使用
????該對(duì)話框比較特殊,屬于非模態(tài)對(duì)話框,它的使用與其他通用對(duì)話框有所不同。注意,該對(duì)話框只是提供一個(gè)接受用戶要求的接口,使我們知道用戶提出了何種要求(返回請(qǐng)求查找 / 替換),真正的工作需要另行編程實(shí)現(xiàn)。與文件對(duì)話框相似,用戶打開文件對(duì)話框不能真的打開文件,而是讓我們知道用戶打開的文件是哪一個(gè)(圖形窗口的形式返回要打開的文件路徑)
????類CFindReplaceDialog 對(duì)該對(duì)話框進(jìn)行了封裝,作為非模態(tài)對(duì)話框必須用new 操作符來分配存儲(chǔ)空間,再用Create 函數(shù)對(duì)其進(jìn)行初始化,最后用Show Window 函數(shù)顯示對(duì)話框。里面就有成員函數(shù)Create 函數(shù)原型:
dwFlag 標(biāo)志位的標(biāo)志:
示例:
添加編輯框(Edit Control)該編輯框顯示正文內(nèi)容,設(shè)置編輯框Want Return 屬性和Multisim 屬性為True ,再為編輯框添加控件變量m_edt 和值變量 m_strEdit。添加“顯示查找對(duì)話框”,添加按鈕單擊時(shí)間處理代碼:
------ 待補(bǔ)充-----
總結(jié)
以上是生活随笔為你收集整理的2)MFC对话框程序设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: winhex的内存搜索法
- 下一篇: c语言中除号用百分号,【期末复习】人教版