VC++60 第十二章 列表框和组合框

MFC 扩展库 - CJ60Lib ( 针对Visual C++ 6.0进行的升级 ) 原来的库(MFCXLib)已经更名为CJ60Lib,这是为了与那些使用旧库的程序区别开来。本库与旧的库具有同样的功能,但是,针对Visual C++ 6.0作了几个扩展。请按照下面的步骤来设定你的应用程序使用CJ60Lib这个MFC扩展库: 在你的工程设定(project/setting)中,选择 General 标签,确保 Microsoft Foundation Class 被设置 阅读详情

第十二章 列表框和组合框

 

列表框是显示一系列项供用户选择的控件,对选中的项可以进行后续的处理。用户选择可以是多项的,但本章的例程设计为单选的。组合框是一个编辑框带一个可以下拉的列表框,用户在下拉框中选择的项会进入编辑框中,再进行后续处理,选择也可以用键盘的光标键。在编辑框中也可以直接输入。

 

本章要点

1 列表框的设计、项的添加和删除
2 组合框的设计和使用

 

12.1 ListCombo程序运行时的界面和功能

 

 VC++60 <wbr>第十二章 <wbr>列表框和组合框
chap12-01

List1在初始化时加入了六项。点击[<]按钮就把选中的项移动到List2中去。点击[>]按钮则相反。点击[<<]和[>>]按钮则移动全部项。用[清除列表]按钮可删除List1的全部项。[加入到]按钮把你选中的在编辑框中项添加到List1中,[加入全部]按钮则把组合框设置的所有项添加到List1中。组合框预置了“中国”这一项,但没有设计删除功能。列表框和组合框都有一个从0开始的整数索引和一个用于显示的文本。

 

12.2 对话框界面设计

 

按控件属性表设计界面。

控件类型 标题 ID and Genaral Styles Extended Styles
listBox   IDC_LIST1
显示checked
选择Simple,Border
Virteber scroll
无
listBox   IDC_LIST2
显示checked
选择Simple,Border
Virteber scroll
无
ComboBox   IDC_CONTRIES_COMBO
显示checked
类型:Drop list
Virteber scroll
Static edge
Button < IDC_MOVE_BUTTON 无 无
Button > IDC_BACK_BUTTON 无 无
Button << IDC_MOVEALL_BUTTON 无 无
Button >> IDC_BACKALL_BUTTON 无 无
Button 清除列表 IDC_CLEAR_BUTTON 无 Client edge
Button 加入到 IDC_ADD_BUTTON 无 Client edge
Button 加入全部 IDC_ADDALL_BUTTON 无 Client edge
Button 退出 IDC_EXIT_BUTTON 无 Client edge
Static edge
Modal Frame

属性表中列出的表示“选中”,TAB复选框都要选中,就省略了。组合框可以在DATA属性页中设置项的文本,本例采用这种方法。其数据是:
中国,美国,俄罗斯,英国,法国,德国,印度,巴基斯坦,
日本,加拿大,澳大利亚,韩国,伊朗,伊拉克

逗号处要改为换行,换行用Ctrl+<回车键>。设计好的界面如图chap12-02所示。

VC++60 <wbr>第十二章 <wbr>列表框和组合框
chap12-02

 

12.3 设计变量和编写代码

 

1 为三个列表框和组合框引进变量
因为我们要对列表框的项进行操作,所以要申明三个对象类型的变量
m_myList1
m_myList2
m_myCombo。

 

2 定义一个字符串数组
定义一个字符串数组m_myItems用来存放组合框的项的文本。在对话框的头文件的类CListCombaDlg的构造函数中申明:
    CString m_myItems[20];

 

3 给初始化函数编写代码
在OnInitDialog()中我们要从组合框控件获取项目的文本,给字符串数组m_myItems赋值。再用它的前六项为List1初始化。最后为组合框设置项“中国”为预选项。
从组合框控件获取项用函数GetLBText(index, str),它把索引值为index的项的文本拷贝给str。给列表框赋值用AddString(string)函数,它在列表的尾部增加一项。类似地还可以用插入函数InsearString(...)。在// TODO: Add extra initialization here 这行的后面,我们添加如下代码:

   int count = m_myCombo.GetCount();  //获取组合框的项数
   int i =0;
    //从组合框控件获取项的文本
    for(i =0; i<count; i++)
         m_myCombo.GetLBText(i, m_myItems[i]);
    //List1初始化,六项
    for(i =0; i<6 ; i++)
        m_myList1.AddString(m_myItems[i]);
    //设置组合框默认选择项为"中国"
    m_myCombo.SetCurSel(0);

 

4 给4个移动按钮写代码
MOVE按钮[<]的功能是从List1中得到用户选定顶的索引号,再从这索引号获取选定顶的文本,然后删除这一项,在List2中添加一项。当前项
获取索引号函数 index=GetCurSel()返回整数。 获取选定项的文本用函数GetText(index, item),它把指定项的文本拷贝到字符串item中。
OnMoveButton()函数的完整代码如下:

void CListCombaDlg::OnMoveButton()
{
    CString item;
    int index = m_myList1.GetCurSel(); //获取选定顶索引号
    m_myList1.GetText(index, item);       //获取选定顶的文本
    m_myList1.DeleteString(index);         //删除一项
    m_myList2.AddString(item);              //添加到List2中
    m_myList1.SetCurSel(0);                   //设置首项为当前项
}

MOVEALL按钮的代码与上面的类似,加上循环语句就行。

void CListCombaDlg::OnMoveallButton()
{
  
  // TODO: Add your control notification handler code here
    CString item;

    int index =0 ;
    while(m_myList1.GetCount() >0){
        m_myList1.GetText(0, item);
        m_myList1.DeleteString(0);
        m_myList2.AddString(item);   
    };
}
BACK和BACKALL按钮的代码和上面的一样,只要把m_myList1和m_myList2对调就行。

 

5 从组合框向列表框1加入当前项的代码
这与列表框不同的是获取文本的函数名不大一样,用函数GetLBText,其余都相同。在OnAddButton()中加入代码:

void CListCombaDlg::OnBackallButton()
{
    // TODO: Add your control notification handler code here
    CString item;
    int index =0 ;
    while(m_myList2.GetCount() >0){
        m_myList2.GetText(0, item);
        m_myList2.DeleteString(0);
        m_myList1.AddString(item);   
    };
}

从组合框向列表框1加入全部项的代码如下:

void CListCombaDlg::OnAddallButton()
{
   //Clear old items in Linst at first
    CString item;
    while(m_myList1.GetCount()>0)
        m_myList1.DeleteString(0);
    int n = m_myCombo.GetCount();
    //Add all items
    for(int i=0; i<n; i++){
        m_myCombo.GetLBText(i, item);
        m_myList1.AddString(item);
    }   
}

 

6 [清除列表]和[退出]按钮的代码

[清除列表]的按钮的代码:
    while(m_myList1.GetCount()>0)
        m_myList1.DeleteString(0);

[退出]按钮的代码: OnOK();

 

12.4 编译和运行

 

至此,我们完成了界面设计和代码编写,可以编译和Build了。编译通过就可以在运行中测试程序,检查是否满足我们的设计要求。但是,代码编写常常会有许多错误,编译器会报告一大堆错误。虽然指出了错误所在的行,但要明白是什么错误还是很费劲的。如果我们在完成一部分工作后就编译一次,错误就比较少,容易找到和纠正。所以我们分以下几步来编译。
1、界面完成后编译一次,这时运行可以看到组合框有了信息和可以选择了。
2、对话框初始化编写后编译和运行一次,这时可以看到列表框有了信息。
3、MOVE按钮写了代码后编译和运行一次,这时可以测试移动功能是否正确。如果成功,那这代码可以放心地复制到其他三个按钮去了。
4、全部完成后的编译和运行。

 

12.5 小结

 

1 列表框和组合框属性设置中有类型选择
组合框有三种情况:Simple, Dropdown, Drop List。Simple类型的组合框的列表框部分是固定显示的,不能下拉;而其余两种带一个下拉手柄。设计中别忘记添加滚动条。Dropdown与Drop List的区别是后者的编辑框不能输入。列表框也有三种情况:Simple, Multiple, Extended, 它们决定了用户选取项的方法。Simple模式只能够选取单项,Multiple模式可以按Ctrl键+鼠标左键选取多个项,而Extended则可以通过鼠标拖处矩形一次选取连续的项,也可以加按Ctrl键作多次选择。

2 列表框在属性页不能设置项的文本(字符串),而组合框能。

3 列表框和组合框中的“项”都有索引号(0,1,2,...)和文本(在窗口显示)。两者都有成员函数来获取和设置这些信息。得到文本的函数名称不一样,列表框是GetText(),组合框是GetLBText()。字母LB的意思是ListBox,GetLBText的意思是“从自身的列表框中获取文本”。

4 列表框和组合框常用的几个函数原型

列表框的取索引号和文本的函数原型
获取文本:
void GetText( int nIndex, CString& rString ) const;
用于单选模式的获取和设置索引号:
int GetCurSel( ) const;
int SetCurSel( int nSelect );
用于多选模式的:
int GetSel( int nIndex ) const;
上式如果nIndex项是被选中的,就返回它的索引号,否则返回0。
int SetSel( int nIndex, BOOL bSelect = TRUE );
bSelect = TRUE就选中索引为nIndex的项,如是FALSE,则取消“选中”:如果nIndex=-1,就是全“选中”或全“不选中”。

组合框的获取索引号和文本的函数原型
int GetCurSel( ) const;
int SetCurSel( int nSelect );
void GetLBText( int nIndex, CString& rString ) const;

添加、插入和删除项的函数原型
int AddString( LPCTSTR lpszItem );
int InsertString( int nIndex, LPCTSTR lpszItem );
int DeleteString( UINT nIndex );

 

习题和思考

1 重新创建MListCombo,把两个列表框设计为多选项的。
2 重新创建EListCombo,把两个列表框设计为可扩展选项的。

VC++零基础入门之系列教程 【第12章 消息】 你是不是有好消息总是急切地盼望着群发给所有的好朋友……,而在窗口应用程序中,消息只能从一个窗口发送到另外一个窗口。 阅读详情

相关推荐

VC++使用组合框,下拉框与文本框级联作用

VC++使用组合框,下拉框与文本框级联作用,下拉选择框内的值改变时,文本框自动获得其值并显示,也就是,文本框的值是随着Select的变化而变化,将二者组合应用,获得不同效果。

列表框和组合框的使用

<br />列表框是显示一系列项供用户选择的控件,对选中的项可以进行后续的处理。用户选择可以是多项的,但本章的例程设计为单选的。组合框是一个编辑框带一个可以下拉的列表框,用户在下拉框中选择的项会进入编辑框中,再进行后续处理,选择也可以用键盘的光标键。在编辑框中也可以直接输入。<br /> <br />本章要点<br />1 列表框的设计、项的添加和删除<br />2 组合框的设计和使用<br /> <br />12.1 ListCombo程序运行时的界面和功能<br /> <br /> <br />chap

zeng622peng的专栏 1万+

组态王下拉式组合框使用样例

组态王下拉式组合框使用样例,可以直接使用,包含说明

VC组合框的使用示例

示例实现的功能 自动查找当前目录下的所有txt文件,并显示在组合框中; 用户可以自己选择其他目录下的txt文件

A Flying Bird 1639

超级列表框(组合框) - 易语言精华 -..

超级列表框高级应用—表项弹出选择列表(组合框) - 易语言精华 -.. 易语言精华→ 正文 超级列表框高级应用—表项弹出选择列表(组合框) 添加时间:2007-11-10 原文发表:2007-11-10 人气:675 200632620214531755.e 下载: e 文件 逆风编程技术 作者:易官方论坛 TLSWR我是借虎画猫,哈~都有半分像小老虎!... www.upwinder.com/www/5b/2528.html 14K 2009-4-25 - 百度快照

LabVIEW表格插入组合框

LabVIEW表格插入组合框

VC++60 第十六章 VC++开发工具和MFC基础类库(二)

VC++60 第十六章 VC++开发工具和MFC基础类库(二) 16.2 MFC类库的基本控件 1 基本控件 基本控件是WINDOWS V3.1就开始使用的控件,也就是本书前面各章逐一介绍的那些控件。它们是最基本的最常用的,主要有按钮、静态正文、编辑框、单选按钮和复选框(英文名Check,有人翻译为检查框)、列表框、组合框、组框(Group)、垂直和水平的滚动条,它们大部分在图c

GL_a_的博客 776

易语言超级列表框表项关键字搜索代码示例

今天小编就为大家分享一篇关于易语言超级列表框表项关键字搜索代码示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

VC++中动态创建控件

动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。   一、创建动态控件:  为了对照,我们先来看一下静态控件的创建。  放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再

Ryan 的 Blog 3569

企查查爬取实战

实战成果完成接口定位、抓包参数拆解、签名逆向、报错修复全流程调试,梳理出企查查多层风控逻辑;最终按照搜索分页规则,规范整理出两页共 20 条结构化企业数据,以标准 JSON 格式本地保存,字段完整、数据排版规范。现存局限平台顶层设备指纹与人机验证风控,纯 requests 网络请求模式无法突破;高频请求还存在账号限流、IP 访问限制风险,爬虫稳定性受平台策略影响较大。技术收获。

czr2026的博客 1129

C++语言程序设计教程第4版杨进才沈显君课后习题答案解析

为了更好地学习这门课程,我尝试在网上寻找一些学习资料和参考书籍,但效果并不是很理想。因此,我希望能有一些学长学姐或者是有经验的程序员能够分享一些学习经验和方法,让我更好地掌握这门课程。学习过程中,我发现这本书的内容非常丰富,讲解也非常详细,对于像我这样编程基础薄弱的学生来说,是一本非常实用的教材。同时,我也希望有经验的程序员能够推荐一些适合初学者的C++语言学习资料和工具,以便我能更好地学习和掌握这门课程。总之,希望能得到大家的帮助和支持,让我更好地学习和掌握C++语言程序设计。主 编: 杨进才,沈显君。

weixin_58833001的博客 1334

c语言小数乘法代码,计算机可视化编程复习题答案-20210508183106.docx-原创力文档...

精品文档精品文档PAGE精品文档计算机可视化编程复习题一、填空1VC++开发环境中,int占4字节,shortint占2字节longint占4字节。2for循环:for(i=1;i<5;i++),且在循环体中不会修改i的值,重复执行4次后结束。3Windows下的对话框分为模态对话框和非模态对话框。4数组赋值:inta[2][3]={{1},{5}};则该数组的全部元素为:a[3][4]=1...

weixin_42317482的博客 220

深入解析π型滤波电路:RC与LC滤波器的实战选型指南

本文深入解析了π型滤波电路的工作原理与实战选型。重点对比了RC型与LC型滤波器的核心差异:RC型成本低、体积小,但存在压降与能耗,适用于小电流场景;LC型效率高、滤波性能好,但成本与体积较大,适合中到大电流及高纹波抑制需求。文章提供了基于不同应用场景的选型指南与设计要点,帮助工程师做出精准决策。

weixin_29291069的博客 656

java 动态增加控件,VC++动态创建控件

动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。一、创建动态控件:为了对照,我们先来看一下静态控件的创建。放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示。静态控件不需要调用Create()函数来...

weixin_42364301的博客 250

三维重建Fusion中的TSDF算法通俗描述

看个视频 https://www.youtube.com/watch?v=8M_-lSYqACo 这是mobilefusion的视频,大家先了解一下,看到在三维重建的时候外面有个长方体包围盒了吗? 数据准备: 我们不同角度拍摄的RGB图、深度图和相应的pose.txt。 步骤: 1.建立长方体包围盒 要建立一个长方体包围盒。让所有的三维点都在这个长方体里面。 假设z方向垂直相机。 很明显,x,y方...

qq_30339595的博客 1万+

西门子V90 PN伺服控制核心:FB284功能块详解与实战

在工业自动化中,伺服定位控制是运动控制的基础环节,其本质是PLC通过PROFINET协议与伺服驱动器实现高速、确定性数据交互。FB284作为西门子为V90 PN定制的标准化功能块,封装了GSD映射、状态机管理与周期性PDO同步机制,将底层寄存器操作抽象为高可靠调用接口。相比MOVE指令或MC_MoveAbsolute等通用方案,FB284显著降低时序错乱风险,提升多轴同步精度与故障响应能力。它广泛应用于包装、灌装、装配等中端产线,尤其适配S7-1200/1500平台下的快速部署与现场维护。本文聚焦V90 P

weixin_42696271的博客 300

MFC 动态创建控件及添加消息响应函数

动态控件是指在需要时由Create()创建的控件也可CreateWindow创建控件,这与预先在对话框中放置的控件是不同的。   一、创建动态控件:  为了对照,我们先来看一下静态控件的创建。  放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件...

shifouxinyu的博客 2088

【x265编码器】章节1——x265的lookahead模块分析

目录一、模块功能二、lookahead模块分析1.调用流程2.代码分析Lookahead::addPicture()Lookahead::checkLookaheadQueue()Lookahead::getDecidedPicture()Lookahead::findJob()Lookahead::slicetypeDecide()PreLookaheadGroup::processTasksLookaheadTLD::lowresIntraEstimate()Lookahead::slicetypeAn

vcvdv123的博客 4万+

MFC动态创建控件及添加消息响应

动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。    一、创建动态控件:   为了对照,我们先来看一下静态控件的创建。   放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示。

aikenlovesea的专栏 1353

筹码峰五句口诀,看懂主力的秘密动作!(附实战图示)

筹码图的价值在于,它不像K线那样容易造假。主力可以骗线,但骗不了筹码分布。主力在不在;是吸筹还是出货;接下来是变盘还是震荡。这五句口诀可以说是“筹码阅读的入门圣经”:单峰坚挺变盘在即,双峰对垒高抛低吸;上峰不移主力在跑,多峰林立行情不止;下峰不移不离不弃,筹码识庄稳中取利!📌市场从来不是靠猜,而是靠看清。筹码,就是主力最真实的痕迹。如果你想学会提前布局、跟庄不被甩,学会看筹码峰——这一步必须打牢!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1165

热更新方案 HybridCLR 学习教程 |(一)原理及准备工作

前面文章介绍了热更新相关的知识,包括使用xLua实现热更新实战等 那本文就来介绍一下 热更新方案 HybridCLR(代号wolong,原huatuo)和基本使用方法。 若是想了解更多关于HybridCLR的东西也可以去 官网 详细查阅。

努力前行,总会成为自己心中的那道光 2万+

在VC程序中实现控件的动态生成与响应

zz在VC程序中实现控件的动态生成与响应                                  动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。一、创建动态控件:为了对照,我们先来看一下静态控件的创建。放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件I

Eric Lee的专栏 861

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VC动态创建控件

VC动态创建控件 2010-12-15 11:09 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。    一、创建动态控件:   为了对照,我们先来看一下静态控件的创建。   放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID

aristolto的专栏 8198

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VC中动态添加控件

VC中动态添加控件 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。   一、创建动态控件:   为了对照,我们先来看一下静态控件的创建。   放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示

wangjieest的专栏 598

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

推荐一本书:《Visual C++程序开发范例宝典》——你可以找到你想要的实例

废话少说,先上《Visual C++程序开发范例宝典》的目录: 目录:  第1章 窗体与界面设计 1 1.1 菜单应用实例 2 实例001 在系统菜单中添加菜单项 2 实例002 带图标的程序菜单 3 实例003 根据表中数据动态生成菜单 6 实例004 浮动的菜单 7 1.2 弹出菜单应用实例 9 实例005 在控件上单击右键弹出菜单 9 实例006 个性化的弹出菜单 1

hzm8341的博客 9872
上一篇: VC++60 第十一章 显示位图
下一篇: VC++60 第十三章 保存和读取文件
GL_a_
博客等级 码龄11年 29粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值