《C语言实例教程(PDF格式)》第125章


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(
小说推荐
返回首页返回目录