GetAt
获取数组内指定位置处的值
GetSize
获取数组中包含的元素个数
GetUpperBound
获取数组的上界值。
InsertAt
在数组的指定位置处插入一个元素,后面的元素的下标加1。
RemoveAll
删除数组中所有的元素。
SetAt
设定数组指定位置处的值。因为制革函数不会增加数组的大小,故这
个下标此时一定要有效。
SetAtGrow
设定数组的指定位置处的值,可以根据需要增大数组的大小。
SetSize
设置数组的初始大小。
下面将介绍一个数组的程序,这个程序可以让你测试一下MFC的数组
类。
…………………………………………………………Page 595……………………………………………………………
首先,这个程序在View类中声明一个数组对象,如下:
CUIntArray array;
接着,在View类的构造函数中初始化数组,将其设置成包含十个元
素,
array。SetSize(10; 5);
SetSize 函数有两个参数,第一个参数是数组的初始大小,第二
个参数是数组元素每次增加时增加的个数。
在设置完数组的大小之后,程序等待用户在窗口中单击鼠标左键或右
键。如果用户这样做了,程序将显示一个合适的对话框并且处理输入
到对话框中的数据。下面的代码是该程序的OnLButtonDown 函
数,用于处理用户单击右键的事件。
void CArrayView::OnLButtonDown(UINT nFlags; CPoint point)
{
CArrayAddDlg dialog(this);
dialog。m_index = 0;
dialog。m_value = 0;
dialog。m_radio = 0;
int result = dialog。DoModal();
if (result == IDOK)
{
if (dialog。m_radio == 0)
array。SetAtGrow(dialog。m_index; dialog。m_value);
else if (dialog。m_radio == 1)
array。InsertAt(dialog。m_index; dialog。m_value; 1);
else
array。Add(dialog。m_value);
Invalidate();
…………………………………………………………Page 596……………………………………………………………
}
CView::OnLButtonDown(nFlags; point);
}
这段代码开始先创建一个对话框对象并初始化。如果用户选择对话框
的 “确定”按钮,OnLButton 函数将检查对话框的成员变量
m_radio。值为0表示第一个单选按钮 (设置)被选中,值为1表示第
二个单选按钮 (插入)被选中,值为2表示第三个单选按钮 (添加)
被选中。
如果用户希望设置数组的元素,程序将调用SetAtGrow 函数,它
需要两个参数,一个是数组元素的下标值,另一个是希望设置的值。
它不象常规的SetAt 函数,用户必须使用当前有效的数组下标
值。SetAtGrow 为了设置指定位置处的值将根据需要增大数组的
大小。
当用户选择了 “插入”单选按钮,程序将调用InsertAt 函数,它
需要两个参数,一个是要插入的数组元素的下标,另一个是该数组元
素的值。这将在指定位置处创建一个新的数组元素,并将把后面的元
素往后推。最后当用户选择了 “添加”按钮,程序将调用Add()函
数,这将在数组的后面添加一个元素。对Invalidate 的调用将使
程序重新显示数据。
下面的OnDraw 函数读取并显示数组。
void CArrayView::OnDraw(CDC* pDC)
{
CArrayDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// Get the current font"s height。
TEXTMETRIC textMetric;
pDC…》GetTextMetrics(&textMetric);
int fontHeight = textMetric。tmHeight;
// Get the size of the array。
int count = array。GetSize();
…………………………………………………………Page 597……………………………………………………………
int displayPos = 10;
// Display the array data。
for (int x=0; xTextOut(10; displayPos; s);
displayPos += fontHeight;
}
}
这里,程序首先获得当前字体的高度,然后程序通过调用GetSize
函数获得数组元素的个数。最后,使用数组元素的个数控制一个
for循环,调用GetAt 函数获得当前下标处的数组元素的值。为了
显示程序将数组元素的值转化成字符串。
程序的OnRButtonDown 函数用来响应用户按下鼠标右键的事件,
此函数用来处理删除数组元素的任务。下面是该函数的代码:
void CArrayView::OnRButtonDown(UINT nFlags; CPoint point)
{
// TODO: Add your message handler code here and/or call default
CArrayRemoveDlg dialog(this);
dialog。m_radio= 1;
dialog。m_index= 0;
int result = dialog。DoModal();
if (result == IDOK)
{
if (dialog。m_radio==0)
…………………………………………………………Page 598……………………………………………………………
array。RemoveAll();
else
array。RemoveAt(dialog。m_index);
Invalidate();
}
CView::OnRButtonDown(nFlags; point);
}
在这个函数中,当显示完对话框后,程序检查对话框的成员变量
m_removeAll。如果这个值为真意味着用户希望删除数组中所有的元
素。这种情况下,程序调用数组类的成员函数RemoveAll 。否
则,程序将调用RemoveAt 删除指定位置处的数组元素。最后调用
Invalidate 函数刷新数据显示。
下面将介绍对话框类CArrayAddDlg,按照下面的步骤创建这个对话框
类。
1。 创建如图10。1所示的对话框,3个单选按钮的ID分别为IDC_ADD0,
IDC_ADD1,IDC_ADD2。
图10。 1 添加元素对话框
2。 在ClassWizard中为两个文本框映射两个UINT类型的变量
m_index,m_value。
3。 给该对话框添加一个UINT类型的成员变量m_radio。
4。 为WM_INITDIALOG添加函数OnInitDialog(),在其中设置单选按钮
的初始状态。
BOOL CArrayAddDlg::OnInitDialog()
…………………………………………………………Page 599……………………………………………………………
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
((CButton*)GetDlgItem(IDC_ADD0))…》SetCheck(1);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
5。 添加三个函数用以响应用户单击单选按钮。
void CArrayAddDlg::OnAdd0()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_INDEX)…》EnableWindow(true);
}
void CArrayAddDlg::OnAdd1()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_INDEX)…》EnableWindow(true);
}
void CArrayAddDlg::OnAdd2()
{
// TODO: Add your control notification handler code here
GetDlgItem(
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 其他
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 其他
- 最新章:第27章
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 其他
- 最新章:第26章
- asp基础实用教程(DOC格式)
- 目 录一、关于ASP二、ASP的新功能三、创建ASP页四、使用脚本语言五、使用变量和常量六、使用集合七、ASP内建对象八、向浏览器发送内容九、包含文件十、访问数据库十一、调试ASP脚本十二、维护ASP应用程序的安全一、关于ASP Active Server Pages(ASP)是服务器端脚本编写环境
- 其他
- 最新章:第17章
- Linux实用培训教程(PDF)
- -Page 1-rrktqt的个人空间 Linux实用培训教程第一部分 作者:红联Linux实用培训教程第一部分-共三部分解的Linux知识,循序渐进的介绍Linux相关知识,从入门到提高,希望对所有学习Linux的朋友都有帮助 红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章
- 其他
- 最新章:第42章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 其他
- 最新章:第31章
- 路由器基本知识及应用实例(DOC格式)
- 第二章 路由器第一节 路由器发展概述自从1984年问世至今,路由器已经走过了近20年的快速技术发展历程。路由器的应用领域不断扩展、从单一的互通网关逐渐扩展到覆盖广域网、城域网乃至用户接入的各个领域。近年来,路由器早已逐渐脱离单纯用于企业网出口和互联的概念,开始成为运营网络和各种专用业务网络的核心设备
- 其他
- 最新章:第48章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 其他
- 最新章:第295章