Visual C++实践指导教程习题答案.docx

上传人:b****0 文档编号:9752331 上传时间:2023-05-21 格式:DOCX 页数:101 大小:1.16MB
下载 相关 举报
Visual C++实践指导教程习题答案.docx_第1页
第1页 / 共101页
Visual C++实践指导教程习题答案.docx_第2页
第2页 / 共101页
Visual C++实践指导教程习题答案.docx_第3页
第3页 / 共101页
Visual C++实践指导教程习题答案.docx_第4页
第4页 / 共101页
Visual C++实践指导教程习题答案.docx_第5页
第5页 / 共101页
Visual C++实践指导教程习题答案.docx_第6页
第6页 / 共101页
Visual C++实践指导教程习题答案.docx_第7页
第7页 / 共101页
Visual C++实践指导教程习题答案.docx_第8页
第8页 / 共101页
Visual C++实践指导教程习题答案.docx_第9页
第9页 / 共101页
Visual C++实践指导教程习题答案.docx_第10页
第10页 / 共101页
Visual C++实践指导教程习题答案.docx_第11页
第11页 / 共101页
Visual C++实践指导教程习题答案.docx_第12页
第12页 / 共101页
Visual C++实践指导教程习题答案.docx_第13页
第13页 / 共101页
Visual C++实践指导教程习题答案.docx_第14页
第14页 / 共101页
Visual C++实践指导教程习题答案.docx_第15页
第15页 / 共101页
Visual C++实践指导教程习题答案.docx_第16页
第16页 / 共101页
Visual C++实践指导教程习题答案.docx_第17页
第17页 / 共101页
Visual C++实践指导教程习题答案.docx_第18页
第18页 / 共101页
Visual C++实践指导教程习题答案.docx_第19页
第19页 / 共101页
Visual C++实践指导教程习题答案.docx_第20页
第20页 / 共101页
亲,该文档总共101页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Visual C++实践指导教程习题答案.docx

《Visual C++实践指导教程习题答案.docx》由会员分享,可在线阅读,更多相关《Visual C++实践指导教程习题答案.docx(101页珍藏版)》请在冰点文库上搜索。

Visual C++实践指导教程习题答案.docx

VisualC++实践指导教程习题答案

《VisualC++实践指导教程》

习题答案

目录

第1章3

1.3

2.3

第2章5

1.5

2.5

3.6

4.7

5.7

6.9

7.9

第3章11

1.11

2.11

3.12

4.12

5.13

6.14

第4章15

1.15

2.16

3.17

4.18

5.19

第5章21

1.21

2.22

3.23

4.25

5.26

6.27

第6章30

1.30

2.32

3.33

4.35

5.36

第7章39

1.39

2.41

3.43

4.45

5.47

6.50

第8章51

1.51

2.51

3.52

4.53

5.55

6.58

第9章60

1.60

2.64

3.67

第1章

1.

(1)实践结果

(2)控件属性表

(3)程序源代码

voidCMdHelloView:

:

OnDraw(CDC*pDC)

{

CMdHelloDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

//TODO:

adddrawcodefornativedatahere

pDC->TextOut(50,50,"HelloWorld!

");

}

2.

(1)实践结果

(2)控件属性表

控件类型

控件名

ID

类型

成员

Label

Label1

IDC_STATIC

(3)程序源代码

BOOLCDlgHelloDlg:

:

OnInitDialog()

{

……

//TODO:

Addextrainitializationhere

this->SetDlgItemText(IDC_STATIC,"这是一个对话框程序");

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

(4)说明

在此程序中使用了一个常用函数BOOLSetDlgItemText(intnID,LPCTSTRlpszString),该函数实现了通过控件的ID号(nID)设置控件的显示文本(lpszString)。

与此对应的还有

UINTGetDlgItemText(intnID,LPTSTRlpStr,intnMaxCount)const

BOOLGetDlgItemText(intnID,BSTR&bstrText)const

详见MSDN

第2章

1.

(1)实践结果

(2)控件属性表

(3)程序源代码

(4)说明

参见实践1(创建菜单)中创建菜单的方法,为程序菜单添加“格式”菜单项,并在其下添加子菜单项,分别为“自动换行”和“字体”,ID号分别为“IDC_AUTOLINE”和“IDC_FONT”。

控件类型

控件名

ID

类型

成员

Label

Label1

IDC_STATIC

2.

(1)实践结果

(2)控件属性表

(3)程序源代码

1)参照练习1的方法添加在“文件”菜单项下添加“显示”子菜单项。

2)为“显示”子菜单项添加事件处理函数OnShow()。

3)添加源代码

voidCMainFrame:

:

OnShow()

{

//TODO:

Addyourcommandhandlercodehere

CDC*pDC=this->GetDC();

pDC->TextOut(50,50,"学习菜单处理程序");

}

(4)说明

绘图时,必须先获得设备环境,即CDC。

在此程序中使用函数GetDC()获得设备环境指针。

3.

(1)实践结果

(2)控件属性表

(3)程序源代码

参照教材实践3(增加快捷键和加速键)

1)将子菜单项“显示”的标题按钮修改为“显示(&D)”;

2)打开加速键编辑器,将对应菜单项的KEY修改为D。

(4)说明

 

4.

(1)实践结果

(2)控件属性表

(3)程序源代码

voidCMenuCreateView:

:

OnAddItem()

{

CWnd*pParent=GetParent();

CMenu*pMenu=pParent->GetMenu();

CMenu*subMenu=pMenu->GetSubMenu

(1);

subMenu->AppendMenu(MF_STRING|MF_ENABLED,3000,"新菜单项");

}

(4)说明

添加新菜单项与为该菜单项添加事件响应函数的方法见上例。

动态添加菜单项的步骤:

首先定位待添加的菜单项,GetParent()函数用于获得当前窗体,pParent->GetMenu()与pMenu->GetSubMenu

(1)用于获得当前窗体的菜单及待添加菜单项,AppendMenu(…)用于执行自动添加菜单项的动作。

5.

(1)实践结果

(2)控件属性表

(3)程序源代码

1)添加消息映射,在视类中的消息映射宏中添加消息映射,添加代码显示如下:

BEGIN_MESSAGE_MAP(CMenuCreateView,CView)

……

ON_COMMAND(3000,OnMyMenuItem)

END_MESSAGE_MAP()

2)添加响应函数

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CMenuCreateView)

public:

……

protected:

……

afx_msgvoidOnMyMenuItem();

//}}AFX_VIRTUAL

3)定义一个字符串,并在构造函数中初始化

定义:

classCMenuCreateView:

publicCView

{

private:

CStringstr;

……

初始化:

CMenuCreateView:

:

CMenuCreateView()

{

//TODO:

addconstructioncodehere

str="";

}

4)实现响应函数

voidCInsertItemView:

:

OnMyMenuItem()

{

str="你选中了新添加的菜单项";

Invalidate();

}

5)绘图

voidCMenuCreateView:

:

OnDraw(CDC*pDC)

{

CMenuCreateDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

//TODO:

adddrawcodefornativedatahere

pDC->TextOut(20,20,str);

}

(4)说明

动态添加菜单项处理时,须定义菜单项消息与响应函数之间的映射关系。

此处通过ON_COMMAND(3000,OnMyMenuItem)来实现。

6.

(1)实践结果

(2)控件属性表

(3)程序源代码

在MainFrm.cpp的新函数OnCreate()中加入如下代码:

if(!

m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP

|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||

!

m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{

TRACE0("Failedtocreatetoolbar\n");

return-1;//failtocreate

}

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_wndToolBar);

(4)说明

关于此源代码中各函数的功能详见教材实践五“程序分析与注意事项”。

7.

(1)实践结果

(2)控件属性表

(3)程序源代码

1)新建工程CustomToolbar,按教材实践7步骤一初始化,修改字串表中的AFX_IDS_IDLEMESSAGE的标题为“XXX公司:

版权所有”。

2)在MailFrame中定义状态栏

classCMainFrame:

publicCFrameWnd

{

private:

CStatusBarm_wndStatusBar;

……

3)定义状态栏数组

staticUINTindicators[]=

{

ID_SEPARATOR,//statuslineindicator

ID_INDICATOR_CAPS,

ID_INDICATOR_NUM,

ID_INDICATOR_SCRL,

};

4)添加自动创建状态栏代码

intCMainFrame:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)

{

……

if(!

m_wndStatusBar.Create(this)||

!

m_wndStatusBar.SetIndicators(indicators,

sizeof(indicators)/sizeof(UINT)))

{

TRACE0("Failedtocreatestatusbar\n");

return-1;//failtocreate

}

return0;

}

(4)说明

1)staticUINTindicators[]定义一个由标准命令ID组成的数组。

•ID_SEPARATOR:

指示在状态栏中生成一个空格。

•ID_INDICATOR_CAPS:

大写键锁定指示。

•ID_INDICATOR_NUM:

数字键锁定指示。

•ID_INDICATOR_SCRL:

滚动键锁定指示。

2)状态栏类的Create函数创建一个状态栏对象,函数SetIndicators设置状态栏的显示内容。

第3章

1.

(1)实践结果

(2)控件属性表

(3)程序源代码

打开资源编辑器,选中对话框IDD_ABOUTBOX,右击对话框上的两个静态文本框(IDC_STATIC),分别修改其标题属性为“简单的记事本程序”和“华北科技学院\nE_mail:

wangyangting@王养廷”。

(4)说明

修改控件标题的方式既可如上所示,直接可视化修改,也可编写代码实现,即函数SetDlgItemText(nID,pzstring)。

2.

(1)实践结果

(2)控件属性表

(3)程序源代码

打开资源编辑器,选中菜单IDR_MAINFRAME,在“编辑”下首先添加分隔条子菜单项,然后再添加“查找”子菜单项。

(4)说明

回顾第2章,在添加“查找”子菜单项时,其标题应为“查找(&F)”,即定义快捷键。

3.

(1)实践结果

(2)控件属性表

控件类型

ID

标题

说明

Label

IDC_STATIC

查找目标

Text

IDC_EDIT_CONTEXT

Checkbox

IDC_CHECK_UORL

区分大小写

Radiobox

IDC_RADIO_UP

向上(&U)

Radiobox

IDC_RADIO_DOWN

向下(&D)

Button

IDOK

查找下一个

Button

IDCANCEL

取消

CDialog

IDD_DLG_FIND

查找

对话框整体

(3)程序源代码

打开资源编辑器,选中文件夹Dialog,单击右键,弹出右键菜单后选中“插入Dialog…”,并修改新插入的对话框属性,令其ID为IDD_DLG_FIND,标题为“查找”。

再在对话框其上添加控件并布局。

(4)说明

4.

(1)实践结果:

(2)控件属性表

(3)程序源代码

在对话框资源上单击右键,选中“建立类向导”项,弹出“Addingaclass”对话框,选择“Createanewclass”单选框,确定后将弹出“NewClass”对话框。

在其中输入新类信息,Name中输入“CFingDlg”,确定退出。

(4)说明

也可按快捷键Ctrl+W,要求弹出“类向导对话框”,在“类向导对话框”之前会出现“Addingaclass”对话框,其后的设置与上例完全一样。

5.

(1)实践结果

(2)控件属性表

(3)程序源代码

1)为“查找”菜单项定义事件函数,为voidCDialogTestView:

:

OnEditFind()。

2)在其中以模式对话框的方式调用“查找”对话框,代码如下:

voidCDialogTestView:

:

OnEditFind()

{

/*添加非模式对话框*/

CFindDlgfinddlg;

finddlg.DoModal();

}

(4)说明

关于模式对话框,可参考教材第3章实践5。

6.

(1)实践结果

(2)控件属性表

(3)程序源代码

1)为“查找”菜单项定义事件函数,为voidCDialogTestView:

:

OnEditFind()。

2)在其中以模式对话框的方式调用“查找”对话框,代码如下:

voidCDialogTestView:

:

OnEditFind()

{

//添加模式对话框//

CFindDlg*dlg=newCFindDlg();

dlg->Create(IDD_DLG_FIND);

dlg->ShowWindow(SW_SHOW);

}

(4)说明

关于非模式对话框,可参考教材第3章实践5。

 

第4章

1.

(1)实践结果

(2)控件属性表

控件类型

ID

标题

说明

Label

IDC_STATIC

您选择的体形:

Label

IDC_STATIC_RESULT

选择结果

Radiobox

IDC_RADIO_NORMAL

正常

Radiobox

IDC_RADIO_THIN

偏瘦

Radiobox

IDC_RADIO_FAT

偏胖

(3)程序源代码

在3个Radiobox控件上添加单击事件,分别为如下3个函数,并添加代码:

voidCRadioTestDlg:

:

OnRadioFat()

{

UpdateData();

m_strResult="您的体形是:

较胖";

UpdateData(false);

}

voidCRadioTestDlg:

:

OnRadioNormal()

{

UpdateData();

m_strResult="您的体形是:

正常";

UpdateData(false);

}

voidCRadioTestDlg:

:

OnRadioThin()

{

UpdateData();

m_strResult="您的体形是:

较瘦";

UpdateData(false);

}

(4)说明

关于UpdateData函数这里解释一下。

UpdateData函数主要起到控制控件标题显示的作用。

当调用UpdataData(TRUE)的时候,程序会对控件对应的变量值进行刷新,也就是说会把控件中的输入值赋给对应的变量。

而调用UpdataData(FALSE)的时候,程序则会把相应变量的值显示在对应的控件上面。

2.

(1)实践结果

 

(2)控件属性表

控件类型

ID

标题

类型

成员

Label

IDC_STATIC

请选择特长:

Label

IDC_STATIC_RESULT

显示结果:

CString

m_strResult

Checkbox

IDC_CHECK_ENGLISH

英语

bool

m_bEnglish

Checkbox

IDC_CHECK_SPORTS

体育

bool

m_bSports

Checkbox

IDC_CHECK_ART

文艺

bool

m_bArt

Checkbox

IDC_CHECK_COMPUTER

计算机

bool

m_bComputer

button

IDOK

确定

(3)程序源代码

在“确定“按钮上添加单击事件,添加代码如下:

voidCCheckTestDlg:

:

OnOK()

{

UpdateData();

CStringstr;

str="您的特长为:

";

if(m_bEnglish==true)

{

str=str+"英语";

}

if(m_bArt==true)

{

str=str+"文艺";

}

if(m_bComputer==true)

{

str=str+"计算机";

}

if(m_bSports==true)

{

str=str+"体育";

}

m_strResult=str;

UpdateData(false);

}

(4)说明

在此处关键为Checkbox定义控件类型与成员,与上例RadioBox的用法不尽相同,注意区别。

3.

(1)实践结果

(2)控件属性表

控件类型

ID

标题

类型

成员

Radiobox

IDC_RADIO1

请选择特长:

int

m_nTerm

Radiobox

IDC_RADIO2

显示结果:

Checkbox

IDC_CHECK1

心理学

bool

m_bck1

Checkbox

IDC_CHECK2

外国文学

bool

m_bck2

Checkbox

IDC_CHECK3

管理学

bool

m_bck3

Checkbox

IDC_CHECK4

经济史

bool

m_bck4

Checkbox

IDC_CHECK5

近代史

bool

m_bck5

Checkbox

IDC_CHECK6

社会学

bool

m_bck6

button

IDOK

确定

(3)程序源代码

在“确定“按钮上添加单击事件:

voidCGroupTestDlg:

:

OnOK()

{

//可在其中添加代码执行相应功能

}

(4)说明

注意区别Checkbox与Radiobox在使用时的不同之外,前者可多选,而后者要求在同一组内的控件只可单选。

因此,在使用后者时必须对Radiobox指定分组。

4.

(1)实践结果

(2)控件属性表

控件类型

ID

标题

类型

成员

List

IDC_LIST

control

m_list

text

IDC_EDIT

control

m_edit

button

ID_BUTTON_EDIT

修改

button

ID_BUTTON_DELETE

删除

button

ID_BUTTON_EXIT

退出

(3)程序源代码

初始化列表框代码:

BOOLCListTestDlg:

:

OnInitDialog()

{

……

m_list.AddString("语文");

m_list.AddString("数学");

m_list.AddString("英语");

…….

}

为3个按钮添加事件为:

voidCListTestDlg:

:

OnButtonEdit()

{

CStringstr;

m_edit.GetWindowText(str);

m_list.AddString(str);

m_edit.SetWindowText("");

m_edit.SetFocus();

}

voidCListTestDlg:

:

OnButtonDelete()

{

intst;

st=m_list.GetCurSel();

m_list.DeleteString(st);

}

voidCListTestDlg:

:

OnButtonExit()

{

OnCancel();

}

(4)说明

若想直接在列表框上单击便能选中某项,可在列表框上定义单击事件,读者可自行尝试完成。

5.

(1)实践结果

(2)控件属性表

控件类型

ID

标题

类型

成员

combo

IDC_COMBO

control

m_combo

Cstring

m_strCombo

radiobox

IDC_RADIO_NOT_VILLIAGE

非农户口

control

m_radio

radiobox

IDC_RADIO_VILLIAGE

农业户口

checkbox

IDC_CHECK_JIXIE

机械工程

bool

m_bckjjixie

checkbox

IDC_CHECK_JINGJI

经济管理

bool

m_bckjigji

checkbox

IDC_CHECK_JSJ

计算机技术

bool

m_bckjsj

checkbox

IDC_CHECK_DIANZI

电子技术

bool

m_bckdianzi

Button

ID_BUTTON_SUBMIT

提交

button

ID_BUTTON_EXIT

退出

(3)程序源代码

为提交按钮添加事件处理函数:

voidCComboTestDlg:

:

OnButtonSubmit()

{

CStringm_strProvince;

CStringm_strResidence;

UpdateData(true);

m_strProvince=m_strCombo;

if(m_radio.GetCheck()==1)

m_strResidence="非农业户口";

else

m_strResidence="农业户口";

CStringm_strCource="";

if(this->m_bckdianzi==TRUE)

m_strC

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2