友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
C语言实例教程(PDF格式)-第70部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
TEXTMETRIC textMetric;
pDC…》GetTextMetrics(&textMetric);
int fontHeight = textMetric。tmHeight;
// Initialize values used in the loop。
POSITION pos = m_list。GetHeadPosition();
int displayPosition = 10;
// Iterate over the list; displaying each node's values。
while (pos != NULL)
{
CStudent* m_pStudent = (CStudent*)m_list。GetNext(pos);
…………………………………………………………Page 610……………………………………………………………
char s'81';
wsprintf(s; 〃 的成绩是 %d。〃;m_pStudent…》m_score);
CString m_string=m_pStudent…》m_name+s;
pDC…》TextOut(10; displayPosition; m_string);
displayPosition += fontHeight;
}
}
图10。 6 程序运行的初始窗口
14。 最后在CListView的析构函数中删除数组中所有的节点。
CMyListView::~CMyListView()
{
while (!m_list。IsEmpty())
{
CStudent* m_pStudent = (CStudent*)m_list。RemoveHead();
delete m_pStudent;
}
}
现在编译并运行这个程序,当程序运行后,弹出如图10。6所示的窗
口。单击左键,弹出如图10。4所示的对话框来添加节点。单击右键,
弹出如图10。5所示的对话框来删除节点。如果在没有节点删除节点,
将弹出如图10。7所示的对话框提示用户节点已经全部删除。
…………………………………………………………Page 611……………………………………………………………
图10。 7 没有节点时删除节点弹出的消息框
第三节 映射类
这个类用于创建关键对象和数值对象联系的集合。你可以使用MFC的
映射类创建查询表格。MFC的映射类包含CMapPtrToPtr;
CMapPtrToWord; CMapStringToOb; CMapStringToPtr;
CMapStringToString; CMapWordToOb; and CmapWordToPtr。在类的名
称中第一个数据类型是关键字的数据类型,第二个数据类型是对应的
数值的数据类型。
映射类有下列成员函数:
Lookup()
查询映射到指定关键字的值。
SetAt()
向映射中插入一个元素,如果指定的关键字存在,替换掉原来的元
素。
operator ' '
向映射中插入一个元素,其作用和SetAt()相同。
RemoveKey
查询符合关键字的映射。如果发现,则删除这个元素。
RemoveAll( )
删除映射中所有的元素。
GetStartPosition( )
获得映射中第一个元素的位置。映射中第一个元素是不预知的,所以
映射的第一个元素实际上没有特定的意义。一般将这个值传递给
GetNextAssoc 函数。
…………………………………………………………Page 612……………………………………………………………
GetNextAssoc
获得映射中指定位置处下一个元素。
GetCount( )
获得映射中元素的个数。
IsEmpty( )
测试这个数组元素是否为空。
现在用一个查询程序来使你对映射类有一个更深入的了解。按照下面
的步骤创建这个程序。
1。 创建一个单文档的应用程序Map。
2。 添加如图10。8所示的对话框,并生成基于这个对话框的类
CLookUpMapDlg;并为文本框添加一个变量m_key。
图10。 8 查询表格
3。 为CMapView添加一个CMapStringToString类型的成员变量m_map。
4。 在CMapView的构造函数中添加下列代码初始化映射。
CMapView::CMapView()
{
// TODO: add construction code here
m_map。SetAt(〃red〃; 〃红色〃);
m_map。SetAt(〃yellow〃; 〃黄色〃);
m_map。SetAt(〃green〃; 〃绿色〃);
m_map。SetAt(〃blue〃; 〃蓝色〃);
m_map。SetAt(〃white〃; 〃 白色〃);
…………………………………………………………Page 613……………………………………………………………
m_map。SetAt(〃black〃; 〃黑色〃);
}
5。 在MapView。cpp中添加下列语句:
#include 〃LookUpMapDlg。h〃
6。 为WM_LbuttonDown消息添加消息处理函数OnLButtonDown();代码
如下:
void CMapView::OnLButtonDown(UINT nFlags; CPoint point)
{
// TODO: Add your message handler code here and/or call default
CLookUpMapDlg dialog(this);
dialog。m_key = 〃〃;
// Display the dialog box。
int result = dialog。DoModal();
if (result == IDOK)
{
// Look for the requested value。
CString m_value;
BOOL m_bFound = m_map。Lookup(dialog。m_key; m_value);
if (m_bFound)
MessageBox(m_value);
else
MessageBox(〃未发现匹配字符串〃);
}
CView::OnLButtonDown(nFlags; point);
}
7。 在OnDraw()函数中添加下列代码,在视图中显示映射中所有的元
…………………………………………………………Page 614……………………………………………………………
素。
void CMapView::OnDraw(CDC* pDC)
{
CMapDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
TEXTMETRIC textMetric;
pDC…》GetTextMetrics(&textMetric);
int fontHeight = textMetric。tmHeight;
int displayPosition = 10;
POSITION pos =m_map。GetStartPosition();
CString m_key;
CString m_value;
int m_index=m_map。GetCount();
for(int i=0;iTextOut(10; displayPosition;m_str);
displayPosition += fontHeight;
}
}
现在编译并运行程序,首先出现如图10。9所示的主窗口,映射中每一
个元素都显示在
…………………………………………………………Page 615……………………………………………………………
图10。 9 程序运行初始窗口
其中。单击左键弹出如图10。8所示的对话框,用户在其中输入要查询
的关键字,选择 “确定”按钮,如果映射中存在此关键字,将弹出如
图10。10所示的对话框告知用户关键字对应的中文意思。如果映射中
不存在此关键字,弹出如图10。11所示的对话框告知用户未发现匹配
字符串。
图10。 10 查询结果显示对话框
图10。 11 未发现匹配字符串
第四节 字符串类
MFC中的CString类使用C++操作字符串和使用Basic或Pascal一样便
捷。CString类没有基类。一个CString类的对象由一个长度可变的字
符序列组成。CString包含很多成员函数用来操作字符串。
CString主要包含以下成员函数:
CString()
CString类的构造函数,用来创建一个CString类的对象。
GetLength()
获取CString类的对象包含的字符串的长度 (字节数)。
…………………………………………………………Page 616……………………………………………………………
IsEmpty()
测试CString类的对象包含的字符串是否为空。
Empty()
使CString类的对象包含的字符串为空字符串。
GetAt()
获得字符串指定位置处的字符。
operator ' '
获得字符串指定位置处的字符,作用和GetAt()一样。
SetAt()
设定字符串指定位置处的字符。
operator LPCTSTR
返回指向储存在CString类的对象内的字符的指针。
operator =
将一个新的值赋予CString对象。
operator +
将两个字符串合并成一个新的字符串。
operator +=
在一个字符串的后面再添加一个字符串。
pare
比较两个字符串。
pareNoCase
在忽略字符大小写的情况下比较两个字符串。
Mid()
…………………………………………………………Page 617……………………………………………………………
从CString类对象包含的字符串中提取指定开头和结尾的字符串,类
似于Basic 中的MID函数。
Left()
获取字符串左边指定长度的字符串,类似于Basic中的LEFT函数。
Right()
获取字符串右边指定长度的字符串,类似于Basic中的RIGHT函数。
SpanIncluding
从字符串中提取包含在指定字符数组内的字符的子串。
SpanEncluding()
从字符串中提取不包含在指定字符数组内的字符的子串。
NakeUpper()
将字符串中所有的字符全部转化成大写形式。
MakeLower()
将字符串中所有的字符全部转化成小写形式。
MakeReverse()
将字符串倒置。
Format()
象sprintf()函数一样格式化字符串。
TrimLeft()
删除字符串左边开头的空白字符。
TrimRight()
删除字符串右边结尾的空白字符。
FormatMessage()
…………………………………………………………Page 618……………………………………………………………
格式化消息字符串。
Find()
在字符串中查找指定的字符或字符串。
ReverseFind()
返回字符串中最后一次和指定的字符匹配的字符的下标。
FindOneOf()
在字符串中查找第一个和指定的字符匹配的字符。
GetBuffer()
获得指向CString对象内字符的指针。
GetBufferSetLength()
获得指向CString对象内字符的指针,但是只能截取指定长度的字
符。
ReleaseBuffer()
释放在缓冲区内由GetBuffer()函数返回的字符串。
LockBuffer()
复制字符串,并将其锁入缓冲区。
UnlockBuffer()
将调用LockBuffer()函数锁入缓冲区的字符串解锁。
LoadString()
从一个Windows资源加载一个已经存在的CString对象。
下面用几个例子来上读者体会一个CString类的好处。
示例 :连结字符串
1
代码如下:
…………………………………………………………Page 619……………………………………………………………
CString m_str1=〃工作〃;
CString m_str2=〃正常〃;
CString m_str3=m_str1+m_str2;
AfxMessageBox(m_str3);
运行结果如图10。12所示。
图10。 12 连结字符串
示例 :比较字符串
2
代码如下:
CString m_str1=〃a〃;
CString m_str2=〃b〃;
int result=m_str1。pare(m_str2);
if(result=0)
AfxMessageBox(〃两者相同〃);
else if(result》0)
AfxMessageBox(〃m_str1大于m_str2〃);
else
AfxMessageBox(〃m_str1小于m_str2〃);
运行结果如图10。13所示。两个字符串比较大小时从第一个字母开
始,按照对应的ASCII值比较。如果第一个字母相同,再比较下一个
字母。依次往下直到比较出大小为止。
图10。 13 比较字符串
…………………………………………………………Page 620……………………………………………………………
示例 :提取字符串
3
代码如下:
CString m_str1=〃aabcc〃;
CString m_str2=m_str1。Left(1)+m_str1。Mid(2;1)+m_str1。Right(1);
AfxMessageBox(m_str2);
图10。 14 提取字符串
示例 :查找字符串
4
代码如下:
CString m_str1=〃abcdef〃;
CString m_str2=〃deq〃;
int index=m_str1。Find(m_str2);
if(index》=0)
{
char s'10';
wsprintf(s;〃匹配字符的下标为%d〃;index);
MessageBox(s);
}
else
MessageBox(〃没有匹配字符〃);
运行结果如图10。15所示。
图10。 15 查找字符串
…………………………………………………………Page 621……………………………………………………………
示例 :变换字符串
5
代码如下:
CString m_str=〃 ABCabc 〃;
m_str。TrimLeft();
m_str。TrimRight();
m_str。MakeUpper();
MessageBox(m_str);
图10。 16 提取字符串
第五节 日期和时间类
MFC提供了两个 日期和时间类CTime和CTimeSpan;分别代表相对时间和
绝对时间。CTime是基于格林威治平均时间
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!