友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

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

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



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(
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!