VC實(shí)驗(yàn)指導(dǎo)書_第1頁
VC實(shí)驗(yàn)指導(dǎo)書_第2頁
VC實(shí)驗(yàn)指導(dǎo)書_第3頁
VC實(shí)驗(yàn)指導(dǎo)書_第4頁
VC實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩96頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、VC+系統(tǒng)開發(fā)實(shí)驗(yàn)指導(dǎo)書河北經(jīng)貿(mào)大學(xué)信息技術(shù)學(xué)院2021年3月前言程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程,通過實(shí)驗(yàn)可以穩(wěn)固和加強(qiáng)課堂教學(xué)內(nèi)容,提高學(xué)生實(shí)際工作能力和動手能力,并為后續(xù)課程和從事實(shí)踐技術(shù)工作奠定重要的根底。因此,學(xué)生在進(jìn)行理論知識學(xué)習(xí)的同時(shí),必須十分重視實(shí)踐環(huán)節(jié)-上機(jī)。上機(jī)實(shí)驗(yàn)時(shí)應(yīng)該一人一組,獨(dú)立上機(jī)。在上機(jī)過程中出現(xiàn)的問題,一般應(yīng)自己獨(dú)立處理,學(xué)生應(yīng)在實(shí)驗(yàn)前將教師指定的題目編好程序,然后上機(jī)輸入和調(diào)試。上機(jī)前應(yīng)事先作好準(zhǔn)備工作,以提高上機(jī)實(shí)驗(yàn)的效率,準(zhǔn)備工作至少應(yīng)包括:u 復(fù)習(xí)和掌握與本實(shí)驗(yàn)有關(guān)的教學(xué)內(nèi)容。u 準(zhǔn)備好上機(jī)所需的程序。u 對運(yùn)行中可能出現(xiàn)的問題應(yīng)事先作出估計(jì);對程序中有疑

2、問的地方,應(yīng)做上記號,以便上機(jī)時(shí)給予注意。u 準(zhǔn)備好調(diào)試和運(yùn)行時(shí)所需的數(shù)據(jù)。本實(shí)驗(yàn)指導(dǎo)由趙寶琴編寫,由于時(shí)間倉促和水平所限,其中難免有不當(dāng)和欠妥之處,敬請各位讀者批評指正。 目錄實(shí)驗(yàn)一 熟悉VC+開發(fā)環(huán)境1實(shí)驗(yàn)二 面向?qū)ο蟪绦蛟O(shè)計(jì)2實(shí)驗(yàn)三 對話框和控件12實(shí)驗(yàn)四 菜單、工具欄和狀態(tài)欄21實(shí)驗(yàn)五 圖形設(shè)備接口與繪圖25實(shí)驗(yàn)六 數(shù)據(jù)庫編程28實(shí)驗(yàn)七 文件的存取38實(shí)驗(yàn)八 綜合實(shí)驗(yàn)39實(shí)驗(yàn)一 熟悉VC+開發(fā)環(huán)境一、實(shí)驗(yàn)?zāi)康?、熟悉的開發(fā)環(huán)境工具欄及各種窗口。2、顯示和隱藏工具欄。3、使用AppWizard創(chuàng)立一個單文檔應(yīng)用程序。二、實(shí)驗(yàn)內(nèi)容與步驟使用AppWizard向?qū)?chuàng)立一個單文檔應(yīng)用程序,運(yùn)行

3、該程序,將在單文檔窗口中顯示“Hello,This is my first program!的字符串。1、 建立Application1. 翻開Visual C+,從“文件菜單項(xiàng)選擇擇“新建命令。2. 在“新建對話框中,選擇“工程選項(xiàng)卡,選擇MFC AppWizardexe,在工程文本框中鍵入應(yīng)用程序的名字“Hello,其它使用默認(rèn)值。單擊“下一步。3. 在“MFC AppWizard-Step 1”對話框中選擇“單個文檔選項(xiàng),單擊“完成。說明:MFC AppWizard-Step向?qū)Ч灿辛鶄€對話框,我們在向?qū)?中即單擊完成,因?yàn)槲覀儗竺娴膬?nèi)容均使用向?qū)У哪J(rèn)值。2、 添加程序代碼在工程工作

4、區(qū),單擊file 標(biāo)簽,在文件中添加相應(yīng)代碼:void CHelloView:OnDraw(CDC* pDC)CHelloDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CRect r; /創(chuàng)立矩形對象GetClientRect(&r); /獲取窗口大小int x=r.right/2,y=r.bottom/2;/設(shè)置文字顯示的起始位置pDC->SetTextAlign(TA_CENTER|TA_BASELINE);/設(shè)置文字顯示的相對位置pDC->TextOut(x,y,"Hello,this is my first pr

5、ogram.");/顯示文字/ TODO: add draw code for native data here3、 建立并運(yùn)行該程序?qū)嶒?yàn)二 面向?qū)ο蟪绦蛟O(shè)計(jì)一、實(shí)驗(yàn)?zāi)康囊弧?掌握C+中類和對象的定義和使用。二、 掌握構(gòu)造函數(shù)和析構(gòu)函數(shù)的特點(diǎn)。三、 了解靜態(tài)成員的使用。四、 熟悉繼承和多態(tài)性的實(shí)現(xiàn)。二、實(shí)驗(yàn)內(nèi)容與步驟一根本實(shí)驗(yàn)1. 練習(xí)課本中的【例】,掌握類的定義和使用。2. 練習(xí)課本中的【例】,掌握派生類的定義和使用。3. 練習(xí)課本中的【例】,熟悉虛函數(shù)和多態(tài)性的實(shí)現(xiàn)。二拓展與提高利用面向?qū)ο缶幊谭椒ㄔO(shè)計(jì)一個學(xué)生成績單管理系統(tǒng),要求實(shí)現(xiàn)以下功能:1、 錄入添加學(xué)生信息:學(xué)號、姓名、

6、平時(shí)成績和考試成績,系統(tǒng)自動計(jì)算總評成績平時(shí)成績占20%,考試成績占80%??梢砸淮武浫攵嗝麑W(xué)生的信息。2、 查詢學(xué)生成績:輸入要查詢的學(xué)生的學(xué)號,查詢該學(xué)生的信息并顯示。3、 顯示學(xué)生成績單:按學(xué)號順序顯示學(xué)生成績單。4、 刪除學(xué)生信息:輸入要刪除的學(xué)生的學(xué)號,得到用戶確認(rèn)后,刪除該學(xué)生的信息。5、 修改學(xué)生信息:輸入要修改的學(xué)生的學(xué)號,顯示該學(xué)生的原有信息,用戶輸入修改后的信息。6、 對成績進(jìn)行統(tǒng)計(jì)分析:可以對總成績進(jìn)行統(tǒng)計(jì)分析,分別統(tǒng)計(jì)出各個成績段的人數(shù)和比例, 本課程班級平均成績等。實(shí)驗(yàn)步驟如下:1. 創(chuàng)立工程創(chuàng)立一個Win32 Console Application,工程名為“Stu

7、dentScore。2. 定義學(xué)生類CStudent1新建一個“C/C+ Header File,文件名為“,代碼如下:/ student.h 學(xué)生類的定義class CStudent public: CStudent( char * id="", char *na="",int us=0, int ts=0 ); / 構(gòu)造函數(shù)CStudent( const CStudent &s ); / 拷貝構(gòu)造函數(shù)CStudent(); char* GetID(); / 獲取學(xué)生的學(xué)號double GetTotalScore(); / 獲取總評成績stat

8、ic void TableHead( ); / 輸出表頭void Display( ); / 顯示學(xué)生信息private:char ID5; / 學(xué)號char name10; / 姓名int UsualScore; / 平時(shí)成績int TestScore; / 考試成績double TotalScore; / 總評成績void CalcTotalScore(); / 計(jì)算總評成績;2新建一個“C+ Source File,文件名為“,代碼如下:/ student.cpp 學(xué)生類的成員函數(shù)實(shí)現(xiàn)#include <iomanip.h>#include <string.h>#

9、include "student.h"CStudent:CStudent( char * id, char *na,int us, int ts ) / 構(gòu)造函數(shù) strcpy(ID,id);strcpy(name,na); UsualScore=us; TestScore=ts; CalcTotalScore(); CStudent:CStudent( const CStudent &s ) / 拷貝構(gòu)造函數(shù) strcpy( ID, s.ID );strcpy( name, );UsualScore=s.UsualScore;TestScore=s.

10、TestScore;TotalScore=s.TotalScore;CStudent:CStudent() char* CStudent:GetID() / 取得學(xué)生的學(xué)號return ID; double CStudent:GetTotalScore() / 獲取總成績r(jià)eturn TotalScore;void CStudent:TableHead( ) / 輸出學(xué)生信息表頭 cout<<setw(4)<<"學(xué)號"<<setw(10)<<"姓名"<<setw(10)<<"

11、;平時(shí)成績"<<setw(10)<<"考試成績"<<setw(12)<<"總成績n" void CStudent:Display( ) / 顯示學(xué)生信息cout<<setw(3)<<ID<<setw(10)<<name<<setw(10)<<UsualScore <<setw(10)<<TestScore<<setw(10)<<TotalScore<<endl; vo

12、id CStudent:CalcTotalScore() / 計(jì)算總成績TotalScore= UsualScore*0.2 + TestScore*0.8; 3. 定義成績單類CStuDataBase1新建一個“C/C+ Header File,文件名為“,代碼如下:/ StuDataBase.h 定義成績單類,用來管理所有學(xué)生的成績信息#include "student.h"const int MaxStuNum=51; / 班級學(xué)生人數(shù)最多50人 class CStuDatabase public:CStuDatabase(); / 構(gòu)造函數(shù),從文件中讀入學(xué)生成績信息

13、CStuDatabase(); / 析構(gòu)函數(shù),將學(xué)生成績信息寫入到文件中 void ListScore( ); / 顯示成績單,輸出所有學(xué)生信息 void SelectStuInfo( ); / 查詢學(xué)生信息 void AddStuInfo( ); / 添加學(xué)生成績 void DelStuInfo( ); / 刪除學(xué)生信息 void EditStuInfo( ); / 修改學(xué)生信息 void AnalyScore( ); / 對成績進(jìn)行統(tǒng)計(jì)分析void StuDBM( int ); / 成績庫維護(hù)int FunctionMenu(); / 功能菜單private: int num; / 學(xué)生人

14、數(shù) CStudent stuMaxStuNum; / 學(xué)生數(shù)組,stu0不用int SearchStu(const char* id); / 查找指定學(xué)號的學(xué)生void SortStu( ); / 按學(xué)號從小到大對成績單排序 ;2新建一個“C+ Source File,文件名為 “,代碼如下:/ StuDataBase.cpp 成績單類的實(shí)現(xiàn)#include <fstream.h>#include <string.h>#include <stdlib.h>#include <iomanip.h>#include <conio.h>#i

15、nclude "StuDataBase.h"int InputScore( ) / 輸入百分制成績 int score;cin>>score;while ( score<0 | score>100 ) cout<<"成績超出范圍,請重新輸入百分制成績0-100分:"cin>>score;return score;CStuDatabase:CStuDatabase() / 從文件中讀入學(xué)生信息 CStudent s; / 學(xué)生對象num=0;fstream StuFile; / 該文件用來保存學(xué)生信息StuF

16、ile.open( "StuInfo.dat", ios:in );if ( !StuFile ) cout<<"文件不能翻開!n" return; StuFile.read( (char*)&s, sizeof(s) );while ( !StuFile.eof() ) num+; stunum=s; StuFile.read( (char*)&s, sizeof(s) ); StuFile.close(); CStuDatabase:CStuDatabase() / 將學(xué)生信息寫入到文件中fstream StuFile;

17、/ 該文件用來保存學(xué)生信息StuFile.open( "StuInfo.dat", ios:out );if ( !StuFile )cout<<"文件不能創(chuàng)立!n" return;for ( int i=1; i<=num; i+ ) StuFile.write( (char*)&stui, sizeof(stui) );StuFile.close(); int CStuDatabase:SearchStu(const char * id) / 查找指定學(xué)號的學(xué)生for ( int i=1; i<=num; i+ )if

18、 ( strcmp(stui.GetID(),id)=0 )return i;return -1; int CStuDatabase:FunctionMenu() /功能菜單int FuncNum; / 保存操作編號system("cls"); /清屏cout<<"nnn"cout<<setw(20)<<' '<<"*nnn"cout<<setw(24)<<' '<<"請選擇要進(jìn)行的操作:nn"cou

19、t<<setw(28)<<' '<<"1 - 查詢學(xué)生成績nn"<<setw(28)<<' '<<"2 - 顯示學(xué)生成績單nn"<<setw(28)<<' '<<"3 - 添加學(xué)生信息nn"<<setw(28)<<' '<<"4 - 刪除學(xué)生信息nn"<<setw(28)<<'

20、'<<"5 - 修改學(xué)生信息nn"<<setw(28)<<' '<<"6 - 對成績進(jìn)行統(tǒng)計(jì)分析nn"<<setw(28)<<' '<<"0 - 退出nnn"cout<<setw(20)<<' '<<"*nnn"cin>>FuncNum;while ( FuncNum<0 | FuncNum>6 )cout<&l

21、t;"請重新選擇要進(jìn)行的操作:"<<endl;cin>>FuncNum; return FuncNum;void CStuDatabase:StuDBM( int FuncNum ) / 成績維護(hù)switch ( FuncNum )case 1: SelectStuInfo(); break; / 查詢學(xué)生成績case 2: ListScore( ); break; / 顯示成績單case 3: AddStuInfo( ); break; / 添加學(xué)生信息case 4: DelStuInfo( ); break; / 刪除學(xué)生信息case 5: Ed

22、itStuInfo( ); break; / 修改學(xué)生信息case 6: AnalyScore( ); break; / 對成績進(jìn)行統(tǒng)計(jì)分析void CStuDatabase:SelectStuInfo( ) / 查詢學(xué)生信息system("cls"); /清屏char no5; / 臨時(shí)保存學(xué)號cout<<"n請輸入要查詢的學(xué)生學(xué)號:"<<endl;cin>>no;int i=SearchStu(no);if ( i=-1 )cout<<"n你查找的學(xué)生不存在!n"else cout&

23、lt;<"n你所查找的學(xué)生成績?nèi)缦拢簄n "CStudent:TableHead( ); / 輸出表頭stui.Display(); cout<<"n按任意鍵返回."<<endl; getch(); void CStuDatabase:ListScore( ) / 顯示成績單system("cls"); /清屏if ( num = 0 )cout<<"當(dāng)前還沒有學(xué)生成績!n" elseSortStu( ); / 按學(xué)號對成績單排序 CStudent:TableHead( )

24、; / 輸出表頭for ( int i=1; i<=num; i+ )stui.Display();cout<<"n共有 "<<num<<" 條學(xué)生成績信息n"cout<<"n顯示成績完畢!nn按任意鍵返回."<<endl;getch(); void CStuDatabase:AddStuInfo( ) / 添加學(xué)生成績system("cls"); /清屏 char no5; / 臨時(shí)保存學(xué)號cout<<"請輸入要添加的學(xué)生的學(xué)

25、號輸入 -1 結(jié)束:"cin>>no;while ( strcmp(no,"-1")!=0 )int i=SearchStu( no ); while ( i!=-1 )cout<<"n你添加的學(xué)生已存在!n請重新輸入學(xué)號-1結(jié)束:"cin>>no;if ( strcmp(no,"-1")=0 )cout<<"n本次操作完成!nn按任意鍵返回."<<endl;getch();return;i=SearchStu( no ); num+;char

26、na10;cout<<"n請輸入要添加的學(xué)生的姓名:"cin>>na;cout<<"n請輸入要添加的學(xué)生的平時(shí)成績:n"int us = InputScore();cout<<"n請輸入要添加的學(xué)生的考試成績:n"int ts = InputScore();CStudent s(no,na,us,ts);stunum=s;cout<<"nn請輸入要添加的學(xué)生的學(xué)號輸入 -1 結(jié)束:" cin>>no; cout<<"n本次

27、操作完成!nn按任意鍵返回."<<endl;getch(); void CStuDatabase:DelStuInfo( ) / 刪除學(xué)生信息模塊system("cls"); /清屏 char no5; / 臨時(shí)保存學(xué)號cout<<"n請輸入要刪除的學(xué)生學(xué)號:"<<endl;cin>>no;int i=SearchStu( no );if ( i=-1 )cout<<"n你要刪除的學(xué)生不存在!n" else cout<<"n您所刪除的學(xué)生信息如

28、下:nn "CStudent:TableHead( ); / 輸出表頭stui.Display();char anser;cout<<"n是否真的要刪除該學(xué)生?Y/N:"cin>>anser;if ( anser='y' | anser='Y') for ( int j=i+1; j<=num; j+ )stuj-1=stuj;num-;cout<<"n刪除信息成功!"<<endl; cout<<"nn按任意鍵返回."<&

29、lt;endl; getch(); void CStuDatabase:EditStuInfo( ) / 修改學(xué)生信息模塊system("cls"); /清屏 char no5; / 臨時(shí)保存學(xué)號 cout<<"n請輸入要修改的學(xué)生學(xué)號:"<<endl;cin>>no;int i=SearchStu( no );if ( i=-1 )cout<<"n你要修改的學(xué)生不存在!n" else cout<<"n您所修改的學(xué)生成績?nèi)缦拢簄n "CStudent:Ta

30、bleHead( ); / 輸出表頭stui.Display(); cout<<"n請輸入學(xué)生的新信息:"cout<<"n請輸入學(xué)生的姓名:"char na10;cin>>na;cout<<"n請輸入學(xué)生的平時(shí)成績:n"int us = InputScore(); cout<<"n請輸入學(xué)生的考試成績:n" int ts = InputScore(); CStudent s(no,na,us,ts);stui=s;cout<<"n修改

31、信息成功!"<<endl;cout<<"nn按任意鍵返回."<<endl;getch();void CStuDatabase:AnalyScore( ) / 對成績進(jìn)行統(tǒng)計(jì)分析system("cls"); / 清屏 int c5=0; / 用來保存各個分?jǐn)?shù)段的人數(shù) double AveScore=0; / 用來保存所有學(xué)生的平均成績double ts; / 臨時(shí)保存總評成績for ( int i=1; i<=num; i+ )ts=stui.GetTotalScore();AveScore+=ts;sw

32、itch ( int( ts/10 ) )case 10:case 9: c0+; break; / 90含90分以上人數(shù) case 8: c1+; break; / 80含80-90不含90 分人數(shù) case 7: c2+; break; / 70含70-80不含80 分人數(shù) case 6: c3+; break; / 60含60-70不含70 分人數(shù) default: c4+; break; / 不及格人數(shù) AveScore/=num;cout<<"n學(xué)生成績分布情況如下:nn"cout<<"優(yōu)秀90分-100分人數(shù):"<

33、;<c0<<",t占 "<<double(c0)/num*100<<" %nn"cout<<"良好80分- 89分人數(shù):"<<c1<<",t占 "<<double(c1)/num*100<<" %nn" cout<<"中等70分- 79分人數(shù):"<<c2<<",t占 "<<double(c2)/num*100

34、<<" %nn"cout<<"及格60分- 69分人數(shù):"<<c3<<",t占 "<<double(c3)/num*100<<" %nn"cout<<"不及格 60分以下 人數(shù):"<<c4<<",t占 "<<double(c4)/num*100<<" %nn"cout<<"學(xué)生總?cè)藬?shù)為:"<

35、;<num<<endl;cout<<"n班級平均成績?yōu)椋?quot;<<AveScore<<endl;cout<<"n按任意鍵返回."<<endl;getch(); void CStuDatabase:SortStu( ) / 按學(xué)號從小到大對成績單排序int i, j, k;for ( i=1; i<num; i+ )k=i;for ( j=i+1; j<=num; j+ )if ( strcmp( stuj.GetID(),stuk.GetID() )<0 )k=j

36、; CStudent temp=stui; stui=stuk; stuk=temp;4. 定義主程序新建一個“C+ Source File,文件名為“,代碼如下:#include <iomanip.h>#include <conio.h>#include "StuDataBase.h"void welcome();void main()welcome(); / 歡送畫面CStuDatabase stuDB; / 生成成績單對象int FuncNum; / 保存操作編號FuncNum=stuDB.FunctionMenu(); / 顯示功能菜單whi

37、le ( FuncNum!=0 )stuDB.StuDBM( FuncNum ); / 學(xué)生庫管理FuncNum=stuDB.FunctionMenu();void welcome()cout<<"nnn"cout<<setw(20)<<' '<<"*nnn"cout<<setw(24)<<' '<<"歡送使用學(xué)生成績單管理系統(tǒng)nnn"cout<<setw(20)<<' '<

38、<"*nnn"cout<<"n按任意鍵繼續(xù)."<<endl; getch(); 實(shí)驗(yàn)三 對話框和控件一、實(shí)驗(yàn)?zāi)康膌 掌握模式對話框與非模式對話框的創(chuàng)立與使用。l 掌握常用控件的使用方法。l 熟悉通用對話框和消息對話框。l 了解系統(tǒng)的集成方法。l 了解為對話框添加背景的幾種方法。二、實(shí)驗(yàn)內(nèi)容與步驟1、根本實(shí)驗(yàn)練習(xí)課本中的例例。 2、拓展與提高2.1 非模式對話框的使用在單文檔工程Ex4-1中,添加一菜單項(xiàng),當(dāng)點(diǎn)擊該菜單項(xiàng)時(shí),將口令對話框以非模式顯示,在對話框中輸入口令,如果為“123456那么彈出一個OK信息框,否那么彈出So

39、rry信息框。步驟如下:1、 翻開單文檔工程Ex4-12、 翻開工作區(qū)的Resource View頁面,展開Menu文件夾,雙擊IDR_MAINFRAME,進(jìn)入菜單編輯區(qū),在菜單的最后空白區(qū)雙擊,翻開菜單項(xiàng)屬性對話框,設(shè)置標(biāo)題為“非模式,選中Pop-Up,沒有ID號,此時(shí)添加了一個新菜單,然后為其添加一菜單項(xiàng)ID號為:ID_MODALLESS,標(biāo)題為“非模式對話框的調(diào)用。3、 選擇菜單“View|ClassWizard,翻開“MFC ClassWizard對話框,對菜單項(xiàng)ID_MODALLESS進(jìn)行消息COMAND映射,為其選擇視圖類CEx4_1View,添加消息處理函數(shù)OnModalless

40、,并編寫代碼:void CEx4_1View:OnModalless() / TODO: Add your command handler code hereif(m_Dlg=NULL) / m_Dlg為CpasswordDialog指針對象m_Dlg=new CPasswordDialog;/ 動態(tài)創(chuàng)立 m_Dlg->Create(IDD_PASSWORD_DIALOG,this); / IDD_PASSWORD_DIALOG為對話框的資源ID號m_Dlg->ShowWindow(SW_SHOW);/顯示非模態(tài)對話框4、 為視圖類Ex4_1View添加CPasswordDialo

41、g的指針變量:CPasswordDialog *m_Dlg; /指針在視圖類Ex4_1View的構(gòu)造函數(shù)中將其初始化:m_Dlg=NULL;在視圖類Ex4_1View的析構(gòu)函數(shù)中將指針變量銷毀:CMyHelloView:CMyHelloView() if(m_Dlg!=NULL) delete m_Dlg;/釋放空間5. 在中,參加對話框類的頭文件#include “PasswordDialog.h6. 對話框類CPasswordDialog添加“確定按鈕的消息處理函數(shù),編寫代碼:void CPasswordDialog:OnOK() UpdateData();if(m_Password=&q

42、uot;123456")MessageBox("OK");elseMessageBox("Sorroy");CDialog:OnOK();1. 編譯運(yùn)行。思考題:模式對話框與非模式對話框的創(chuàng)立與使用方式有何不同?2.2 為對話框添加背景為對話框設(shè)置一幅背景圖Bitmap有幾種最常用的方法:方法一:使用Picture控件:方法簡單,一定保證Picture控件的TabOrder為1;方法二:利用圖形刷子方法三:映射WM_PAINT消息,在OnPaint函數(shù)中選入位圖。步驟:1. 準(zhǔn)備一幅BMP圖片。2. 新建對話框應(yīng)用工程BitmapBKDlg,選

43、擇菜單“Insert|Resource,翻開“Insert Resource對話框,選擇Bitmap,單擊“Import按鈕,將這幅位圖插入到工程中,默認(rèn)的ID號為IDB_BITMAP1,修改其ID號為IDB_BACKGROUD。 3. 為對話框設(shè)置背景圖。方法一:使用Picture控件 1向?qū)υ捒蚰0嬷袇⒓右粋€PICTURE控件,設(shè)置其TabOrder為1 2設(shè)置PICTURE控件的屬性,如下圖,Type選擇為Bitmap,Image選擇為IDB_BACKGROUD圖4.39 圖片屬性對話框方法二:利用圖形刷子2. 為對話框類添加一private成員變量 CBrush m_BKBrush3.

44、 在對話框的構(gòu)造函數(shù)中,創(chuàng)立畫刷CBitmapBKDlg:CBitmapBKDlg(CWnd* pParent /*=NULL*/): CDialog(CBitmapBKDlg:IDD, pParent).CBitmap* pBitmap = new CBitmap;pBitmap->LoadBitmap(IDB_BACKGROUD);m_BKBrush.CreatePatternBrush(pBitmap);delete pBitmap;3映射對話框的WM_CTLCOLOR消息,在OnCtlColor函數(shù)中返回一個圖形刷子,代碼如下:HBRUSH CBitmapBKDlg:OnCtlC

45、olor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) if (nCtlColor = CTLCOLOR_DLG ) return (HBRUSH)m_BKBrush.GetSafeHandle(); return CDialog:OnCtlColor(pDC,pWnd,nCtlColor);說明:在OnCtlColor函數(shù)中,可以用畫刷為各種控件設(shè)置背景,其中:CTLCOLOR_BTN-設(shè)置按鈕控件的顏色CTLCOLOR_DLG-設(shè)置對話框的顏色CTLCOLOR_EDIT-設(shè)置編輯框的顏色CTLCOLOR_LISTBOX-設(shè)置列表框的顏色CTLCOLOR_MSG

46、BOX-設(shè)置消息框的顏色CTLCOLOR_SCRLLBAR-設(shè)置滾動控件的顏色CTLCOLOR_STATIC-設(shè)置靜態(tài)類控件的顏色方法三:映射對話框的WM_PAINT消息,在OnPaint函數(shù)中加載位圖,代碼如下:void CBitmapBKDlg:OnPaint() CPaintDC dc(this); / device context for paintingCRect rc;GetClientRect(&rc); /獲取客戶窗口區(qū)域CBitmap *BackBitmap=new CBitmap; /背景位圖BackBitmap->LoadBitmap(IDB_BACKGRO

47、UD); /加載位圖 CDC * m_dc=new CDC; /內(nèi)存設(shè)備環(huán)境m_dc->CreateCompatibleDC(&dc); /兼容m_dc->SelectObject(BackBitmap); /位圖選入環(huán)境dc.BitBlt(0,0,rc.right,rc.bottom,m_dc,0,0,SRCCOPY);delete m_dc; /釋放內(nèi)存設(shè)備環(huán)境delete BackBitmap; /釋放背景位圖幾點(diǎn)說明:CDC:BitBlt 從源設(shè)備環(huán)境拷貝一幅位圖到當(dāng)前設(shè)備環(huán)境BOOL BitBlt ( int x, int y, int nWidth, int n

48、Height, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );CDC:StretchBlt 從源設(shè)備環(huán)境矩形拷貝一幅位圖到當(dāng)前設(shè)備環(huán)境矩形,如果必要,延伸或壓縮BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );思考題:在為對話框添加背景圖時(shí),你更偏好哪種方法,為什么?2.3 簡單計(jì)算器設(shè)計(jì)設(shè)計(jì)一個簡單的計(jì)算器,能夠?qū)崿F(xiàn)浮點(diǎn)型數(shù)的加、

49、減、乘、除、開方、倒數(shù)運(yùn)算。運(yùn)行界面如下圖。步驟如下:1、創(chuàng)立一個對話框應(yīng)用程序MyCalculator;2、在“Project Workspace窗口,選擇“Resource View標(biāo)簽,雙擊Dialog下的“IDD_MYCALCULATOR_DIALOG,從“IDD_MYCALCULATOR_DIALOG對話框刪除“OK 和“ Cancel及“TODO文本 ,將對話框標(biāo)題設(shè)置為“計(jì)算器。3、編輯對話框資源。向?qū)υ捒蛱砑影粹o(Button)控件,并設(shè)置屬性見表。 計(jì)算器對話框?qū)ο髮傩詫ο罂丶蘒D Caption 對象控件ID Caption ButtonIDC_BUTTON00Button

50、IDC_BUTTON_MUTIPLY*ButtonIDC_BUTTON11ButtonIDC_BUTTON_DIV/ButtonIDC_BUTTON_CLEARCButtonIDC_BUTTON99ButtonIDC_BUTTON_SQRTsqrtButtonIDC_BUTTON_POINT.ButtonIDC_BUTTON_RECI1/xButtonIDC_BUTTON_SIGN+/-ButtonIDC_BUTTON_EQUAL=ButtonIDC_BUTTON_ADD+Edit BoxIDC_DISPLAY(只讀EditButtonIDC_BUTTON_MINUS-4、為對話框類添加成員變

51、量1. double m_first;/存儲一次運(yùn)算的第一個操作數(shù)及一次運(yùn)算的結(jié)果2. double m_second;/存儲一次運(yùn)算的第二個操作數(shù)3. CString m_operator;/存儲運(yùn)算符4. double m_coff;/存儲小數(shù)點(diǎn)的系數(shù)權(quán)值5. CString m_display;/編輯框IDC_DISPLAY的關(guān)聯(lián)變量,顯示計(jì)算結(jié)果5、在對話框類的構(gòu)造函數(shù)中,初始化成員變量CMyCalculatorDlg:CMyCalculatorDlg(CWnd* pParent /*=NULL*/): Dialog(CMyCalculatorDlg:IDD, pParent)m_di

52、splay = _T("0.0");m_first = 0.0;m_second= 0.0;m_operator=_T("+");m_coff = 1.0;6、為對話框添加2個成員函數(shù):void UpdateDisplay(double lVal)用于在編輯框中顯示數(shù)據(jù)void Calculate()-用于計(jì)算void CMyCalculatorDlg:UpdateDisplay(double lVal) /在編輯框中顯示數(shù)據(jù)m_display.Format(_T("%f"),lVal); int i=m_display.GetLen

53、gth();while(m_display.GetAt(i-1)='0') /格式化輸出,將輸出結(jié)果后的零截去 m_display.Delete(i-1,1); i-; UpdateData(false);/更新編輯框變量m_display void CMyCalculator:Calculate() /將前一次數(shù)據(jù)與當(dāng)前數(shù)據(jù)進(jìn)行運(yùn)算,作為下次的第一操作數(shù),并在編輯框顯示。switch(m_operator.GetAt(0) case '+': m_first+=m_second;break; case '-': m_first-=m_secon

54、d;break; case '*': m_first*=m_second;break;case '/': if(fabs(m_second)<=0.000001) m_display="除數(shù)不能為0" UpdateData(false); return; m_first/=m_second;break;m_second=0.0;m_coff=1.0;m_operator=_T("+");UpdateDisplay(m_first);/更新編輯框顯示內(nèi)容7、為Button按鈕的BN_CLICKED事件添加響應(yīng)函數(shù),并編

55、寫代碼(1) 數(shù)字N的消息響應(yīng)函數(shù)(N=0,1,9)void CMyCalculatorDlg:OnButtonN() if( m_coff = 1.0) m_second = m_second*10 + N;/作為整數(shù)輸入數(shù)字時(shí)else m_second = m_second + N*m_coff; /作為小數(shù)輸入數(shù)字 m_coff *= 0.1;UpdateDisplay(m_second);/更新編輯框的數(shù)字顯示(2) 運(yùn)算符按鈕的消息響應(yīng)函數(shù): “+按鈕的消息處理函數(shù)void CMyCalculatorDlg:OnButtonAdd() /加、減、乘類似 Calculate(); m_operator="+" /減為“-、乘為“* “/按鈕的消息處理函數(shù)void CMyCalculatorDlg:OnButtonDiv() Calculate(); m_operator.Format("%s&quo

溫馨提示

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

最新文檔

評論

0/150

提交評論