計(jì)算機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第1頁(yè)
計(jì)算機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第2頁(yè)
計(jì)算機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第3頁(yè)
計(jì)算機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第4頁(yè)
計(jì)算機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《VC++程序設(shè)計(jì)》

實(shí)驗(yàn)指導(dǎo)書(shū)

李牧編

沈陽(yáng)大學(xué)信息工程學(xué)院

目錄

實(shí)驗(yàn)一:熟悉VC++開(kāi)發(fā)環(huán)境和C++基礎(chǔ)1

實(shí)驗(yàn)二:Windows編程和對(duì)話(huà)框程序設(shè)計(jì)17

實(shí)驗(yàn)三:常用控件30

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

實(shí)驗(yàn)五:圖形和文本46

實(shí)驗(yàn)六:數(shù)據(jù)庫(kù)50

實(shí)驗(yàn)七:動(dòng)態(tài)鏈接庫(kù)58

2

課程編碼:11241091課程類(lèi)別:專(zhuān)業(yè)必修

適用層次:本科適用專(zhuān)業(yè):計(jì)算機(jī)

課程總學(xué)時(shí):80適用學(xué)期:第7學(xué)期

實(shí)驗(yàn)學(xué)時(shí):30開(kāi)設(shè)實(shí)驗(yàn)項(xiàng)目數(shù):7

撰寫(xiě)人:李牧審核人:劉天惠教學(xué)院長(zhǎng):范立南

實(shí)驗(yàn)一熟悉VC++開(kāi)發(fā)環(huán)境和C++基礎(chǔ)

一、實(shí)驗(yàn)?zāi)康呐c要求(6學(xué)時(shí))

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

2.能夠應(yīng)用程序向?qū)?chuàng)建一個(gè)控制臺(tái)應(yīng)用項(xiàng)目。

3.熟悉類(lèi)和對(duì)象的定義和使用方法。

4.理解繼承和派生的含義,掌握繼承和派生類(lèi)的具體實(shí)現(xiàn)方法。

5.掌握虛函數(shù)和抽象類(lèi)的用法。熟練掌握C++的輸入輸出流cin和cout的使用。

二、實(shí)驗(yàn)類(lèi)型

驗(yàn)證性

三、實(shí)驗(yàn)原理及說(shuō)明

1.通過(guò)應(yīng)用程序向?qū)Ы⒁粋€(gè)新的控制臺(tái)項(xiàng)目。

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

四、實(shí)驗(yàn)儀器

序號(hào)名稱(chēng)主要用途

1計(jì)算機(jī)用于驗(yàn)證VisualC++程序

五、實(shí)驗(yàn)內(nèi)容和步驟

1.通過(guò)應(yīng)用程序向?qū)Ы⒁粋€(gè)新的控制臺(tái)項(xiàng)目

使用VisualC++建立一個(gè)非圖形化標(biāo)準(zhǔn)C++程序,編譯、運(yùn)行以下程序:

#include<iostream.h>

voidmain()

cout?,zHello!\nz,;

cout?,zWelcometoc++!\n〃;

⑴啟動(dòng)VisualC++6.0開(kāi)發(fā)環(huán)境

從“開(kāi)始”菜單中選擇"程序”|MicrosoftVisualStudio6.0|MicrosoftVisual

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

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

單擊File菜單中的New選項(xiàng)顯示New(新建)對(duì)話(huà)框。

3

單擊Projects標(biāo)簽,在Projects(項(xiàng)目)選項(xiàng)卡中,選擇Win32ConsoleApplication

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

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

在彈出的Win32ConsoleApplication-Step1of1對(duì)話(huà)框中選擇AnEmptyProject

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

最后在NewProjectInformation對(duì)話(huà)框中單擊OK按鈕,完成項(xiàng)目的建立。

⑶建立C++源程序文件

選擇菜單命令ProjectAddtoProject|New,彈出New對(duì)話(huà)框。在new對(duì)話(huà)框的

Files選項(xiàng)卡中選擇C++SourceFile,并填入文件名稱(chēng)單擊OK按鈕,完成新

建C++源程序文件。

⑷編輯C++源程序文件內(nèi)容

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

選擇菜單命令FileSave保存這個(gè)文件。

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

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

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

口中會(huì)顯示錯(cuò)誤信息。根據(jù)這些錯(cuò)誤信息對(duì)源程序進(jìn)行修改后,重新選擇菜單命令Build|

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

選擇菜單命令Build|Executelabll.exe運(yùn)行程序,觀察屏幕的顯示內(nèi)容。

(6)關(guān)閉工作空間

選擇菜單命令FileCloseWorkspace關(guān)閉工作空間。

2.運(yùn)行下面的程序,分析運(yùn)行結(jié)果。

#include<iostream.h>

#include<iomanip.h>

#include<string.h>

classCGoods(

private:

charName[21];

intAmount;

floatPrice;

floatTotal_value;

public:

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

voidCountTotal(void);〃計(jì)算商品總價(jià)值

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

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

4

floatGetPrice(void)〃讀取商品單價(jià)

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

);

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

(

//char*是指向字符的指針類(lèi)型說(shuō)明,name現(xiàn)可理解為字符串

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

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<〈"請(qǐng)輸入汽車(chē)型號(hào):”;

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

cout<<"請(qǐng)依次輸入汽車(chē)數(shù)量與單價(jià):”;

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.分析下面程序運(yùn)行的結(jié)果,注意引用的作用。

#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.運(yùn)行下面程序,分析結(jié)果。

#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.分析下面程序,并觀察輸出結(jié)果。

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.分析下面程序的運(yùn)行結(jié)果。

#include<iostream.h>

inlinefloatfinax(floatx,floaty)

{returnx>y?x:y;}

voidmain()

{floata,b;

cout?"請(qǐng)輸入兩個(gè)浮點(diǎn)數(shù):";

cin?a?b;

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

}

8.分析下面程序的運(yùn)行結(jié)果。

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是數(shù)字字符"?endl;

else

cout?不是數(shù)字字符"?endl;

}

)

9.分析下面程序的運(yùn)行結(jié)果。

#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.分析下面程序的運(yùn)行結(jié)果。

#include<iostream.h>

voiddelay(intloops=5)

{〃延時(shí)函數(shù),默認(rèn)延時(shí)5個(gè)時(shí)間單位

fbr(;loops>0;loops—);

)

voidmain()

(

delay⑶;

coutw”延時(shí)3個(gè)時(shí)間單位”wendl;

delay();〃等同于delay⑸

coutw“延時(shí)5個(gè)時(shí)間單位"wendl;

}

11.下面是一個(gè)完整的Person類(lèi)的定義,分析代碼,了解類(lèi)的定義以及成員函數(shù)的定義

方法,構(gòu)造函數(shù)和析構(gòu)函數(shù)的使用。

10

#include<iostream>

#include<cstring>

usingnamespacestd;

classPerson

(

private:

charm_strName[20];

intm_nAge,intmnSex;

public:

Person。;〃構(gòu)造函數(shù)

Person(constchar*name,intage,charsex);//構(gòu)造函數(shù)

Person(constPerson&p);〃拷貝構(gòu)造函數(shù)

“Person。//析構(gòu)函數(shù)

{cout?,zNowdestroyingtheinstanceofPerson/Z?endl;}

voidSetName(constchar*name);

voidSetAge(intage);

voidsetSex(charsex);

char*GetNameO;

intGetAge();

charGetSexO;

voidShowPerson();

};

Person::PersonO:mnAge(0),mnSex(0)〃構(gòu)造函數(shù)

{strcpy(m_strName,〃XXX〃);}

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

==)〃構(gòu)造函數(shù)

{strcpy(m_strName,name);}

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

拷貝構(gòu)造函數(shù)

{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;〃聲明兩個(gè)指向?qū)ο蟮闹羔?/p>

pl=newPerson;〃動(dòng)態(tài)生成一個(gè)Person對(duì)象

cout<<"personl:\t〃;

pl->ShowPerson();

pl->SetAge(19);

cout<<,zpersonl:\t〃;

pl->ShowPerson();

p2=newPerson(〃Zhang3〃,19,'m');〃動(dòng)態(tài)生成?個(gè)Person對(duì)象

cout<<〃person2:\t〃;

p2->ShowPerson();

*p2=*pl;〃對(duì)象之間的賦值

cout<<〃person2:\t〃;

p2->ShowPerson();

deletepl;〃釋放pl指針指向?qū)ο笏嫉目臻g

deletep2;〃釋放p2指針指向?qū)ο笏嫉目臻g

return0;

)

12.考察下面程序運(yùn)行的結(jié)果。

#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.考察下面程序運(yùn)行的結(jié)果。

#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.考察下面程序運(yùn)行的結(jié)果。

#include<iostream>

classcomplex〃復(fù)數(shù)類(lèi)聲明

(

public:〃外部接口

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

〃構(gòu)造函數(shù)

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

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

voiddisplay。;〃輸出復(fù)數(shù)

private:〃私有數(shù)據(jù)成員

doublereal;〃復(fù)數(shù)實(shí)部

doubleimag;〃復(fù)數(shù)虛部

};

complexcomplex::

operator+(complexc2)〃重載函數(shù)實(shí)現(xiàn)

{

complexc;

c.real=c2.real+real;

c.imag=c2.imag+imag;

returncomplex(c.real,c.imag);

}

complexcomplex::

operator-(complexc2)〃重載函數(shù)實(shí)現(xiàn)

{

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()〃主函數(shù)

{complexcl(5,4),c2(2,10),c3;〃聲明復(fù)數(shù)類(lèi)的對(duì)象

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

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

c3=cl-c2;〃使用重載運(yùn)算符完成復(fù)數(shù)減法

cout?Hc3=cl-c2=n;

c3.display();cout?endl;

c3=cl+c2;〃使用重載運(yùn)算符完成復(fù)數(shù)加法

cout?nc3=c1+c2=";

c3.display();cout?endl;

六、實(shí)驗(yàn)數(shù)據(jù)處理與分析

顯示的實(shí)驗(yàn)結(jié)果是否正確?若不正確,分析原因。

七、注意事項(xiàng)

1.VisualC++環(huán)境中是以項(xiàng)目的形式來(lái)管理應(yīng)用程序。

2.類(lèi)中成員的訪(fǎng)問(wèn)權(quán)限。

3.類(lèi)中成員函數(shù)的訪(fǎng)問(wèn)權(quán)限。

八、預(yù)習(xí)與思考題

1.總結(jié)C++程序的結(jié)構(gòu)和書(shū)寫(xiě)規(guī)則。

2.構(gòu)造函數(shù)是什么時(shí)間被誰(shuí)調(diào)用的?

3.類(lèi)的成員函數(shù)可以是私有的嗎?類(lèi)的私有成員是如何被訪(fǎng)問(wèn)的?

4.基類(lèi)派生了派生類(lèi),基類(lèi)的構(gòu)造函數(shù)是如何被調(diào)用的?

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

6.運(yùn)算符的重載應(yīng)該注意什么?

16

實(shí)驗(yàn)二:Windows編程和對(duì)話(huà)框程序設(shè)計(jì)

一、實(shí)驗(yàn)?zāi)康呐c要求(4學(xué)時(shí))

1.理解Windows編程特點(diǎn)。

2.了解MFC應(yīng)用程序的消息映射、數(shù)據(jù)映射、運(yùn)行時(shí)類(lèi)型檢查和診斷信息轉(zhuǎn)儲(chǔ)機(jī)制。

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

4.掌握對(duì)話(huà)框編輯器的使用方法。熟悉對(duì)話(huà)框的編程過(guò)程。

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

二、實(shí)驗(yàn)類(lèi)型

驗(yàn)證型

三、實(shí)驗(yàn)原理及說(shuō)明

Windows應(yīng)用程序的結(jié)構(gòu)。

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

四、實(shí)驗(yàn)儀器

序號(hào)名稱(chēng)主要用途

1計(jì)算機(jī)用于驗(yàn)證VC++程序

五、實(shí)驗(yàn)內(nèi)容和步驟

1.創(chuàng)建一個(gè)簡(jiǎn)單的Windows應(yīng)用程序。

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

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

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

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

17

此應(yīng)用程序。

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

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

(5)輸入代碼:

#include<windows.h>

intWINAPIWinMain(HINSTANCEhlnstance,HINSTANCEhPrevInstance,

LPSTRIpCmdLine,intnCmdShow)

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

return0;

}______.

問(wèn)候

(6)運(yùn)行程序,結(jié)果為:

你好,我的VisualC++世界?

二二期定二ml

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

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

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

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

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

此應(yīng)用程序。

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

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

(5)輸入代碼:

#include<windows.h>

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

intWINAPIWinMain(HINSTANCEhlnstance,HINSTANCEhPrevInstance,LPSTR

IpCmdLine,intnCmdShow)

{HWNDhwnd;//窗口句柄

MSGmsg;//消息

WNDCLASSwndclass;〃窗口類(lèi)

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";//窗口類(lèi)名

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

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

return0;

hwnd=CreateWindow("HelloWin”,//窗口類(lèi)名

〃我的窗口〃,//窗口標(biāo)題

WSOVERLAPPEDWINDOW,//窗口樣式

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

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

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

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

NULL,//父窗口句柄

NULL,//窗口菜單句柄

hlnstance,//應(yīng)用程序?qū)嵗浔?/p>

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

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

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

//進(jìn)入消息循環(huán):當(dāng)從應(yīng)用程序消息隊(duì)列中檢取的消息是視QUIT時(shí),則退出循環(huán)。

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

{TranslateMessage(&msg);//轉(zhuǎn)換某些鍵盤(pán)消息

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

)

19

returnmsg.wParam;

)

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMIParam)

{switch(message)

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

return0;

caseWM_LBUTT0ND0WN:

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

return0;

caseWM_DESTROY://當(dāng)窗口關(guān)閉時(shí)產(chǎn)生的消息

PostQuitMessage(0);

return0;

)

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

)

(6)程序運(yùn)行后,單擊鼠標(biāo)左鍵,就會(huì)彈出?個(gè)對(duì)話(huà)框。

結(jié)果如下:

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

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

Ex_HelloMFC空應(yīng)用程序項(xiàng)目。

20

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

項(xiàng),在右邊的File框中鍵入Ex_HelloMsg.cpp,單擊在K]。

(3)輸入代碼:

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

classCHelloApp:publicCWinApp//聲明應(yīng)用程序類(lèi)

{public:

virtualBOOLInitlnstanceO;};

CHelloApptheApp;//建立應(yīng)用程序類(lèi)的實(shí)例

classCMainFrame:publicCFrameWnd//聲明主窗口類(lèi)

{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()//單擊鼠標(biāo)左鍵消息的映射宏

ENDJfESSAGEMAPO

voidCMainFrame::OnLButtonDown(UINTnFlags,CPointpoint)

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

CFrameWnd::OnLButtonDown(nFlags,point);

)

//每當(dāng)應(yīng)用程序首次執(zhí)行時(shí)都要調(diào)用的初始化函數(shù)

BOOLCHelloApp::InitlnstanceO

{m_pMainWnd=newCMainFrameO;

mpMainWnd->ShowWindow(mnCmdShow);

21

m_pMainWnd->UpdateWindow();

returnTRUE;

)

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

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

(5)程序運(yùn)行后,單擊鼠標(biāo)左鍵,就會(huì)彈出一個(gè)對(duì)話(huà)框。

結(jié)果如下:

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

(1)選擇“File"/“New”,選擇Projects標(biāo)簽;選擇MFCAppWizard(exe)的項(xiàng)目類(lèi)型(該

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

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

22

(2)從應(yīng)用程序類(lèi)型SingleDocument>MultipleDocument和DialogBased中選擇SDI。

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

(3)編譯并運(yùn)行。結(jié)果如下。

5.在單文檔應(yīng)用程序窗口中加入?個(gè)模式對(duì)話(huà)框。運(yùn)行程序,查看模式對(duì)話(huà)框。

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

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

打開(kāi)“插入”菜單,選擇“資源”命令,在“插入資源”對(duì)話(huà)框中,選擇“dialog”,

然后,按“新建”按鈕。

23

在插入的“對(duì)話(huà)框”中,修改對(duì)話(huà)框的屬性中的“標(biāo)題”,改為:“我的模式對(duì)話(huà)框”。

(3)創(chuàng)建對(duì)話(huà)框類(lèi)

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

在創(chuàng)建新類(lèi)的對(duì)話(huà)框中,有新類(lèi)默認(rèn)的基類(lèi)和對(duì)話(huà)框的ID。

輸入新類(lèi)的“類(lèi)名”,該類(lèi)的相應(yīng)的文件,在類(lèi)名下面。如圖所示。

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

24

(4)顯示對(duì)話(huà)框

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

25

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

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

窗以口第國(guó)西軸

▼classmembersj*CFirst

-a12resources*

+LJAccelerator

-曰)Dialog

3IDD_ABOUTBOX

尋IDD_DIALOG1

+_JVersion

打開(kāi)菜單編輯器,在“幫助”菜單后面的空白處,雙擊,在彈出的“菜單項(xiàng)目”

屬性對(duì)話(huà)框中,添加“測(cè)試”菜單項(xiàng)。

在“測(cè)試”下面的空白處,雙擊,在彈出的“菜單項(xiàng)目”屬性對(duì)話(huà)框中,填寫(xiě)菜

單命令的ID(ID_TEST_DLG)和標(biāo)題(菜單命令名)(對(duì)話(huà)框)。

26

文件g弱輯?查看g幫助國(guó))測(cè)試

打開(kāi)“查看”菜單,選擇“建立類(lèi)向?qū)А泵睿陬?lèi)名處選擇“CMainFrame”,在

“ObjectIDs”選擇“ID_TEST_DLG",在“Message”下選擇“COMMAND”,然后點(diǎn)

"AddFunction"按鈕。為“對(duì)話(huà)框”命令建立消息處理函數(shù)。

在彈出的對(duì)話(huà)框中,按“0K”按鈕。

在對(duì)話(huà)框中,單擊“EditCode”按鈕。在相應(yīng)的函數(shù)處,添加代碼。

CFirstDlgdig;//定義對(duì)話(huà)框類(lèi)對(duì)象

dlg.DoModal();//顯示對(duì)話(huà)框

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

執(zhí)行程序即可。

6.在窗口中加入一個(gè)無(wú)模式對(duì)話(huà)框。運(yùn)行程序,查看無(wú)模式對(duì)話(huà)框。

(1)在第5題的項(xiàng)目中添加一個(gè)對(duì)話(huà)框資源,將其標(biāo)識(shí)符設(shè)為

27

IDD_DIALOG_SECOND,標(biāo)題設(shè)為“無(wú)模式對(duì)話(huà)框”,對(duì)話(huà)框字體和大小設(shè)為“宋體,

9號(hào)”。

(2)為IDD_DIALOG_SECOND對(duì)話(huà)框資源創(chuàng)建一個(gè)對(duì)話(huà)框類(lèi)CSecondDlg。

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

在IDs列表中選擇ID0K,它是對(duì)話(huà)框中[OK]按鈕的標(biāo)識(shí)符,然后在Messages框中選擇

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

“AddMemberFunction”對(duì)話(huà)框以輸入成員函數(shù)的名稱(chēng),保留系統(tǒng)默認(rèn)的函數(shù)名為OnOK。

該函數(shù)是對(duì)[OK]按鈕單擊消息的映射,即當(dāng)用戶(hù)單擊此對(duì)話(huà)框中的[0K]按鈕時(shí),OnOK

函數(shù)被執(zhí)行。

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

voidCSecondDlg::0n0K()

{

DestroyWindowO;//終止對(duì)話(huà)框顯示

deletethis;//刪除對(duì)話(huà)框,釋放內(nèi)存空間

)

代碼中,DestroyWindow是對(duì)話(huà)框基類(lèi)CWnd的一個(gè)成員函數(shù),用來(lái)終止窗口。

(5)用MFCClassWizard來(lái)添加[Cancel]按鈕(標(biāo)識(shí)符為IDCANCEL)的BN/UCKED消息映

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

voidCSecondDlg::0nCancel()

(

DestroyWindowO;

deletethis;

)

(6)將項(xiàng)目工作區(qū)切換到ClassView(類(lèi)視圖)頁(yè)面,展開(kāi)CMainFrame類(lèi)的所有成員,雙

擊OnTestDlg就會(huì)在文檔窗口中自動(dòng)定位到該函數(shù)的實(shí)現(xiàn)代碼處,將其修改成下列代碼:

28

voidCMainFrame::OnTestDlg()

(

CSecondDlg*pDlg=newCSecondDlg;//使用new來(lái)為對(duì)話(huà)框分配內(nèi)存空間

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

pDlg->ShowWindow(SW_N0RMAL);//顯示對(duì)話(huà)框

}

代碼中,Create函數(shù)可以用來(lái)以一個(gè)對(duì)話(huà)框資源來(lái)創(chuàng)建對(duì)話(huà)框,ShowWindow是CWnd?個(gè)

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

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

#include"FirstDlg.h"

#include"SecondDlg.h"

(8)編譯并運(yùn)行。在應(yīng)用程序菜單上,多次選擇“測(cè)試”一“對(duì)話(huà)框”菜單項(xiàng),將會(huì)在

同一個(gè)位置中出現(xiàn)多個(gè)對(duì)話(huà)框,拖動(dòng)這些對(duì)話(huà)框到適當(dāng)位置。

六、實(shí)驗(yàn)數(shù)據(jù)處理與分析

顯示的實(shí)驗(yàn)結(jié)果是否正確?若正確,解釋原因;若不正確,分析原因。

七、注意事項(xiàng)

1、鼠標(biāo)左鍵單擊時(shí),應(yīng)用程序響應(yīng)的實(shí)現(xiàn)方法。

2、應(yīng)用程序和對(duì)話(huà)框之間的消息傳遞的實(shí)現(xiàn)。

八、預(yù)習(xí)與思考題

1、VC++中如何接收和響應(yīng)鼠標(biāo)消息?

2、MFC應(yīng)用程序的建立和使用WindowsAPI函數(shù)建立的應(yīng)用程序有什么差別?

3、模式對(duì)話(huà)框和非模式對(duì)話(huà)框的概念。

29

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論