UINT nRadio=GetCheckedRadioButton(IDC_REMOVE0;IDC_REMOVE1);
switch(nRadio)
{
case IDC_REMOVE0:
m_radio=0;
break;
case IDC_REMOVE1:
m_radio=1;
break;
default:
break;
}
CDialog::OnOK();
}
8。 在ListView。h中CListView类的声明之前添加如下代码,用来定义
一个结构体CStudent,包含两个变量m_name和m_score,分别用于存
放学生的姓名和成绩。
…………………………………………………………Page 607……………………………………………………………
struct CStudent
{
CString m_name;
int m_score;
};
9。 为ClistView添加一个类型为CptrList的成员变量m_list。
10。 在ListView。cpp中添加下列语句:
#include 〃AddStudentDlg。h〃
#include 〃RemoveStudentDlg。h〃
11。 当用户单击左键后,弹出如图10。4所示的对话框,可以添加一个
节点。对应的OnLButtonDown 函数代码如下:
void CMyListView::OnLButtonDown(UINT nFlags; CPoint point)
{
// TODO: Add your message handler code here and/or call default
CAddStudentDlg dialog;
dialog。m_name = 〃〃;
dialog。m_score = 0 ;
// Display the dialog box。
int result = dialog。DoModal();
if (result == IDOK)
{
// Create and initialize the new node。
CStudent* m_pStudent = new CStudent;
m_pStudent…》m_name = dialog。m_name;
m_pStudent…》m_score = dialog。m_score;
// Add the node to the list。
…………………………………………………………Page 608……………………………………………………………
m_list。AddTail(m_pStudent);
// Repaint the window。
Invalidate();
}
CView::OnLButtonDown(nFlags; point);
}
12。 当用户单击右键后,弹出如图10。5所示的对话框,可以删除一个
节点。对应的OnRButtonDown 函数代码如下:
void CMyListView::OnRButtonDown(UINT nFlags; CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRemoveStudentDlg dialog;
dialog。m_radio = 0;
// Display the dialog box。
int result = dialog。DoModal();
// If the user clicked the OK button。。。
if (result == IDOK)
{
CStudent* m_pStudent=new CStudent;
// Make sure the list isn"t empty。
if (m_list。IsEmpty())
MessageBox(〃节点已经全部删除!〃);
else
{
// Remove the specified node。
if (dialog。m_radio == 0)
…………………………………………………………Page 609……………………………………………………………
m_pStudent = (CStudent*)m_list。RemoveHead();
else
m_pStudent = (CStudent*)m_list。RemoveTail();
// Delete the node object and repaint the window。
delete m_pStudent;
Invalidate();
}
}
CView::OnRButtonDown(nFlags; point);
}
13。 最后设置OnDraw 函数用来响应Invalidate()。
void CMyListView::OnDraw(CDC* pDC)
{
CListDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
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。 在
小说推荐
- 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章