![計(jì)算機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第1頁(yè)](http://file4.renrendoc.com/view10/M02/35/26/wKhkGWW0xRaAe_XSAABOzrBqJFs639.jpg)
![計(jì)算機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第2頁(yè)](http://file4.renrendoc.com/view10/M02/35/26/wKhkGWW0xRaAe_XSAABOzrBqJFs6392.jpg)
![計(jì)算機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第3頁(yè)](http://file4.renrendoc.com/view10/M02/35/26/wKhkGWW0xRaAe_XSAABOzrBqJFs6393.jpg)
![計(jì)算機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第4頁(yè)](http://file4.renrendoc.com/view10/M02/35/26/wKhkGWW0xRaAe_XSAABOzrBqJFs6394.jpg)
![計(jì)算機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第5頁(yè)](http://file4.renrendoc.com/view10/M02/35/26/wKhkGWW0xRaAe_XSAABOzrBqJFs6395.jpg)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 文學(xué)社組社方案及招生簡(jiǎn)章范文
- 現(xiàn)代企業(yè)財(cái)務(wù)管理的全球化視角
- 全鋼爬架施工方案
- 汽車(chē)行業(yè)的品牌競(jìng)爭(zhēng)戰(zhàn)略分析
- 國(guó)慶節(jié)小吃店鋪活動(dòng)方案
- 國(guó)慶節(jié)手工干貨活動(dòng)方案
- 12《富起來(lái)到強(qiáng)起來(lái)》第一課時(shí)說(shuō)課稿-2023-2024學(xué)年道德與法治五年級(jí)下冊(cè)統(tǒng)編版001
- 2023六年級(jí)英語(yǔ)上冊(cè) Unit 3 Winter in canada Lesson 14 Snow!It's Winter說(shuō)課稿 冀教版(三起)
- 2024-2025學(xué)年新教材高中物理 第三章 恒定電流 第3節(jié) 測(cè)量金屬絲的電阻率說(shuō)課稿 粵教版必修3
- 2024秋七年級(jí)數(shù)學(xué)上冊(cè) 第3章 一次方程與方程組3.4 二元一次方程組的應(yīng)用 2列二元一次方程組解實(shí)際應(yīng)用(一)說(shuō)課稿(新版)滬科版
- 2025-2030年中國(guó)電動(dòng)高爾夫球車(chē)市場(chǎng)運(yùn)行狀況及未來(lái)發(fā)展趨勢(shì)分析報(bào)告
- 河南省濮陽(yáng)市2024-2025學(xué)年高一上學(xué)期1月期末考試語(yǔ)文試題(含答案)
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及答案解析
- 安全事故案例圖片(76張)課件
- 預(yù)應(yīng)力錨索施工方案
- 豇豆生產(chǎn)技術(shù)規(guī)程
- 奢侈品管理概論完整版教學(xué)課件全書(shū)電子講義(最新)
- 文藝美學(xué)課件
- 中藥炮制學(xué)教材
- 常見(jiàn)腫瘤AJCC分期手冊(cè)第八版(中文版)
- 電氣第一種第二種工作票講解pptx課件
評(píng)論
0/150
提交評(píng)論