C++程序設計及互動多媒體開發(fā) 課件 第5章 MFC對話框應用程序_第1頁
C++程序設計及互動多媒體開發(fā) 課件 第5章 MFC對話框應用程序_第2頁
C++程序設計及互動多媒體開發(fā) 課件 第5章 MFC對話框應用程序_第3頁
C++程序設計及互動多媒體開發(fā) 課件 第5章 MFC對話框應用程序_第4頁
C++程序設計及互動多媒體開發(fā) 課件 第5章 MFC對話框應用程序_第5頁
已閱讀5頁,還剩94頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C++程序設計第5章MFC對話框應用程序第1節(jié)Windows編程基礎第2節(jié)基于對話框的應用程序第3節(jié)靜態(tài)文本框、按鈕與編輯框第4節(jié)框架、單選按鈕、復選框第5節(jié)列表框和組合框*第6節(jié)滾動條第7節(jié)綜合舉例第1節(jié)Windows編程基礎Windows應用程序的特點使用API函數使用MFC類庫1.1Windows應用程序的特點具有標準的圖形用戶界面具有與硬件無關的特性采用“消息傳遞,事件驅動”的運行機制微軟提供的C++Windows應用程序開發(fā)方法使用WindowsAPI函數API:ApplicationProgrammingInterface應用程序接口使用MFC類庫MFC:MicroSoftFoundationClasses微軟基礎類庫1.2使用WindowsAPI函數用VC6建立一個使用WindowsAPI函數開發(fā)的Window應用程序使用VS2022建立WindowsAPI函數開發(fā)的Window應用程序主函數IntAPIENTRYwWinMain(_In_HINSTANCEhInstance,_In_opt_HINSTANCEhPrevInstance,_In_LPWSTRlpCmdLine,_In_intnCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);

//TODO:在此處放置代碼。

//初始化全局字符串

LoadStringW(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);LoadStringW(hInstance,IDC_MYWIN32PROGRAM19,szWindowClass,MAX_LOADSTRING);MyRegisterClass(hInstance);

//執(zhí)行應用程序初始化:if(!InitInstance(hInstance,nCmdShow)){returnFALSE;}HACCELhAccelTable=LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC_MYWIN32PROGRAM19));MSGmsg;

//主消息循環(huán):while(GetMessage(&msg,nullptr,0,0)){if(!TranslateAccelerator(msg.hwnd,hAccelTable,&msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return(int)msg.wParam;}1.3使用MFC用VC6建立一個使用MFC開發(fā)的Window應用程序單文檔應用程序多文檔應用程序基于對話框的應用程序用VS2022建立一個使用MFC開發(fā)的Window應用程序MFC標準樣式資源管理器樣式VisualStudio樣式Office樣式單文檔應用程序多文檔應用程序基于對話框的應用程序多個頂層文檔的應用程序后續(xù)章節(jié)著重介紹基于對話框的應用程序(第五章)和MFC樣式的單文檔應用程序(第六章)第2節(jié)基于對話框的應用程序開發(fā)過程HelloDlg程序舉例幾種常用控件的類關系結構2.1基于對話框的應用程序的開發(fā)過程(1)建立應用程序框架;(2)放置控件;(3)設置控件屬性;(4)為控件連接變量;(5)添加、編寫消息處理函數例5-1編寫對話框程序,點擊按鈕出現HelloDialog字樣。如右圖。(VS2022)(1)創(chuàng)建基于對話框的程序框架目前一句代碼都還沒寫,就已經有一個可以運行的對話框程序了。VS為我們搭好了一個程序框架。如果我們想修改對話框和程序的功能,我們只需在這個框架中找到對應的地方加入或修改代碼即可。對話框程序框架中的類結構HelloDialog中,從類視圖可看到以下三個類:CAboutDlg——關于對話框(點擊對話框標題條中的程序圖標,

在菜單中點擊“關于HelloDialog(A)”)CHelloDlgApp(C***App)——應用程序類,負責程序的啟動、結束等進程管理事務。CHelloDlgDlg(C***Dlg)——主對話框類,負責主對話框中內容的顯示、交互等事務。提示:MFC代碼框架中已有不少微軟寫的代碼。如果這些代碼暫時看不懂,不必強迫自己看,強迫自己看可能會產生心理壓力??梢詴簳r不看,暫時不看這些框架代碼也可以完成初級工作??梢噪S著學習的深入和經驗的增加而對這些框架代碼慢慢理解和最終搞懂。(2)增、刪、修改主對話框中的控件(3)繼續(xù)修改界面內容,并調整各控件的位置,如圖(4)為文本框添加變量,起名為m_sInfo打開CHelloDlgDlg.h看一看classCHelloDlgDlg:publicCDialogEx{//構造public:CHelloDlgDlg(CWnd*pParent=nullptr);//標準構造函數//對話框數據……//實現……//生成的消息映射函數

virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();DECLARE_MESSAGE_MAP()public:

CStringm_sInfo;};VS中常用的幾個窗口和視圖類視圖

顯示程序所有的類和類中的成員解決方案資源管理器

顯示了程序中所有的文件資源視圖

顯示了程序中所有的資源,如對話框、圖標、菜單、位圖等工具箱

擺放著VS支持的常用控件屬性窗口

顯示程序中的每個控件或資源的屬性(5)為按鈕添加消息響應函數?方法一:使用類向導?方法二:直接在屬性窗口中設置事件響應在HelloDlgDlg.cpp可看到新增的消息映射和消息響應函數……BEGIN_MESSAGE_MAP(CHelloDlgDlg,CDialogEx)……ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON1,&CHelloDlgDlg::OnClickedButton1)//消息映射END_MESSAGE_MAP()……voidCHelloDlgDlg::OnClickedButton1()//消息響應函數定義{

//TODO:在此添加控件通知處理程序代碼}在HelloDlg.h頭文件中可看到新增的消息響應函數聲明classCHelloDlgDlg:publicCDialogEx{……DECLARE_MESSAGE_MAP()public:CStringm_sInfo;

afx_msgvoidOnClickedButton1();//消息響應函數聲明};我們所要做的事情就是在這里增加代碼,實現所需的功能修改CHelloDlgDlg::OnClickedButton1()的代碼

voidCHelloDlgDlg::OnClickedButton1(){//TODO:在此添加控件通知處理程序代碼

m_sInfo="Hellodialogapplication!";UpdateData(FALSE);//由變量更新界面}UpdateData函數形式:BOOLUpdateData(BOOLbSaveAndValidate=TRUE)功能:當參數bSaveAndValidate為TRUE時,界面的新內容或新值保存到

所關聯(lián)的變量中。當參數bSaveAndValidate為FALSE時,由變量的內容或值更新所關

聯(lián)的界面元素。編譯運行OK!2.3MFC類庫結構見下頁圖2.4幾種常用控件的類結構CStatic類對象:靜態(tài)文本框 框架CButton類對象:命令按鈕單選按鈕

復選框CEdit類對象:編輯框

CListBox類對象:編輯框

CComboBox類對象:組合框

第3節(jié)靜態(tài)文本框、按鈕與編輯框靜態(tài)文本框按鈕文本編輯框3.1靜態(tài)文本框(StaticText)一般不需要連接變量,不需要消息處理函數缺省ID為IDC_STATIC重要屬性:Caption(標題)3.2按鈕(Button)重要屬性:Caption(標題)不需要連接變量重要消息:BN_CLICKED3.3文本編輯框(EditControl)1.重要屬性

Multiline:定義該編輯框為多行文本框。

Number:限定輸入的字符只能是數字字符。

Border:為控件創(chuàng)建邊界。

Read-only:編輯框成為只讀的,禁止用戶編輯。2.CEdit類重要成員函數從CWnd類繼承的成員函數(1)將編輯框中的內容復制出來

//復制到CString對象

voidGetWindowText(CString&rString)const;e.g.CStringch;m_e.GetWindowText(ch);//復制到數組

intGetWindowText(LPTSTRlpszStringBuf,intnMaxCount)const;e.g.charch[80];m_e.GetWindowText(ch,80);(2)設置編輯框中的內容

voidSetWindowText(LPCTSTRlpszString);e.g.charch[20]="abcdefg";m_e.SetWindowText(ch);連接變量Control類型:只能是CEdit類型

Value類型:CStringintdouble……例5-2輸入一元二次方程ax2+bx+c=0的系數a、b、c,計算并輸出兩個根x1、x2(1)建立應用程序框架

建立基于對話框的應用程序框架,步驟參看2.1(1)。程序命名為Equation。完成后如圖。(2)放置控件,布置界面?放置6個靜態(tài)文本、5個文本編輯框和1個按鈕?刪除原來“確定”和“取消”按鈕?調整對話框大小結果如圖(3)設置控件屬性按下表修改各控件的屬性控件屬性值編輯框1IDIDC_EDT_ANumberTrue編輯框2IDIDC_EDT_BNumberTrue編輯框3IDIDC_EDT_CNumberTrue編輯框4IDIDC_EDT_X1NumberTrueDisabledTrue編輯框5IDIDC_EDT_X2NumberTrueDisabledTrue按鈕IDIDC_BTN_CALCCaption計算對話框Caption解方程(4)連接變量為5個編輯框添加變量,數據類型和變量名參照下表。添加變量的方法參見2.1(4)小節(jié)控件(ID)類別變量類型名稱IDC_EDT_A值intm_nAIDC_EDT_B值intm_nBIDC_EDT_C值intm_nCIDC_EDT_X1值doublem_dX1IDC_EDT_X2值doublem_dX2完成后在類視圖中雙擊CEquation類打開Equation.h(也可以在解決方案管理器中雙擊Equation.h),可看到CEquation類定義中新增的成員變量代碼:classCEquationDlg:publicCDialogEx{……afx_msgHCURSOROnQueryDragIcon();DECLARE_MESSAGE_MAP()public:intm_nA;intm_nB;intm_nC;doublem_dX1;doublem_dX2;};另外VS在構造函數CEquationDlg()和數據交換函數DoDataExchange()中也加入了與這些新增變量相關的代碼(5)添加消息響應函數為按鈕添加BN_CLICKED事件添加響應函數。方法參見2.1(5)小節(jié)voidCEquationDlg::OnBnClickedBtnCalc(){//TODO:在此添加控件通知處理程序代碼}為OnBnClickedBtnCalc()添加代碼:voidCEquationDlg::OnBnClickedBtnCalc(){//TODO:在此添加控件通知處理程序代碼

UpdateData(TRUE);//用界面內容更新變量inta=m_nA;intb=m_nB;intc=m_nC;m_dX1=(-b+sqrt(b*b-4*a*c))/(2*a);m_dX2=(-b-sqrt(b*b-4*a*c))/(2*a);UpdateData(FALSE);//用變量更新界面內容}編譯運行

OK!第4節(jié)框架、單選按鈕、復選框框架單選按鈕復選框4.1框架作用:標識一組控件不需要連接變量,不需要處理消息。缺省ID:IDC_STATIC重要屬性:Caption(標題)提示:可使用菜單“格式”中的“對齊”、“使大小相同”、“均勻隔開”能功能協(xié)助控件的排布。4.2單選按鈕1.設計要求同一組按鈕:必須連續(xù)放入,中間不能插入其他控件 第一個按扭要選中Group屬性類向導的成員變量選項卡中第一個按鈕顯示ID2.重要屬性

ID:如IDC_RADIO1

標題:右邊顯示的文本信息

Group:一組中第一個按鈕選中該屬性3.消息

BN_CLICKED4.重要函數?設定單選按鈕選中狀態(tài)初始時使用voidCheckRadioButton(intnIDFirstButton,intnIDLastButton,intnIDCheckButton);-nIDFirstButton:一組中第一個單選按鈕的ID-nIDLastButton:一組中最后一個單選按鈕的ID-nIDCheckButton:初始時設置為選中狀態(tài)的單選按鈕ID?判定是否被選定UINTIsDlgButtonChecked(intnIDButton)const;返回值:true:選定false:沒有選定5-3一個選課的對話框示例程序,如圖,點擊確定按鈕后用AfxMessageBox消息框來顯示已選信息(1)創(chuàng)建基于對話框的程序框架建立基于對話框的應用程序框架,步驟參看2.1(1)。程序命名為Radio(2)放置控件按題目的效果要求放置入靜態(tài)文本框、文本編輯框、左邊2個單選按鈕(注意需連續(xù)放入)、右邊3個單選按鈕(注意需連續(xù)放入)、2個框架;并按圖改變各個控件的Caption。刪除“取消”按鈕,留下“確定”按鈕。(3)設置控件屬性按下表設置各個控件的屬性(4)連接變量

為文本編輯框添加變量:CStringm_sName;控件IDCaptionGroup文本編輯框IDC_EDT_NAME單選按鈕1IDC_RADIO1計算機圖形學True單選按鈕2IDC_RADIO2軟件工程False單選按鈕3IDC_RADIO3游戲設計基礎True單選按鈕4IDC_RADIO4動畫交互技術False單選按鈕5IDC_RADIO5動態(tài)網頁技術False(5)添加消息響應函數?在類視圖中找到CRadioDlg類的OnInitDialog(),添加以下代碼:BOOLCRadioDlg::OnInitDialog(){…………//TODO:在此添加額外的初始化代碼

CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);CheckRadioButton(IDC_RADIO3,IDC_RADIO5,IDC_RADIO3);returnTRUE;//除非將焦點設置到控件,否則返回TRUE}添加按鈕的消息響應函數右擊按鈕,點“類向導”,在類向導對話框中,對按鈕IDOK的BN_CLICKED消息添加處理程序。

然后在VS在RadioDlg.cpp中就添加了如下函數:voidCRadioDlg::OnBnClickedOk(){//TODO:在此添加控件通知處理程序代碼

CDialogEx::OnOK();}在OnBnClickedOk()中加入代碼:voidCRadioDlg::OnBnClickedOk(){//TODO:在此添加控件通知處理程序代碼

UpdateData(TRUE);CStrings;s=s+m_sName+_T(",您選擇了");if(IsDlgButtonChecked(IDC_RADIO1))s=s+_T("計算機圖形學、");elses=s+_T("軟件工程、");if(IsDlgButtonChecked(IDC_RADIO3))s=s+_T("游戲設計基礎。");elseif(IsDlgButtonChecked(IDC_RADIO4))s=s+_T("動畫交互技術");elses=s+_T("動態(tài)網頁技術");AfxMessageBox(s);

//CDialogEx::OnOK();}OK!4.3復選框1.重要屬性ID:如IDC_CHECK1標題:右邊顯示的文本信息2.連接變量一般連接到Value類別BOOL類型的變量3.消息BN_CLICKED例5-4修改前例,把右邊的課程改為復選框,可多選。(1)打開前例程序(2)放置控件刪除右邊的單選按鈕,并在CRadioDlg::OnInitDialog()中去除上例添加的兩句CheckRadioButton(…)代碼加入三個復選框按鈕(3)修改控件屬性按照圖中修改3個復合框的標題(即Caption)(4)連接變量在類向導中為三個復選框添加三個變量,都選擇值類型,BOOL類型。最后RadioDlg.h中可看到:classCRadioDlg:publicCDialogEx{……BOOLm_bCourse1;BOOLm_bCourse2;BOOLm_bCourse3;};修改按鈕點擊的響應函數OnBnClickedOk()voidCRadioDlg::OnBnClickedOk(){//TODO:在此添加控件通知處理程序代碼

UpdateData(TRUE);CStrings;s=s+m_sName+_T(",您選擇了");if(IsDlgButtonChecked(IDC_RADIO1))s=s+_T("計算機圖形學");elses=s+_T("軟件工程");

//if(IsDlgButtonChecked(IDC_RADIO3))if(m_bCourse1)s=s+_T("、游戲設計基礎");

//elseif(IsDlgButtonChecked(IDC_RADIO4))

if(m_bCourse2)s=s+_T("、動畫交互技術");//if(IsDlgButtonChecked(IDC_RADIO3))if(m_bCourse1)s=s+_T("、游戲設計基礎");//elseif(IsDlgButtonChecked(IDC_RADIO4))if(m_bCourse2)s=s+_T("、動畫交互技術");//elseif(m_bCourse3)s=s+_T("、動態(tài)網頁技術");s=s+_T("。");AfxMessageBox(s);//CDialogEx::OnOK();}OK!第5節(jié)列表框和組合框列表框組合框5.1列表框1.重要屬性Selection:選擇方式

Single──單項選擇

Multiple──多項選擇,但是忽略Ctrl和Alt鍵。

Extended──允許使用Ctrl和Alt進行多項選擇,

None──禁止選擇Sort:排序2.CListBox成員函數

添加:intAddString(LPCTSTRlpszItem);

示列:m_l.AddString(“張三");

刪除:intDeleteString(UINTnIndex);示例:m_l.DeleteString(4); //刪除第5個說明:下標從0開始

獲取當前選定項的序號格式:intGetCurSel()const;示例:inti=m_l.GetCurSel();

獲取指定項intGetText(intnIndex,LPTSTRlpszBuffer)const;voidGetText(intnIndex,CString&rString)const;示例:

chars1[20];CStrings2;,

m_l.GetText(3,s1); //讀入數組

m_l.GetText(3,s2); //讀入CString對象例5-5操作列表框,使用對應按鈕對列表框內容進行修改(1)創(chuàng)建程序框架

創(chuàng)建基于對話框的MFC程序框架(2)放置控件

使用工具箱,放入1個列表框、1個文本編輯框、4個按鈕。按圖修改四個按鈕的標題。(3)修改控件屬性

按有圖修改控件屬性控件ID列表框IDC_LST_COURSE文本編輯框IDC_EDT_TEXT“添加”按鈕IDC_BTN_ADD“刪除”按鈕IDC_BTN_DEL“取值”按鈕IDC_BTN_GET“修改”按鈕IDC_BTN_MOD(4)連接變量在類向導中為列表框和文本編輯框添加變量完成后在主對話框類定義中可見:CStringm_sText;CListBoxm_lbCourse;(5)修改、添加相關消息響應函數修改主對話框類的OnInitDialog()BOOLCEx5Dlg::OnInitDialog(){…………//TODO:在此添加額外的初始化代碼

m_lbCourse.AddString(_T("數字媒體基礎"));m_lbCourse.AddString(_T("C++程序設計"));m_lbCourse.AddString(_T("Java程序設計"));m_lbCourse.AddString(_T("游戲開發(fā)技術"));returnTRUE;//除非將焦點設置到控件,否則返回TRUE}使用類向導為四個按鈕添加消息響應函數

使用類視圖或解決方案管理器找到剛剛添加的四個按鈕消息響應函數,修改它們的代碼voidCEx5Dlg::OnClickedBtnAdd(){//TODO:在此添加處理程序代碼

UpdateData(TRUE);m_lbCourse.AddString(m_sText);m_sText="";UpdateData(FALSE);}voidCEx5Dlg::OnClickedBtnDel(){//TODO:在此添加處理程序代碼

intn=m_lbCourse.GetCurSel();m_lbCourse.DeleteString(n);}voidCEx5Dlg::OnClickedBtnGet(){//TODO:在此添加處理程序代碼

CStrings;intn=m_lbCourse.GetCurSel();m_lbCourse.GetText(n,s);m_sText=s;UpdateData(FALSE);}voidCEx5Dlg::OnClickedBtnMod(){//TODO:在此添加處理程序代碼

UpdateData(TRUE);intn=m_lbCourse.GetCurSel();m_lbCourse.DeleteString(n);m_lbCourse.InsertString(n,m_sText);m_sText="";UpdateData(FALSE);}OK!5.2組合框1.重要屬性?Type:組合框形式Simple:列表始終展開,文本框可編輯DropDown:點擊下拉箭頭時列表才展開,文本框可編輯

下拉列表:點擊下拉箭頭列表才展開,只能選擇,文本框不能編輯?Data:輸入列表框初始數據,以英文分號“;”分隔。2.CComboBox重要函數?獲得文本框的字符串intGetLBText(intnIndex,LPTSTRlpszText)const;voidGetLBText(intnIndex,CString&rString)const;重要消息CBN_SELECTCHANGE:選項改變CBN_EDITCHANGE:編輯框中文本改變例5-6點擊確定按鈕,則用MessageBox顯示選擇的信息(1)創(chuàng)建基于對話框的MFC應用程序框架(2)放置控件

放入2個靜態(tài)文本、一個組合框、一個文本編輯框、一個按鈕。按圖設置靜態(tài)文本和按鈕控件的標題(3)設置控件屬性控件IDTypeData組合框IDC_CBO_BRAND下拉列表華為;小米;三星;蘋果文本編輯框IDC_EDT_NUM按鈕IDC_BTN_OK(4)連接變量使用類向導為組合框和文本框添加變量,變量類型和名稱如圖(5)添加消息響應函數?使用類向導為按鈕添加點擊的消息響應函數?在新增的消息響應函數中添加代碼voidCEx6Dlg::OnClickedBtnOk(){//TODO:在此添加控件通知處理程序代碼UpdateData(TRUE);CStrings;s="您計劃采購的手機品牌:";s=s+m_sBrand;s=s+_T("\n");s=s+_T("數量:");s=s+m_sNumber;MessageBox(s);}OK!*第6節(jié)滾動條滾動條滾動條1.CScrollBar重要函數?設置最大值和最小值voidSetScrollRange(intnMinPos,//最小值intnMaxPos,//最大值BOOLbRedraw=TRUE);//TRUE時重畫?設置滑塊的位置intSetScrollPos(intnPos,//滑塊的位置BOOLbRedraw=TRUE);//TRUE時重畫2.相關消息滾動條沒有消息對話框卻能接收到WM_Hscroll(WM_Vscroll)voidCTESTDlg::OnHScroll(UINTnSBCode,//用戶正在進行的操作,每個值的含義如下表UINTnPos,//滑塊當前位置CScrollBar*pScrollBar)//指向用戶正在操作的滾動條{ //TODO:Addyourmessagehandlercodehereand/orcalldefault……此處加入新代碼…… CDialog::OnHScroll(nSBCode,nPos,pScrollBar);}nSBCode值含義(用戶正在進行的操作)SB_THUMBTRACK拖動滑塊SB_LINELEFT/SB_LINEUP單擊向上(左)的箭頭SB_LINERIGHT/SB_LINEDOWN單擊向下(右)的箭頭SB_PAGELEFT/SBPAGEUP單擊向上(左)箭頭與滾動塊之間的區(qū)域SB_PAGERIGHT/SBPAGEDOWN單擊向上(左)箭頭與滾動塊之間的區(qū)域例5-7實現如下功能:滾動條最小值為0,最大值為100,單擊滾動條兩端箭頭時滑塊移動的增量值為1,單擊滾動條中的空白處(滑塊與兩端箭頭之間的區(qū)域)時滑塊移動的增量值為10。另有一個只讀的編輯框,顯示了滑塊當前位置所代表的值。(1)創(chuàng)建基于對話框的MFC應用程序框架(2)放置控件放置1個滾動條和1個文本編輯框(3)修改控件屬性控件IDDisabled滾動條IDC_SCR_BARFalse文本編輯框IDC_EDT_NUM(4)連接變量(5)添加消息響應函數?在OnInitDialog()中完成初始化BOOLCScrollBarDlg::OnInitDialog(){……//TODO:在此添加額外的初始化代碼

m_scrBar.SetScrollRange(0,100);//設置滾動條最大最小值

m_scrBar.SetScrollPos(50);//設置滑塊位置

m_nVal=50;//初始時,編輯框顯示50

UpdateData(FALSE);//更新編輯框顯示的內容

returnTRUE;//除非將焦點設置到控件,否則返回TRUE}?在類向導里為對話框添加WM_HSCROLL的消息響應函數OnHScroll()?對OnHScroll()添加代碼:voidCScrollBarDlg::OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){//TODO:在此添加消息處理程序代碼和/或調用默認值

if(pScrollBar==&m_scrBar){intnCurrentPos;switch(nSBCode){caseSB_THUMBTRACK://拖動滾動滑塊時

m_scrBar.SetScrollPos(nPos);m_nVal=nPos;break;caseSB_LINELEFT://單擊滾動條向左的箭頭

nCurrentPos=m_scrBar.GetScrollPos();nCurrentPos-=1;if(nCurrentPos<0)nCurrentPos=0;m_scrBar.SetScrollPos(nCurrentPos);m_nVal=nCurrentPos;break;caseSB_LINERIGHT://單擊滾動條向右的箭頭

nCurrentPos=m_scrBar.GetScrollPos();nCurrentPos+=1;if(nCurrentPos>100)nCurrentPos=100;m_scrBar.SetScrollPos(nCurrentPos);m_nVal=nCurrentPos;break;caseSB_PAGELEFT://單擊左箭頭和滑塊之間區(qū)域

nCurrentPos=m_scrBar.GetScrollPos();nCurrentPos-=10;if(nCurrentPos<0)nCurrentPos=0;m_scrBar.SetScrollPos(nCurrentPos);m_nVal=nCurrentPos;break;caseSB_PAGERIGHT://單擊右箭頭和滑塊之間區(qū)域

nCurrentPos=m_scrBar.GetScrollPos();nCurrentPos+=10;if(nCurrentPos>100)nCurrentPos=100;m_scrBar.SetScrollPos(nCurrentPos);m_nVal=nCurrentPos;break;}}UpdateData(FALSE);CDialogEx::OnHScroll(nSBCode,nPos,pScrollBar);}OK!第7節(jié)綜合舉例備忘提醒器例5-8如圖所示,編寫一個基于對話框的備忘錄。勾選當前時間的復選框可以控制日期和時間顯示。填寫好提醒時間和提醒內容后,點擊按鈕啟動提醒功能。到了提醒時間,程序彈出對話框進行備忘提醒。步驟:(1)建立基于對話框的應用程序框架程序取名為Memo(2)按題圖要求放置控件并設置好標題(3)設置控件屬性控件ID標題MinimizeBoxDisableMultilineAutoHScrollAutoVScrollVetricalScroll對話框備忘提醒器True文本框3IDC_EDT_INFOTrueFalseTrueTrue文本框1IDC_EDT_NOWTrue文本框2IDC_EDT_ATIME復選框IDC_CHK_SHOW顯示日期時間按鈕IDCANCEL退出程序按鈕IDOK啟動提醒(4)為控件連接變量在類向導中操作,在主對話框類中為以下控件添加變量控件ID所屬類變量類型變量名稱復選框IDC_CHK_SHOWCMemoDlgBOOLm_bShowTime文本框1IDC_EDT_NOWCMemoDlgCStringm_sNow文本框2IDC_EDT_ATIMECMemoDlgCStringm_sAlarmTime文本框3IDC_EDT_INFOCMemoDlgCStringm_sInfo按鈕IDOKCMemoDlgCButtonm_btnStart(5)添加消息響應函數為復選框和啟動提醒按鈕添加兩個消息響應函數命令ID/消息消息響應函數名IDC_CHK_SHOWBN_CLICKEDOnClickedChkShowIDC_OKBN_CLICKEDOnBnClickedOk為OnClickedChkShow()添加代碼//該函數功能為:勾上復選框,下面的文本框就顯示當前日期時間voidCMemoDlg::OnClickedChkShow(){//TODO:在此添加控件通知處理程序代碼

UpdateData(TRUE);if(m_bShowTime==TRUE){CTimetime=CTime::GetCurrentTime();

//構造“YYYY-MM-DD”形式的日期字符串和“HH:MM:SS”的時間字符串

m_sNow=time.Format("%Y-%m-%d%H:%M:%S");}elsem_sNow="";UpdateData(FALSE);}CTime類封裝了日期和時間靜態(tài)成員GetCurrentTime()返回系統(tǒng)當前的日期和時間。為OnBnClickedOk()函數添加代碼先了解設計思路:按下“啟動提醒”按鈕,就進入一個無限循環(huán),程序每隔5秒中檢查一下時間是否已到。如果時間已到,就彈出消息框提醒。voidCMemoDlg::OnBnClickedOk(){//TODO:在此添加控件通知處理程序代碼m_btnStart.EnableWindow(FALSE);//禁用按鈕,使其變灰色

UpdateData(TRUE);if(m_sAlarmTime.IsEmpty())return;

//從文本框2中取出字符串,轉成CTime格式CTimetmAlarm;USES_CONVERSION;//(4)char*pBuf=T2A(m_sAlarmTime);//(3)

intY,M,D,h,m,s;sscanf_s(pBuf,"%d-%d-%d%d:%d:%d",&Y,&M,&D,&h,&m,&s);//(2)tmAlarm=CTime(Y,M,D,h,m,s);//(1)句CTimetmNow;while(1){tmNow=CTime::GetCurrentTime();if(tmNow>tmAlarm){CStringsAlarm;sAlarm.Format(_T("時間到!\n%s"),m_sInfo);AfxMessageBox(sAlarm);m_btnStart.EnableWindow(TRUE);//按鈕再啟用,可以繼續(xù)設置提醒

break;}Sleep(5000);//程序暫停5秒,不要老是占著CPU}//刪除CDialogEx::OnOK();//注釋掉這句,否則對話框會退出}OK!例5-9編寫一個文字錄入速度測試程序。仿照給定文章快速錄入文字,提交后使用錄入正確的文字計算出文字錄入速度。錄入第一個錯誤處對文字進行選中點亮以作提示。程序編寫步驟(1)建立基于對話框的應用程序框架程序取名為InputTest(2)按題圖要求放置控件并設置好標題。(3)設置控件屬性控件IDMinimizeBoxDisableMultilineAutoHScrollAutoVScrollVetricalScrollTypeData對話框True文本框1IDC_EDT_EXAMCARD文本框2IDC_EDT_NAME文本框3IDC_EDT_QUETEXTTrueTrueFalseTrueTrue文本框4IDC_EDT_INPUTTEXTTrueTrueFalseTrueTrue組合框IDC_CBO_QUEID下拉列表Q001;Q002;按鈕IDC_BTN_BEGIN按鈕IDC_BTN_SUBMIT按鈕IDCANCEL(4)為控件連接變量(5)添加消息響應函數為組合框的選擇變化消息、“開始測試”按鈕的點擊消息、“提交”按鈕的點擊消息、錄入文本框的編輯變化消息添加響應函數為OnSelchangeCboQueid()添加代碼//當組合框選擇不同題號時,題目文字文本框會出現不同的文章voidCInputTestDlg::OnSelchangeCboQueid(){//TODO:在此添加控件通知處理程序代碼

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論