精华内容
下载资源
问答
  • 列表框属性

    2019-11-22 14:01:41
    列表框 列表框允许用户从多个对象中选择一项或多项,这些对象可以是文本、文件和位图等。当列表框的项不能全部显示出来时,可以用滚动条来滚动显示。 1. 基础知识 默认的列表框只允许用户单选,需要多选时,须把...

    列表框

    列表框允许用户从多个对象中选择一项或多项,这些对象可以是文本、文件和位图等。当列表框的项不能全部显示出来时,可以用滚动条来滚动显示。

    1. 基础知识
    默认的列表框只允许用户单选,需要多选时,须把列表框的风格定义为 LBS_ MULTIPLESEL 和 LBS_EXTENDEDSEL 。列表框提供的其他风格取值可以控制列表框的外观和操作。例如是否按照列表框各项的名称排序,是否多行排列,是否有滚动条等。

    风格取值                   描述
    LBS_EXTENDEDSEL           //能通过Shift键或者鼠标进行多选
    LBS_HASSTRINGS            //可以用GetText函数得到列表框里选项的字符串
    LBS_MULTICOLUMN           //指定列表框以多列形式显示内容
    LBS_MULTIPLESEL           //用户可以选择多个项
    LBS_NOINTEGRALHEIGHT      //当应用程序创建列表框时,列表框的大小由系统指定
    LBS_NOREDRAW              //列表框不响应用户的修改,可以通过发送WM_REDRAW 来取消该设置
    LBS_NOTIFY                //让主窗口接收列表框的任何改变的消息
    LBS_OWNERDRAWFIXED        //主窗口负责列表框的重画,列表框里每项的高度相同
    LBS_0WNERDRAWVARIABLE     //主窗口负责列表框的重画,列表框里每项的高度可以变化
    LBS_SORT                  //按各项名称的字母排序
    LBS_STANDARD              //等同于LBS_SORT和LBS_NOTIFY
    LBS_USETABSTOPS           //允许用户使用Tab键在各项中切换
    LBS_WANTKEYBOARDINPUT     //输入焦点在列表框时,任何键盘输入都会向父窗口发送WM_VKEYTOITEM或者WM_CHARTOITEM消息
    LBS_DISABLENOSCROLI       //当列表框的项不够时,垂直滚动条禁活:没有该属性时,滚动条隐藏

    当用户对列表框进行了操作时,就会向主窗口发送一条消息。列表框的消息类型比较简单,主要是单击、双击和选择等。同编辑框一样,列表框也会遇到内存不够的问题,所以消息类型中含有这一项。消息总是通过WM_COMMAND的形式发送给主窗口的。其中,wParam的低位字节表示列表框的标识符,高位字节表示消息的类型,lParam表示主窗口句柄。列表框的消息类型如表所示。

    消息类型                   描述
    LB_DELETESTRING           //删除指定的选项
    LB_ADDFILE                //向列表框里增加一个文件(包括目录)
    LB_FINDSTRING             //在列表框里查找指定的项
    LB_FINDSTRlNGEXACT        //精确查找指定的项
    LB_GETCOUNT               //得到列表框里项的数目
    LB_GETCURSEL              //返回当前被选中选项的序号
    LB_GETSEL                 //得到被选项的状态,如果出错,则返回零值
    LB_GETSELCOUNT            //得到被选中的个数
    LB_GETTEXT                //返回选中的文本,返回值为字符串长度
    LB_GETTEXTLEN             //返回字符串长度
    LB_INITSTORAGE            //向列表框增加项之前存储原来的内容
    LB_INSERTSTRING           //向列表框增加一项,但不重新排序
    LB_ITEMFROMPOINT          //返回离指定点最近项的序号
    LB_RESETCONTENT           //清除列表框里所有的项
    LB_SELECTSTRING           //寻找指定的项
    LB_SELITEMRANGE           //指定选择的范围
    LB_SELITEMRANGEEX         //选定或者删除指定的项
    LB_SETCOLUMNWIDTH         //设置列的宽度
    LB_SETCOUNT               //设置列表框里项的最大数目
    LB_SETCURSEL              //选中指定的项
    LBN_DBLCLK                //发送用户双击的消息
    LBN_ERRSPACE              //发送内存空间不够的消息
    LBN_KILLFOCUS             //当列表框失去焦点时发送该消息
    LBN_SELCANCEL             //当用户取消选择时发送该消息
    LBN_SELCHANGE             //当用户选择改变时发送该消息
    LBN_SETFOCUS              //当输入焦点转移到列表框时发送该消息
    WM_CTLCOLORLISTBOX        //在列表框重画时向父窗口发送该消息
    WM_DELETEITEM             //删除选项
    WM_VKEYTOITEM             //输入焦点在列表框里,用户按键时发送该消息

    鼠标右键WM_CONTEXTMENU 消息就行了。wParam 是点击右键的窗口的句柄,lParam 是鼠标坐标。如果用户使用 SHIFT+F10 来响应菜单,那么 lParam 收到的坐标都是 -1。
    LOWORD(wParam) 子窗口ID
    HIWORD(wParam) 通知码
    Lparam 子窗口句柄

     

    2. 定义列
    增加列需要用列的结构LVCOLUMN,定义如下:

    typedef struct _LVCOLUMN {
    UINT mask;                //定义该列可使用的类型
    int fmt;                  //定义列格式
    int cx;                   //定义列宽度(以像素为单位)
    LPTSTR pszText;           //列内容
    int cchTextMax;           //列内容最大长度
    int iSubItem;             //定义此列序号
    #if (_WIN32_IE >= 0x0300)
    int iImage;               //指向图像
    int iOrder;               //零基列偏移量。列偏移量是从左到右的顺序。例如0列在最左边。
    #endif #if (_WIN32_WINNT >= 0x0600)
    int cxMin;                //指定列宽最小值
    int cxDefault;            //默认列宽
    int cxIdeal;              //只读,作为列宽的理想宽度自动调整宽度大小
    #endif
    } LVCOLUMN, *LPLVCOLUMN;  //结构名称

    使用方法:
    SendMessage(hwnd, LVM_INSERTCOLUMN, 0, (LPARAM)&colmn)
    还有LVM_GETCOLUMN LVM_SETCOLUMN LVM_DELETECOLUMN

     

    3. 改变项
    改变项需要结构体LVITEM,定义如下:

    typedef struct {
    UINT mask;              //设置成员标志,如格式等
    int iItem;              //项目索引
    int iSubItem;           //添加到的列序
    UINT state;             //指明项目状态,如图片,叠加图片
    UINT stateMask;         //指state成员的有效位
    LPTSTR pszText;         //项目内容
    int cchTextMax;         //项目最大长度
    int iImage;             //指向图片索引
    LPARAM lParam;          //特殊值,如果你用SORTITEM它就需要这个,或者别的特别的
    #if (_WIN32_IE >= 0x0300)
    int iIndent;            //图片宽度
    #endif
    #if (_WIN32_WINNT >= 0x0501)
    int iGroupId;           //指向所在的组id
    UINT cColumns;          //需要展示的列数,最大为20
    UINT puColumns;         //返回这个项目所指向的列
    #endif
    #if (_WIN32_WINNT >= 0x0600)
    int piColFmt;           //返回列属性
    int iGroup;             //项目列
    #endif
    } LVITEM, *LPLVITEM;

    使用方法:
    SendMessage(hres, LVM_INSERTITEM, 0, (LPARAM)&item);

    展开全文
  • 列表框和组合框的使用

    千次阅读 2010-06-24 15:21:00
    列表框是显示一系列项供用户选择的控件,对选中的项可以进行后续的处理。用户选择可以是多项的,但本章的例程设计为单选的。组合框是一个编辑框带一个可以下拉的列表框,用户在下拉框中选择的项会进入编辑框中...

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

     

    本章要点

    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()函数的完整代码如下:

    来源:(http://blog.sina.com.cn/s/blog_5e8a23f90100czpt.html) - VC++60 第十二章 列表框和组合框_东方一峰_新浪博客

    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 );

     

    展开全文
  • VC++60 第十二章 列表框和组合框

    千次阅读 2016-10-13 17:49:48
    第十二章 列表框和组合框   列表框是显示一系列项供用户选择的控件,对选中的项可以进行后续的处理。用户选择可以是多项的,但本章的例程设计为单选的。组合框是一个编辑框带一个可以下拉的列表框,用户在...

    第十二章 列表框和组合框

     

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

     

    本章要点

    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,把两个列表框设计为可扩展选项的。

    展开全文
  • 在下拉列表框中显示树状结构

    千次阅读 2005-08-08 18:15:00
    作者:星轨(oRbIt) E_Mail :inte2000@163.com 转载请注明原作者,否则请勿转载 在下拉列表框中...一个典型的用户界面就是使用下拉列表框(或称组合列表框)显示数据库中相关表名或某个表中的某个字段的全部数据

        作者:星轨(oRbIt)
        E_Mail :
    inte2000@163.com
        转载请注明原作者,否则请勿转载

          在下拉列表框中显示树状结构 下拉列表框(或称组合列表框)是在Windows系统下开发软件最常用的控件之一,该控件适用性强且使用简单,因而深受开发人员喜爱。一个典型的用户界面就是使用下拉列表框(或称组合列表框)显示数据库中相关表名或某个表中的某个字段的全部数据,用户通过鼠标选择某一项后进行相关操作。在这种情况下使用下拉列表框对数据选择可以简化操作,用户也比较喜欢这种方式,但是简单的下拉列表框无法表达数据之间的相互关系,比如两个数据项之间的父子关系或包容关系等。开发人员通常希望能在简化用户操作的同时向用户提供这些信息以方便用户决定下一步操作。针对这种情况我们使用MFC开发了一个支持显示树状结构的CComboBox派生类CWzComboBox,并且该派生类已经成功应用到我们的软件中,现在我们将代码公开,希望对广大开发人员有所帮助,也希望大家共同完善它。(演示程序运行示例如图1所示)

    图1 演示程序运行实例

          首先我们对CwzComboBox类的自定义函数和相关的数据结构做简要的说明。要使列表框能够显示树状结构,首先应该设计一个数据结构用于记录列表中各个项之间的关系。我们定义了一个结构用于存储节点之间的关系,不妨将之称为信息数据结构,如下所示:

     

    结构成员wParantOriginIdx和wOriginIdx分别用以存储该项的父项和该项本身在列表中的原始索引位置,因为添加或删除列表项时会导致列表项之间的顺序改变,也就是索引位置会改变,所以只能通过各项的原始索引位置确定它们之间的关系。成员cType用于存储节点对应的图标在图标列表(ImageList)中的索引位置,成员cLevel用于存储该项的级别,处于根结点的项cLevel是0,子项的cLevel都比父项的大,该成员主要用在显示列表项时确定项的水平起始位置,从而使各项看起来呈树状结构。

            下面就详细说明一下类CWzComboBox的设计。基类CComboBox的原来的公有方法 AddString()和InsertString()不支持附加信息不能再使用,DeleteString()无法正确的释放附加信息所占用的内存所以也不能使用,为了防止开发人员误用他们引起代码崩溃,我们重载了这三个函数: 

     

    仅仅返回-1表示函数执行失败。手工加入AddCTString()和DeleteCTString()两个函数用于列表项的添加和删除。AddCTString()向第一个参数wParentIdx指定的项添加一个子项,函数运行时首先判断wParentIdx是否是nRootIndex(定义常量nRootIndex等于(WORD)-1),如果是nRootIndex就将该项设为根项,即令cLevel为0。

     

    删除某项时首先遍历整个列表,删除所有子项,释放为子项信息结构分配的内存,最后删除该项并释放该项信息结构占用的内存。根据树状结构的特性,某项的所有子项的索引位置都在该项和该项的下一个兄弟项之间,所以删除函数的任务就是删除该项后所有级数比该项高的项,直到遇到第一个级数与该项相同或更小的项。外层的while循环用来删除子项,直到标志bFind是FALSE才退出,内层的for循环从当前项的索引位置开始到列表的结尾搜索当前项的子项,只要找到就将bFind赋值为TRUE并删除该项,然后跳出for循环,继续外层的while循环。

     

    在删除函数中用到了GetChildCount()和CurrentIdxFromOriginIdx()两个函数,这两个函数被声明为保护成员,不允许直接访问。GetChildCount()返回指定索引位置的项的所有子项,包括子项的子项,实现的方法很简单,就是利用前面提到的树状结构的特性,统计该项后所有级数比该项高的项的个数,直到遇到第一个级数与该项相同或更小的项。CurrentIdxFromOriginIdx()函数根据某项的原始索引位置查找并返回其当前位置索引位置,实现的方法也很简单,就是遍历整个列表,比较每一项的原始索引位置,找到相同的就返回其在列表中的当前索引位置。 以上是对CwzComboBox类的自定义函数和相关的数据结构的说明,现在要解释一下与MFC有关的函数。首先就自绘控件做简要的说明,事实上所有的控件都是“自绘”的,Windows系统的窗口在需要重画窗口内的控件时会向该控件发送WM_DRAWITEM消息,该消息有两个参数,第一个参数是控件的ID,第二个参数是一个指向DRAWITEMSTRUCT结构的指针,DRAWITEMSTRUCT结构含有控件绘制自己所需的显示设备上下文、位置、控件的状态和其他属性,控件就利用这些参数绘制自己。MFC对控件进行了封装,将WM_DRAWITEM消息其映射为虚函数DrawItem,从而简化了编程的复杂性。所以,要实现列表框显示自定义的树状结构只需重载DrawItem函数就可以了。当系统需要绘制列表框时就会多次调用DrawItem来画列表框的每一项。CwzComboBox类重载的DrawItem仅仅就是根据各项的信息结构在相应的位置画出该项,所以不需做太多说明。另一个需要重载的函数是DeleteItem,这也是基类的虚函数,重载此函数的目的是为了使系统删除列表项的同时能释放为该项信息结构分配的存储空间。我们自定义删除函数并没有直接释放信息结构占用的存储空间而是调用了基类的DeleteString函数,由DeleteString函数触发DeleteItem,这样做就简化了开发人员对列表项的维护工作。当下拉列表框被打开时会触发CBN_DROPDOWN事件,CwzComboBox类响应这个事件,计算使列表框中所有项能够完全显示所需的最小宽度值,并根据这个最小宽度值重设列表框的宽度,从而使其看起来有视觉效果好一些。    

     

            CwzComboBox类的的使用非常简单,看一下例子代码就知道了。此代码最早是发布在www.codeproject.com网站,所以项目的资源都英文的,注释也是英文的。www.vchelp.net网站也有转载,另外还可以使用以下URL:http://www.winmsg.com/download/cwzcombox.zip下载代码和演示程序。

    展开全文
  • 使用AlertDialog创建多选列表框

    千次阅读 2014-01-08 08:26:04
     android:text="显示多选列表对话框"  android:layout_gravity="center_horizontal"/>      android:id="@+id/textView"  android:layout_width="wrap_content"  android:layout_height="wrap_...
  • 如上图所示,必须要按顺序选择省市区。未选择省之前,没有城市可选择,未选择城市之前,没有区可选择。代码如下: ...还有一种比较复杂的情况,多个下拉列表框是相关联的,只有前面一个选...
  • 列表的各项内容正确,没有丢失或错误(内容) 列表的内容是固定的还是会... 列表框允许多项选择时,分别检查shift选中条目,ctrl选中条目和使用鼠标选中条目的功能(快捷键多选操作) 选择列表内容时,是否支持上、
  • CMFCToolBar 添加下拉列表框

    千次阅读 2013-01-25 20:54:04
    在网上查到了两种方法呢,然后自己试验了下,在vs2010下都可以正确运行。 第一种方法:是来自于 这里:http://blog.sina.com.cn/s/blog_6b5a0745010108tt.html 但是看了这个,很久也弄不出来,还是具体来写一下了...
  • Axure RP Pro - 相关问题 - Listbox列表框部件不支持修改选项在Axure RPPro中,Listbox列表框部件可以设置选中项,但是不能调整选项的条目,如果要实现调整选项的效果,就需要借助于动态面板,在动态面板的不同状态...
  • MFC列表框实现可编辑功能

    千次阅读 2013-03-13 18:00:00
    列表控件上实现可编辑功能的原理非常简单,借助一个编辑控件即可达到目的。具体步骤如下:①从 CListCtrl派生一个子类,并拦截某个意味着进入编辑状态的消息,获取需要编辑的数据项的相关信息。所拦截的消息通常...
  • Axure RP Pro - 相关问题 - 在规格文档中动态面板中的droplist下拉列表框部件会重复输出选项列表AxureRP Pro在生成规格文档时,默认不显示droplist下拉列表框部件的选项列表,如果希望显示选项列表,就需要在...
  • 根据经验,下拉列表框测试长出现下列错误: 1.下拉列条目选项内容不完整、有缺失项 2.下拉列条目选项内容不准确、有缺失项 3.下拉列条目选项并不是每一项都能正确选择到,有JS错误或者功能不工作等情况 ...
  • '绑定所有省份下拉列表框 Me.cboProvice.DataSource = ds.Tables(0) Me.cboProvice.DisplayMember = "Name" Me.cboProvice.ValueMember = "ID" End Sub Private Sub cboProvice_SelectedIndexChanged...
  • 而第二个密文是将“#” 设置成为回显字符!!!  18.9.3 多行文本输入组件:JTextArea  如果要输入多行文本,则可以使用JTextArea类来实现多行文本的输入。此类扩展了...
  • 自绘ListBox 设置其列表项的高度和宽度可以通过重载虚函数 MeasureItem (LPMEASUREITEMSTRUCT lpMeasureItemStruct) 来实现: void CMyComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct) { /...
  • 怎样使source insight4.0的项目文件列表正确显示出来

    万次阅读 多人点赞 2018-05-05 19:15:20
    在以往的Source Insight3.5当中,只要你导入那些代码,project files 列表框会在显示出所有的代码文档。那么当这个 4.0版本的Source Insight 引入代码工程后,如果没有把project files 正确显示在右边...
  • [flutter] 列表上面的筛选

    千次阅读 2020-01-09 18:42:00
    抽空利用一些小知识,整了个筛选的demo,重点布局是 用Stack(特性:内部的组件可重叠),通过Stack,把筛选叠在列表的上方,当然了,这里还需要计算坐标,把筛选叠在正确的位置上。 有个小提示,获取某组件的...
  • 第14章、复选框列表

    千次阅读 2013-05-23 17:46:06
    第14章、复选框列表 【知识要点】  (1)复选框列表CheckBoxList 【问题提出】  电子考试系统变得越来越普及,下图所展示的是一个考试系统中多选题,我们需要从“四选多”选择一个或多个正确的答案,如何...
  • [下面的框架可能不正确和/或缺失,没有为 ntdll.dll 加载符号] 未知 在写图代码时遇见这个错误,仔细查找了,原来是 m_pMatrix = new int[m_iCapacity]; //初始化内部数据 将所有成员设置为0 memset(m_pMatrix, 0, ...
  • 大家都知道 TComboBox AddObject 是个好...这里需要注意的是 要再测试主窗体 定义全局变量 ss 才能保证正确 读取 var ss: Tarr; 经过 CheckMem.pas 测试 无内存泄露 方便易用 减少了很多字典表的数据库读取访问。  
  • 一、 &lt;table border="1"&gt; 表格边框 如图:,也就是border=1,意思就是给表格的每一格,及边框加上1像素的边框   二、 &lt;table border="...如图:这时表格大小为:2...
  • Golang指南:顶级Golang框架、IDE和工具列表

    万次阅读 多人点赞 2019-07-16 21:57:55
    Golang指南:顶级Golang框架、IDE和工具列表 https://www.itcodemonkey.com/article/1053.html 2017-10-30 17:21:58 分类:人工智能与大数据标签:Go语言 来自:码农网,英文原文,译者:小峰 自推出以来,...
  • 关于搜索的测试用例(收藏)

    千次阅读 2015-01-05 14:35:34
    3 检查查询结果列表,每页显示记录条数正确、文字折行显示正确、页面布局美观  4 检查查询结果列表,列标题项、列显示内容、排序方式符合需求定义  5 检查查询结果列表,符合默认查询条件结果集  6 点击查询结果...
  • vue vant框架上拉加载效果,list列表上拉加载重复加载问题。 如果上拉一次出现了加载几次的情况: 一、注意this.loading=false;设置是否正确; 二、每次加载的数据条数给多一点。 //html <van-list v-model=...
  • 测试点之下拉

    千次阅读 2019-01-16 10:56:39
    列表框允许多选时,要分别检查shift选中条目,按ctrl选中条目和直接用鼠标选中多项条目的情况; d. 逐一执行列表框中每个条目的功能; e. 检查能否向组合列表框输入数据;   1.内容 1)检查...
  • 【HTML】什么是 HTML 中的无序列表 ul

    千次阅读 2019-10-24 21:01:33
    一:什么是无序列表。 二:如何更改无序列表列表项符号。
  • 但是,美中不足的是,在使用过程中遇到一个问题,它的列表控件——datagrid,在显示日期列的时候,由于后台返回给页面的数据是Json格式的,其中的一个日期字段,在后台还是正常的“2012-11-10 12:18:00”这样的格式...
  • ORM框架

    万次阅读 2011-10-15 09:11:31
    对象关系映射(ORM)提供了概念性的、易于理解的模型化数据的方法。ORM方法论基于三个核心原则: 简单:以... 精确性:基于数据模型创建正确标准化了的结构。 典型地,建模者通过收集来自那些熟悉应用程序但不熟练的数
  • YOLO框架简述

    万次阅读 多人点赞 2019-06-14 11:08:48
    YOLO(You Only Look Once)是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度... 输入一张图片,要求输出其中所包含的对象,以及每个对象的位置(包含该对象的矩形)。 对象识别和定位...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 235,685
精华内容 94,274
关键字:

关于列表框正确的是