計算機實驗指導書_第1頁
計算機實驗指導書_第2頁
計算機實驗指導書_第3頁
計算機實驗指導書_第4頁
計算機實驗指導書_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《VC++程序設計》

實驗指導書

李牧編

沈陽大學信息工程學院

目錄

實驗一:熟悉VC++開發(fā)環(huán)境和C++基礎1

實驗二:Windows編程和對話框程序設計17

實驗三:常用控件30

實驗四:菜單、工具欄和狀態(tài)欄42

實驗五:圖形和文本46

實驗六:數據庫50

實驗七:動態(tài)鏈接庫58

2

課程編碼:11241091課程類別:專業(yè)必修

適用層次:本科適用專業(yè):計算機

課程總學時:80適用學期:第7學期

實驗學時:30開設實驗項目數:7

撰寫人:李牧審核人:劉天惠教學院長:范立南

實驗一熟悉VC++開發(fā)環(huán)境和C++基礎

一、實驗目的與要求(6學時)

1.熟悉VisualC++6.0的開發(fā)環(huán)境(工具欄及各種窗口)。

2.能夠應用程序向導創(chuàng)建一個控制臺應用項目。

3.熟悉類和對象的定義和使用方法。

4.理解繼承和派生的含義,掌握繼承和派生類的具體實現方法。

5.掌握虛函數和抽象類的用法。熟練掌握C++的輸入輸出流cin和cout的使用。

二、實驗類型

驗證性

三、實驗原理及說明

1.通過應用程序向導建立一個新的控制臺項目。

2.VisualC++集成開發(fā)環(huán)境下的程序調試。

四、實驗儀器

序號名稱主要用途

1計算機用于驗證VisualC++程序

五、實驗內容和步驟

1.通過應用程序向導建立一個新的控制臺項目

使用VisualC++建立一個非圖形化標準C++程序,編譯、運行以下程序:

#include<iostream.h>

voidmain()

cout?,zHello!\nz,;

cout?,zWelcometoc++!\n〃;

⑴啟動VisualC++6.0開發(fā)環(huán)境

從“開始”菜單中選擇"程序”|MicrosoftVisualStudio6.0|MicrosoftVisual

C++6.0,顯示VisualC++6.0開發(fā)環(huán)境主窗口。

⑵創(chuàng)建一個項目

單擊File菜單中的New選項顯示New(新建)對話框。

3

單擊Projects標簽,在Projects(項目)選項卡中,選擇Win32ConsoleApplication

(Win32控制臺應用程序)。在Location(位置)文本框中指定一個路徑d:\c++lab,在Preject

Name(項目名稱)文本框中為項目輸入一個名字“l(fā)abl」",單擊OK(確定)按鈕。

在彈出的Win32ConsoleApplication-Step1of1對話框中選擇AnEmptyProject

單選項,然后單擊Finish(完成)按鈕。

最后在NewProjectInformation對話框中單擊OK按鈕,完成項目的建立。

⑶建立C++源程序文件

選擇菜單命令ProjectAddtoProject|New,彈出New對話框。在new對話框的

Files選項卡中選擇C++SourceFile,并填入文件名稱單擊OK按鈕,完成新

建C++源程序文件。

⑷編輯C++源程序文件內容

在文件編輯窗口中輸入代碼。

選擇菜單命令FileSave保存這個文件。

⑸建立并運行可執(zhí)行程序

選擇菜單命令Build->Buildlabll.exe建立可執(zhí)行程序。如果正確輸入了源程序,

此時便成功地生成了可執(zhí)行程序labl_l.exe。如果程序有語法錯誤,則屏幕下方的狀態(tài)窗

口中會顯示錯誤信息。根據這些錯誤信息對源程序進行修改后,重新選擇菜單命令Build|

Buildlabl_l.exe,建立可執(zhí)行程序。

選擇菜單命令Build|Executelabll.exe運行程序,觀察屏幕的顯示內容。

(6)關閉工作空間

選擇菜單命令FileCloseWorkspace關閉工作空間。

2.運行下面的程序,分析運行結果。

#include<iostream.h>

#include<iomanip.h>

#include<string.h>

classCGoods(

private:

charName[21];

intAmount;

floatPrice;

floatTotal_value;

public:

voidRegisterGoods(char*,int,float);〃輸入數據

voidCountTotal(void);〃計算商品總價值

voidGetName(char*);〃讀取商品名

intGetAmount(void);〃讀取商品數量

4

floatGetPrice(void)〃讀取商品單價

floatGetTotal_value(void)〃讀取商品總價值

);

voidCGoods::RegisterGoods(char*name,intamount,floatprice)

(

//char*是指向字符的指針類型說明,name現可理解為字符串

strcpy(Name,name);〃字符串拷貝函數

Amount=amount;Price=price;

}

voidCGoods::CountTotal(void)

iTotal_value=Price*Amount;}

voidCGoods::GetName(char*name)

{strcpy(name,Name);)

intCGoods::GetAmount(void)

{return(Amount);)

floatCGoods::GetPrice(void){return(Price);}

floatCGoods::GetTotalvalue(void)

{return(Totalvalue);)

voidmain()

(

CGoodscar;

charstring[21];

intnumber;

floatpr;

cout<〈"請輸入汽車型號:”;

cin.getline(string,20);〃輸入串長必須小于20

cout<<"請依次輸入汽車數量與單價:”;

cin>>number?pr;

car.RegisterGoods(string,number,pr);

car.CountTotal();

string[0]=,\0f;〃字符串string清零

car.GetName(string);//string賦值car.Name

cout?setw(20)<<string<<setw(5)

5

<<car.GetAmount();

cout<<setw(10)<<car.GetPrice()<<setw(20)

<<car.GetTotal_value()?endl;

}

3.分析下面程序運行的結果,注意引用的作用。

#includeiostream,h”

voidmain()

{inta(0);

int&ra=a;

cout<<ua=u<<a<<endl;

cout<<"ra=u<<ra<<endl;

ra=2;

cout?aa=^<<a?endl;

cout?^ra=<<?ra?endl;

cout?aa=^<<&a?endl;

cout?ara=^<<&ra?endl;

}

4.比較下面程序的異同,分析原因。

(1)

#includeiostream,

classA

{public:

voidsetx(inta){x=a;}

voidsety(intb){y=b;}

intgetx()const{returnx;}

intgety()const{returny;}

protected:

intx;

private:

inty;

);

classB:publicA

6

{public:

intgetsumO{returnx+gety();}

};

voidmain()

{Bb;

b.setx(2);

b.sety(3);

cout<<b.getx()<<b.gety()<<endl;

cout<<b.getsumO<<endl;

)

(2)

#includeaiostream,h”

classA

{public:

voidsetx(inta){x=a;}

voidsety(intb){y=b;}

intgetx()const{returnx;}

intgety()const{returny;}

protected:

intx;

private:

inty;

};

classB:privateA

{public:

voidsetBx(inta){setx(a);}

voidsetBy(intb){setx(b);}

intgetBx(){returngetx();}

intgetBy(){returngety();}

intgetsumO{returnx+gety0;)

);

voidmain()

{Bb;

b.setBx(2);

7

b.setBy(3);

cout<<b.getBx()<<b.getBy()?endl;

cout<<b.getsum()<<endl;

}

(3)

#includewiostream,h”

classA

{public:

voidsetx(inta){x二a;}

voidsety(intb){y=b;}

intgetx()const{returnx;}

intgety()const{returny;}

protected:

intx;

private:

inty;

};

classB:protectedA

{public:

voidsetBx(inta){setx(a);}

voidsetBy(intb){setx(b);}

intgetBx(){returngetx();}

intgetBy(){returngety();}

intgetsum0{returnx+gety();}

};

voidmain()

{Bb;

b.setBx(2);

b.setBy(3);

cout?b.getBx()<<b.getBy()?endl;

cout<<b,getsum()<<endl;

)

5.運行下面程序,分析結果。

#include<iostream>

#include<iomanip>

8

usingnamespacestd;

intmain()

(

doublea=123.456,b=3.14159,c=-3214.67;

cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2);

cout<<setw(10)<<a?endl;

cout<<setw(10)<<b?endl;

cout<<setw(10)?c?endl;

return0;

)

6.分析下面程序,并觀察輸出結果。

ttinclude<iostream>

^include<iomanip>

usingnamespacestd;

intmain()

{inta;

cout<<?zinputa:〃;

cin>>a;

cout<<,?dec:,z<<dec?a<<endl;

cout?,,hex:,z?hex?a<<endl;

cout<<,zoct:,z<<setbase(8)<<a<<endl;

char*pt=〃China”;

cout?setw(10)<<pt<<endl;

cout<<setfillC*')<<setw(10)?pt?endl;

doublepi=22.0/7.0;

cout<<setiosflags(ios::scientific)<<setprecision(8);

cout?/,pi=/z<<pi?endl;

cout<<z,pi=,z<<setprecision(4)?pi?endl;

cout<<,/pi=z"<<setiosflags(ios::fixed)<<pi?endl;

return0;

)

7.分析下面程序的運行結果。

#include<iostream.h>

inlinefloatfinax(floatx,floaty)

{returnx>y?x:y;}

voidmain()

{floata,b;

cout?"請輸入兩個浮點數:";

cin?a?b;

cout?"最大的數為:"《fmax(a,b)?"\n";

}

8.分析下面程序的運行結果。

9

#include<iostream.h>

inlineIsNumber(charch)

{

returnch>=rO'&&ch<='9'?1:O;

}

voidmain()

{

charch;

while(cin.get(ch),ch!=,\n/)

{if(IsNumber(ch))

cout?u是數字字符"?endl;

else

cout?不是數字字符"?endl;

}

)

9.分析下面程序的運行結果。

#include<iostream.h>

sum(inta,intb)

{returna+b;}

doublesum(doublea,doubleb)

{returna+b;}

floatsum(floata,floatb,floatc)

{returna+b+c;}

voidmain()

(

cout?n3+5=n?sum(3,5)?endl;

cout?'*2.2+5.6-4?sum(2.2,5.6)?endl;

cout?"3.5+4+8-4?sum(3.5,4,8)?endl;

)

10.分析下面程序的運行結果。

#include<iostream.h>

voiddelay(intloops=5)

{〃延時函數,默認延時5個時間單位

fbr(;loops>0;loops—);

)

voidmain()

(

delay⑶;

coutw”延時3個時間單位”wendl;

delay();〃等同于delay⑸

coutw“延時5個時間單位"wendl;

}

11.下面是一個完整的Person類的定義,分析代碼,了解類的定義以及成員函數的定義

方法,構造函數和析構函數的使用。

10

#include<iostream>

#include<cstring>

usingnamespacestd;

classPerson

(

private:

charm_strName[20];

intm_nAge,intmnSex;

public:

Person。;〃構造函數

Person(constchar*name,intage,charsex);//構造函數

Person(constPerson&p);〃拷貝構造函數

“Person。//析構函數

{cout?,zNowdestroyingtheinstanceofPerson/Z?endl;}

voidSetName(constchar*name);

voidSetAge(intage);

voidsetSex(charsex);

char*GetNameO;

intGetAge();

charGetSexO;

voidShowPerson();

};

Person::PersonO:mnAge(0),mnSex(0)〃構造函數

{strcpy(m_strName,〃XXX〃);}

Person::Person(constchar*name,intage,charsex):mnAge(age),mnSex(sex

==)〃構造函數

{strcpy(m_strName,name);}

Person::Person(constPerson&p):m_nAge(p.m_nAge),m_nSex(p.m_nSex)//

拷貝構造函數

{strcpy(m_strName,p.m_strName);}

voidPerson::SetName(constchar*name)

{strcpy(m_strName,name);}

voidPerson::SetAge(intage)

{m_nAge=age;}

voidPerson::setSex(charsex)

{m_nSex=sex==5m>?0:1;}

char*Person::GetNameO

{returnm_strName;}

11

intPerson::GetAge()

{returnmnAge;}

charPerson::GetSex()

{return(m_nSex==0?'m':'f');}

voidPerson::ShowPerson()

{cout<<GetName()<<'\t'<<GetAge()?'\t'?GetSexO<<endl;}

intmain()

(

Person*pl,*p2;〃聲明兩個指向對象的指針

pl=newPerson;〃動態(tài)生成一個Person對象

cout<<"personl:\t〃;

pl->ShowPerson();

pl->SetAge(19);

cout<<,zpersonl:\t〃;

pl->ShowPerson();

p2=newPerson(〃Zhang3〃,19,'m');〃動態(tài)生成?個Person對象

cout<<〃person2:\t〃;

p2->ShowPerson();

*p2=*pl;〃對象之間的賦值

cout<<〃person2:\t〃;

p2->ShowPerson();

deletepl;〃釋放pl指針指向對象所占的空間

deletep2;〃釋放p2指針指向對象所占的空間

return0;

)

12.考察下面程序運行的結果。

#includewiostream,h”

classA

{public:

voidsetx(inta){x=a;}

voidsety(intb){y=b;}

intgetxOconst{returnx;}

intgety()const{returny;}

protected:

intx;

private:

inty;

};

12

classB:privateA

{public:

voidsetBx(inta){setx(a);)

voidsetBy(intb){setx(b);}

intgetBxO{returngetx();}

intgetBy(){returngety();}

intgetsumO{returnx+gety();}

);

voidmain()

{Bb;

b.setBx(2);

b.setBy(3);

cout<<b.getBx()<<b.getBy()?endl;

cout?b.getsumO<<endl;

)

13.考察下面程序運行的結果。

#include“iostream.h"

#include“string.h"

classFruit

{public:

Fruit(){}

?Fruit(){}

virtualvoiddispFruitName()

{coutW'It'sfruitclass!,,?endl;}

virtualvoideatFruit()

{coutvVCan'teatanabstractfruit!,,?endl;}

);

classApple:publicFruit

{private:

charcAppleName[20];

public:

Apple(){}

~Apple(){}

voidgetAppleName(charapplename[20])

{strcpy(cAppleName,applename);}

voiddispApplename()

{cout?uTheapplenameis:,5?cAppleNarne?endl;}

voiddispFruitName()

13

{cout?<4Thefruitnameisapple.”<<endl;}

voideatFruit()

{coutvv"Oh,it'ssomeacid!,5?endl;}

);

classOrange:publicFruit

{private:

charcOrangeName[20];

public:

Orange(){}

?Orange(){}

voidgetOrangeName(charorangename[20])

{strcpy(cOrangeName,orangcname);}

voiddispOrangename()

{cout?<4Theapplenameis:,,?cAppleName?endl;}

voiddispFruitName()

{cout?44ThefruitnameisOrange."vvendl;}

voideatFruit()

{cout?4tHaha,ifssweet!,,?endl;}

);

main()

{Fruitmyfruit,*ptrfruit;

Applemyapple,*ptrapple;

Orangemyorange,*ptrorange;

myapple.getAppleName("Guoguang'');

myorange.getOrangeName("HuangyarT);

ptrfruit=&myfruit;

ptrapple=&myapple;

ptrorange=&myorange;

ptrfruit->dispFruitName();

ptrfruit->eatFruit();

ptrapple->dispFruitName();

ptrapple->disoAppleName();

ptrapple->eatFruit();

ptrorange->dispFruitName();

14

ptrorange->disoOrangeName();

ptrorange->eatFruit();

ptrfruit=ptrapple;

ptrfruit->dispFruitName();

ptrfruit->eatFruit();

ptrfruit=ptrorange;

ptrfruit->dispFruitName();

ptrfruit->eatFruit();}

14.考察下面程序運行的結果。

#include<iostream>

classcomplex〃復數類聲明

(

public:〃外部接口

complex(doubler=0.0,doublei=0.0){real=r;imag=i;}

〃構造函數

complexoperator+(complexc2);〃+重載為成員函數

complexoperator-(complexc2);〃■重載為成員函數

voiddisplay。;〃輸出復數

private:〃私有數據成員

doublereal;〃復數實部

doubleimag;〃復數虛部

};

complexcomplex::

operator+(complexc2)〃重載函數實現

{

complexc;

c.real=c2.real+real;

c.imag=c2.imag+imag;

returncomplex(c.real,c.imag);

}

complexcomplex::

operator-(complexc2)〃重載函數實現

{

complexc;

c.real=real-c2.real;

c.imag=imag-c2.imag;

15

returncomplex(c.real,c.imag);

voidcomplex::display()

{cout?,,("<<real?n,,,?imag?H)n?endl;}

voidmain()〃主函數

{complexcl(5,4),c2(2,10),c3;〃聲明復數類的對象

cout〈v"cl=";c1.display();cout?endl;

cout?nc2=H;c2.display();cout?endl;

c3=cl-c2;〃使用重載運算符完成復數減法

cout?Hc3=cl-c2=n;

c3.display();cout?endl;

c3=cl+c2;〃使用重載運算符完成復數加法

cout?nc3=c1+c2=";

c3.display();cout?endl;

六、實驗數據處理與分析

顯示的實驗結果是否正確?若不正確,分析原因。

七、注意事項

1.VisualC++環(huán)境中是以項目的形式來管理應用程序。

2.類中成員的訪問權限。

3.類中成員函數的訪問權限。

八、預習與思考題

1.總結C++程序的結構和書寫規(guī)則。

2.構造函數是什么時間被誰調用的?

3.類的成員函數可以是私有的嗎?類的私有成員是如何被訪問的?

4.基類派生了派生類,基類的構造函數是如何被調用的?

5.多態(tài)性的實現方法有幾種?

6.運算符的重載應該注意什么?

16

實驗二:Windows編程和對話框程序設計

一、實驗目的與要求(4學時)

1.理解Windows編程特點。

2.了解MFC應用程序的消息映射、數據映射、運行時類型檢查和診斷信息轉儲機制。

3.掌握用AppWizard(exe)創(chuàng)建SDI、MDI以及基于對話框的應用程序方法。

4.掌握對話框編輯器的使用方法。熟悉對話框的編程過程。

5.掌握控件的創(chuàng)建和使用方法。

二、實驗類型

驗證型

三、實驗原理及說明

Windows應用程序的結構。

在單文檔窗口中分別添加模式和非模式對話框,比較二者的異同。

四、實驗儀器

序號名稱主要用途

1計算機用于驗證VC++程序

五、實驗內容和步驟

1.創(chuàng)建一個簡單的Windows應用程序。

(1)選擇"File"0"New"。單擊Projects,選中Win32Application項。

(2)在ProjectName框中鍵入項目名稱Ex_HelloMsg。在Location下的編輯框中直接

鍵入文件夾名稱,或單擊Browse按鈕(...)選擇一個已有的文件夾。

(3)單擊[0K]。選中Anemptyproject項。單擊[Finish],單擊[OK]系統(tǒng)將自動創(chuàng)建

17

此應用程序。

(4)選擇“File”0“New”。單擊File標簽,在左邊的列表框中選擇C++SourceFile

項,在右邊的File框中鍵入Ex_HelloMsg.cpp,單擊[OK]。

(5)輸入代碼:

#include<windows.h>

intWINAPIWinMain(HINSTANCEhlnstance,HINSTANCEhPrevInstance,

LPSTRIpCmdLine,intnCmdShow)

{MessageBox(NULL,"你好,我的VisualC++世界!","問候",0);

return0;

}______.

問候

(6)運行程序,結果為:

你好,我的VisualC++世界?

二二期定二ml

2.創(chuàng)建一個完整的Windows應用程序

(1)選擇"File"/“New"。單擊Projects,選中Win32Application項。

(2)在ProjectName框中鍵入項目名稱ExHelloWino在Location下的編輯框中直

接鍵入文件夾名稱,或單擊Browse按鈕(...)選擇一個已有的文件夾。

(3)單擊[0K]。選中Anemptyproject項。單擊[Finish],單擊[0K]系統(tǒng)將自動創(chuàng)建

此應用程序。

(4)選擇“File”、/0“New”。單擊File標簽,在左邊的列表框中選擇C++Source

File項,在右邊的File框中鍵入Ex_HelloWin.cpp,單擊[0K]。

(5)輸入代碼:

#include<windows.h>

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口過程

intWINAPIWinMain(HINSTANCEhlnstance,HINSTANCEhPrevInstance,LPSTR

IpCmdLine,intnCmdShow)

{HWNDhwnd;//窗口句柄

MSGmsg;//消息

WNDCLASSwndclass;〃窗口類

wndclass.style=CSJREDRAW|CS_VREDRAW;

wndclass.lpfnWndProc=WndProc;

18

wndclass.cbClsExtra=0;

wndclass.cbWndExtra=0;

wndclass.hlnstance=hlnstance;

wndclass.hlcon=Loadicon(NULL,TDT_APPLICATION)

wndclass.hCursor=LoadCursor(NULL,IDCARROW)

wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH)

wndclass.lpszMenuName=NULL;

wndclass.lpszClassName="HelloWin";//窗口類名

if(IRegisterClass(&wndclass))//注冊窗口

{MessageBox(NULL,〃窗口注冊失??!〃,"HelloWin",0);

return0;

hwnd=CreateWindow("HelloWin”,//窗口類名

〃我的窗口〃,//窗口標題

WSOVERLAPPEDWINDOW,//窗口樣式

CW_USEDEFAULT,//窗口最初的x位置

CW_USEDEFAULT,//窗口最初的y位置

CWUSEDEFAULT,//窗口最初的x大小

CWUSEDEFAULT,//窗口最初的y大小

NULL,//父窗口句柄

NULL,//窗口菜單句柄

hlnstance,//應用程序實例句柄

NULL);//創(chuàng)建窗口的參數

ShowWindow(hwnd,nCmdShow);//顯示窗口

UpdateWindow(hwnd);//更新窗口,包括窗口的客戶區(qū)

//進入消息循環(huán):當從應用程序消息隊列中檢取的消息是視QUIT時,則退出循環(huán)。

while(GetMessage(&msg,NULL,0,0))

{TranslateMessage(&msg);//轉換某些鍵盤消息

DispatchMessage(&msg);//將消息發(fā)送給窗口過程,這里是WndProc

)

19

returnmsg.wParam;

)

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMIParam)

{switch(message)

{caseWM_CREATE://窗口創(chuàng)建產生的消息

return0;

caseWM_LBUTT0ND0WN:

MessageBox(NULL,〃你好,我的VisualC++世界!〃,〃問候〃,0);

return0;

caseWM_DESTROY://當窗口關閉時產生的消息

PostQuitMessage(0);

return0;

)

returnDefWindowProc(hwnd,message,wParam,IParam);//執(zhí)行默認的消息處理

)

(6)程序運行后,單擊鼠標左鍵,就會彈出?個對話框。

結果如下:

3.創(chuàng)建一個MFC應用程序。

(1)選擇“File"/“New"。單擊Projects,選中Win32Application項,創(chuàng)建一個

Ex_HelloMFC空應用程序項目。

20

(2)選擇“File"/“New"。單擊File標簽,在左邊的列表框中選擇C++SourceFile

項,在右邊的File框中鍵入Ex_HelloMsg.cpp,單擊在K]。

(3)輸入代碼:

^include<afxwin.h>//MFC頭文件

classCHelloApp:publicCWinApp//聲明應用程序類

{public:

virtualBOOLInitlnstanceO;};

CHelloApptheApp;//建立應用程序類的實例

classCMainFrame:publicCFrameWnd//聲明主窗口類

{public:

CMainFrame()

{//創(chuàng)建主窗口

Create(NULL,〃我的窗口〃,WS_OVERLAPPEDWINDOW,CRect(0,0,400,300));

)

protected:

afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);

DECLARE_MESSAGE_MAP()

);

//消息映射入口

BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)

ON_WM_LBUTTONDOWN()//單擊鼠標左鍵消息的映射宏

ENDJfESSAGEMAPO

voidCMainFrame::OnLButtonDown(UINTnFlags,CPointpoint)

{MessageBox("你好,我的VisualC++世界!〃,〃問候”,0);

CFrameWnd::OnLButtonDown(nFlags,point);

)

//每當應用程序首次執(zhí)行時都要調用的初始化函數

BOOLCHelloApp::InitlnstanceO

{m_pMainWnd=newCMainFrameO;

mpMainWnd->ShowWindow(mnCmdShow);

21

m_pMainWnd->UpdateWindow();

returnTRUE;

)

(4)選擇"Project”/0"Settings",選擇General99標簽。在uMicrosoft

FoundationClasses”組合框中,選擇“UseMFCinaSharedDLL"。單擊[OK]。

(5)程序運行后,單擊鼠標左鍵,就會彈出一個對話框。

結果如下:

4.創(chuàng)建一個單文檔應用程序

(1)選擇“File"/“New”,選擇Projects標簽;選擇MFCAppWizard(exe)的項目類型(該

類型用于創(chuàng)建可執(zhí)行的Windows應用程序),將項目工作文件夾定位在“D:\VisualC++

6.0程序”,并在“ProjectName”框中輸入項目名Ex_SDIHello,如圖,單擊[0程。

22

(2)從應用程序類型SingleDocument>MultipleDocument和DialogBased中選擇SDI。

選擇資源所使用的語言,這里是“中文[中國]”,單擊[Finish]按鈕

(3)編譯并運行。結果如下。

5.在單文檔應用程序窗口中加入?個模式對話框。運行程序,查看模式對話框。

(1)創(chuàng)建一個單文檔的應用程序,工程名稱自己確定。

(2)創(chuàng)建對話框資源模板

打開“插入”菜單,選擇“資源”命令,在“插入資源”對話框中,選擇“dialog”,

然后,按“新建”按鈕。

23

在插入的“對話框”中,修改對話框的屬性中的“標題”,改為:“我的模式對話框”。

(3)創(chuàng)建對話框類

雙擊對話框空白處,彈出“創(chuàng)建新類”對話框。按“0K”按鈕。

在創(chuàng)建新類的對話框中,有新類默認的基類和對話框的ID。

輸入新類的“類名”,該類的相應的文件,在類名下面。如圖所示。

單擊“0K”按鈕。新類創(chuàng)建成功。

24

(4)顯示對話框

在資源視圖中,雙擊“Menu”資源。

25

之012-MicrosoftVisualC++-[a12.rc-IDD_'

罵文件但)編輯②查看⑦插入9工程9組建⑥工具?

窗以口第國西軸

▼classmembersj*CFirst

-a12resources*

+LJAccelerator

-曰)Dialog

3IDD_ABOUTBOX

尋IDD_DIALOG1

+_JVersion

打開菜單編輯器,在“幫助”菜單后面的空白處,雙擊,在彈出的“菜單項目”

屬性對話框中,添加“測試”菜單項。

在“測試”下面的空白處,雙擊,在彈出的“菜單項目”屬性對話框中,填寫菜

單命令的ID(ID_TEST_DLG)和標題(菜單命令名)(對話框)。

26

文件g弱輯?查看g幫助國)測試

打開“查看”菜單,選擇“建立類向導”命令,在類名處選擇“CMainFrame”,在

“ObjectIDs”選擇“ID_TEST_DLG",在“Message”下選擇“COMMAND”,然后點

"AddFunction"按鈕。為“對話框”命令建立消息處理函數。

在彈出的對話框中,按“0K”按鈕。

在對話框中,單擊“EditCode”按鈕。在相應的函數處,添加代碼。

CFirstDlgdig;//定義對話框類對象

dlg.DoModal();//顯示對話框

在本文件的開頭,已有的include命令后面,添加命令:#include"FirstDlg.h"

執(zhí)行程序即可。

6.在窗口中加入一個無模式對話框。運行程序,查看無模式對話框。

(1)在第5題的項目中添加一個對話框資源,將其標識符設為

27

IDD_DIALOG_SECOND,標題設為“無模式對話框”,對話框字體和大小設為“宋體,

9號”。

(2)為IDD_DIALOG_SECOND對話框資源創(chuàng)建一個對話框類CSecondDlg。

(3)按Ctrl+W快捷鍵打開MFCClassWizard,從“Classname”列表中選擇CSecondDlg,

在IDs列表中選擇ID0K,它是對話框中[OK]按鈕的標識符,然后在Messages框中選擇

BN/LICKED(單擊按鈕)消息,單擊[AddFunction]按鈕或雙擊BN/LICKED消息,出現

“AddMemberFunction”對話框以輸入成員函數的名稱,保留系統(tǒng)默認的函數名為OnOK。

該函數是對[OK]按鈕單擊消息的映射,即當用戶單擊此對話框中的[0K]按鈕時,OnOK

函數被執(zhí)行。

(4)修改CSecondDlg::0n0K函數中的代碼。

voidCSecondDlg::0n0K()

{

DestroyWindowO;//終止對話框顯示

deletethis;//刪除對話框,釋放內存空間

)

代碼中,DestroyWindow是對話框基類CWnd的一個成員函數,用來終止窗口。

(5)用MFCClassWizard來添加[Cancel]按鈕(標識符為IDCANCEL)的BN/UCKED消息映

射,并修改其映射函數CSecondDlg::0nCancel的代碼。

voidCSecondDlg::0nCancel()

(

DestroyWindowO;

deletethis;

)

(6)將項目工作區(qū)切換到ClassView(類視圖)頁面,展開CMainFrame類的所有成員,雙

擊OnTestDlg就會在文檔窗口中自動定位到該函數的實現代碼處,將其修改成下列代碼:

28

voidCMainFrame::OnTestDlg()

(

CSecondDlg*pDlg=newCSecondDlg;//使用new來為對話框分配內存空間

pDlg->Create(IDD_DIALOG_SECOND);//創(chuàng)建對話框

pDlg->ShowWindow(SW_N0RMAL);//顯示對話框

}

代碼中,Create函數可以用來以一個對話框資源來創(chuàng)建對話框,ShowWindow是CWnd?個

成員函數,用來顯示對話框,S\V_NORMAL用來指定將窗口顯示成一般常用的狀態(tài)。

(7)在文件MainFrm.cpp的前面添加CSecondDlg類的包含語句,即:

#include"FirstDlg.h"

#include"SecondDlg.h"

(8)編譯并運行。在應用程序菜單上,多次選擇“測試”一“對話框”菜單項,將會在

同一個位置中出現多個對話框,拖動這些對話框到適當位置。

六、實驗數據處理與分析

顯示的實驗結果是否正確?若正確,解釋原因;若不正確,分析原因。

七、注意事項

1、鼠標左鍵單擊時,應用程序響應的實現方法。

2、應用程序和對話框之間的消息傳遞的實現。

八、預習與思考題

1、VC++中如何接收和響應鼠標消息?

2、MFC應用程序的建立和使用WindowsAPI函數建立的應用程序有什么差別?

3、模式對話框和非模式對話框的概念。

29

溫馨提示

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

最新文檔

評論

0/150

提交評論