精华内容
下载资源
问答
  • VS2010 下 MFC下拉列表框的用法

    千次阅读 2018-06-26 16:30:36
    最近在写一串口程序,需要将下拉列表框的数据全部显示,怎么设置都不对,最后终于找到了设置方法:二、如何控制Combo Box的下拉长度1,首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,...

    最近在写一个串口程序,需要将下拉列表框的数据全部显示,怎么设置都不对,最后终于找到了设置方法:

    二、如何控制Combo Box的下拉长度

    1,首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。

    2,二、属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。

    通过点击Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框,然后重新编译工程,可以将下拉列表框的数据全部显示

    以下转自:http://blog.csdn.net/kinglimy/article/details/6452239

    Combo Box (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。下面的例子简要说明如何利用 MFC CComboBox Class来操作字符串列表。 
    1、定义控件对应变量

    假定已经创建了一个Dialog,并且从控件工具箱将 Combo Box 控件拖放到上面。打开 Class Wizard,添加控件对应变量,如:CComboBox m_cbExamble;

    在后面的代码中会不断使用这个变量。

    2、向控件添加 Items

    1) 在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。

    2) 利用函数 AddString() 向 Combo Box 控件添加 Items,如:

    m_cbExample.AddString(“StringData1”);

    m_cbExample.AddString(“StringData2”);

    m_cbExample.AddString(“StringData3”);

    3) 也可以调用函数 InsertString() 将 Item 插入指定位置 nIndex,如:

    m_cbExample.InsertString( nIndex, “StringData” );

    3、从控件得到选定的Item

    假设在控件列表中已经选定某项,现在要得到被选定项的内容,首先要得到该项的位置,然后得到对应位置的内容。这里会用到两个函数,如:

    int nIndex = m_cbExample.GetCurSel();

    CString strCBText;

    m_cbExample.GetLBText( nIndex, strCBText);

    这样,得到的内容就保存在 strCBText 中。

    若要选取当前内容,可调用函数GetWindowText(strCBText)。

    4、在控件中查找给定Item

    这种操作一般用于在程序中动态修改控件中该项的值,可以用函数FindStringExact() 精确匹配,如:

    int nIndex = m_cbExample.FindStringExact( nStartAfter, “value to be found”);

    nStartAfter指明从哪一行开始查找。如果查找成功,返回的是该项的位置;否则,返回CB_ERR。

    也可以选中包含指定字符串的项,如:

    int nIndex = m_cbExample.SelectString( nStartAfter, “value to be selected”);

    5、删除控件中的Item

    该操作可以利用函数DeleteString(),需要指定被删除项的位置,如:

    m_cbExample.DeleteString(nIndex);

    也可以使用函数ResetContent(),清除目前的所有项,如:

    m_cbExample.ResetContent();

    6、显示控件中的某项

    int nIndex = m_cbExample.GetCurSel(); //当前选中的项

    m_cbExample.SetCurSel(nIndex); //设置第nIndex项为显示的内容

    7、得到或设置输入框中被选中的字符位置

    DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar );

    BOOL LimitText( int nMaxChars ); 设置输入框中可输入的最大字符数。

    8、列表框常用消息映射宏

    ON_CBN_DBLCLK 鼠标双击

    ON_CBN_DROPDOWN 列表框被弹出

    ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生

    ON_CBN_SELCHANGE 列表框中选择的行发生改变

    ON_CBN_EDITUPDATE 输入框中内容被更新

     

     

     

    补充:

    一、如何添加/删除Combo Box内容

    1,在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。

    2,在程序初始化时动态添加

    如: //控件内容初始化

    CString strTemp;

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除现有所有内容

    for(int i=1;i<=100;i++)

    {

    strTemp.Format("%d",i);

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);

    }

    3,下拉的时候添加

    如: CString strTemp;

    int iCount=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCount();//取得目前已经有的行数

    if(iCount<1)//防止重复多次添加

    {

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();

    for(int i=1;i<=100;i++)

    {

    strTemp.Format("%d",i);

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);

    }

    }

    4,删除

    DeleteString( UINT nIndex )//删除指定行,

    5,插入

    InsertString( int nIndex, LPCTSTR lpszItem )//将行插入到指定位置

    6,查找

    FindString( int nStartAfter, LPCTSTR lpszItem )//可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。

    int SelectString( int nStartAfter, LPCTSTR lpszItem )//可以选中包含指定字符串的行

    二、如何控制Combo Box的下拉长度

    1,首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。

    2,二、属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。

    三、选择其中的某行

    1,选中:

    int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();//当前选中的行。

    2,设置

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n)//设置第n行内容为显示的内容。

    四、取得Combo Box框内容

    1取当前内容

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp);

    2取其他行内容

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp);

    四、获得焦点

    通常要判断控件是否获得了焦点,可以用GetFocus()函数

    例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框IDC_EDIT_VALUE2内。

    但是combobox 的焦点不同,因为它是由edit和listbox两部分组成的

    所以获得焦点要用GetParent():if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))

    控制Combo Box的下拉长度

    1,首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。

    二、属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。

    VC++ Combo Box/Combo Box Ex控件

      组合窗口是由一个输入框和一个列表框组成。创建一个组合窗口可以使用成员函数:

    BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );

    其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。

    CBS_DROPDOWN 下拉式组合框

    CBS_DROPDOWNLIST 下拉式组合框,但是输入框内不能进行输入

    CBS_SIMPLE 输入框和列表框同时被显示

    LBS_SORT 所有的行按照字母顺序进行排序

    由于组合框内包含了列表框,所以列表框的功能都能够使用,如可以利用:

    int AddString( LPCTSTR lpszItem )添加行,

    int DeleteString( UINT nIndex )删除指定行,

    int InsertString( int nIndex, LPCTSTR lpszItem )将行插入到指定位置。

    void ResetContent( )可以删除列表框中所有行。

    通过调用int GetCount( )得到当前列表框中行的数量。

    如果需要得到/设置当前被选中的行的位置,可以调用int GetCurSel( )/int SetCurSel(int iIndex)。通过调用int GetLBText( int nIndex, LPTSTR lpszText )得到列表框内指定行的字符串。

    此外通过调用int FindString( int nStartAfter, LPCTSTR lpszItem )可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。

    int SelectString( int nStartAfter, LPCTSTR lpszItem )可以选中包含指定字符串的行。

    此外输入框的功能都能够使用,如可以利用:

    DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar )得到或设置输入框中被选中的字符位置。

    BOOL LimitText( int nMaxChars )设置输入框中可输入的最大字符数。

    输入框的剪贴板功能Copy,Clear,Cut,Paste动可以使用。

    最后介绍一下列表框几种常用的消息映射宏:

    ON_CBN_DBLCLK 鼠标双击

    ON_CBN_DROPDOWN 列表框被弹出

    ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生

    ON_CBN_SELCHANGE 列表框中选择的行发生改变

    ON_CBN_EDITUPDATE 输入框中内容被更新

    使用以上几种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,并且定义形式如ON_Notification( id, memberFxn )的消息映射。如果在对话框中使用组合框,Class Wizard会自动列出相关的消息,并能自动产生消息映射代码。

    在MFC 4.2中对组合框进行了增强,你可以在组合框中使用ImageList,有一个新的类CComboBoxEx(由CComboBox派生)来实现这一功能。在CComboBoxEx类中添加了一些新的成员函数来实现新的功能:首先你需要调用CImageList* SetImageList( CImageList* pImageList );来设置ImageList,然后调用

    int InsertItem( const COMBOBOXEXITEM* pCBItem );来添加行,其中COMBOBOXEXITEM定义如下:

    typedef struct { UINT mask; int iItem; LPTSTR pszText; int cchTextMax; int iImage; int iSelectedImage; int iOverlay;       int iIndent; LPARAM lParam;} COMBOBOXEXITEM, *PCOMBOBOXEXITEM;

    你需要设置mask=CBEIF_IMAGE CBEIF_TEXT,并设置iItem为插入位置,设置pszText为显示字符串,设置iImage为显示的图标索引。下面的代码演示了如何进行插入:

    /*m_cbeWnd 为已经创建的CComboBox对象

    m_list 为CImageList对象IDB_IMG 为16*(16*4)的位图,每个图片为16*16共4个图标*/

    m_list.Create(IDB_IMG,16,4,RGB(0,0,0));

    m_cbeWnd.SetImageList(&m_list);

    COMBOBOXEXITEM insItem;insItem.mask=CBEIF_IMAGE CBEIF_TEXT;insItem.iItem=0; insItem.iImage=0;insItem.pszText="Line 1";m_cbeWnd.InsertItem(&insItem);insItem.iItem=1;insItem.iImage=1;insItem.pszText="Line 2";m_cbeWnd.InsertItem(&insItem);

    通过调用int DeleteItem( int iIndex );来删除行,并指明行的位置。

    通过调用BOOL GetItem( COMBOBOXEXITEM* pCBItem )/BOOL SetItem( const COMBOBOXEXITEM* pCBItem );来得到/设置行数据

    原文链接:https://blog.csdn.net/robinson_911/article/details/18615743

    展开全文
  • EA&UML日拱一卒-添加属性

    千次阅读 2017-03-30 15:19:43
    添加属性并设定属性属性

    本篇文章我们说明如何添加属性(attribute)。属性是OO中的一个词汇,在C++语法中,应该叫数据成员。这里我们尽量使用OO中的属性一词。


    打开属性窗口有两种方法:

    1.双击类图中的对应类框图,选择【General】以后,点击【Attributes】按钮。


    2.从模型树中选择对应的类节点,打开上下文菜单并选择【Attributes】菜单项。



    无论哪种方法都可以打开下面的属性设定对话框。严格讲这并不是属性自己的属性对话框,而是属性和操作共同的对话框。本文只关注属性部分。



    添加新属性的操作主要是在红绿两个矩形框中进行的。我们在这里只说明有(zhi)关(dao)的项目。


    基本项目


    基本项目通过红框中的列表控件来设置。


    Name:变量名,可以自由输入文本。


    Type: 数据类型,可以自由输入文本,也可以点从下拉菜单中选择。在下拉菜单的最下面,还有一个【Select Type...】选项,提供了从工程中选择类型的功能。但是选择的结果也只是作为文本保存,起到的作用仅限于输入辅助。如果你期待变量类型和被参照的类型 名联动,那你想多了。


    Scope:从下拉列表中选择,一共有四个选项:Public/Protected/Private/Pack

    age。Package也是可选的,表示也没有问题。但是在生成代码时当作Public处理。


    Initial Value:为属性设置初期值。可以就地输入或打开对话框输入。区别不详。


    扩展项目


    属性列表中有属性被选中时,可以设定该属性的扩展属性。


    Static:表明该属性是静态属性,或称静态数据成员。


    Property:定义Property操作方法(Getter/Setter)。具体画面如下:



    Const:定义常量数据成员。


    下面来看一个实例:



    在本例中创建了三个属性(扩展项目部分省略表示):


    1. 私有的int型变量m_age,并为其设置了Proerpty属性。


    2. 保护的string变量m_name。


    3. 静态,公开的int型变量MARRY_AGE。


    作为上述操作的结果,类图变成下面这个样子。



    请注意观察在类图中属性的表达方式。另外也可以看到SetAge和GetAge两个方法。


    关于初期值的补充说明:


    在基本项目中有一个初期值InitialValue需要补充说明一下。


    在C++11之前这个项目只能应用于静态常量数据成员。


    在C++11以后,可以为每个变量设定缺省值。当构造函数的初始值列表中没有为数据成员制定初始值的时候,编译器会利用这个缺省值来初始化数据成员。




    读过本文以后如果能给你带来些许收获,欢迎分享给更多的朋友!


    阅读更多新文章,请扫描下面二维码,关注公众号【面向对象思考】


    展开全文
  • MFC下拉列表框(Combox)控件使用方法

    万次阅读 2015-05-21 15:39:51
    Combo Box (组合)控件很简单,可以节省空间。...下面的例子简要说明如何利用 MFC CComboBox Class来操作字符串列表。  1、定义控件对应变量 假定已经创建了一Dialog,并且从控件工具箱将 Combo Box 控件拖放

    Combo Box (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。下面的例子简要说明如何利用 MFC CComboBox Class来操作字符串列表。 
    1、定义控件对应变量

    假定已经创建了一个Dialog,并且从控件工具箱将 Combo Box 控件拖放到上面。打开 Class Wizard,添加控件对应变量,如:CComboBox m_cbExamble;

    在后面的代码中会不断使用这个变量。

    2、向控件添加 Items

    1) 在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。

    2) 利用函数 AddString() 向 Combo Box 控件添加 Items,如:

    m_cbExample.AddString(“StringData1”);

    m_cbExample.AddString(“StringData2”);

    m_cbExample.AddString(“StringData3”);

    3) 也可以调用函数 InsertString() 将 Item 插入指定位置 nIndex,如:

    m_cbExample.InsertString( nIndex, “StringData” );

    3、从控件得到选定的Item

    假设在控件列表中已经选定某项,现在要得到被选定项的内容,首先要得到该项的位置,然后得到对应位置的内容。这里会用到两个函数,如:

    int nIndex = m_cbExample.GetCurSel();

    CString strCBText;

    m_cbExample.GetLBText( nIndex, strCBText);

    这样,得到的内容就保存在 strCBText 中。

    若要选取当前内容,可调用函数GetWindowText(strCBText)。

    4、在控件中查找给定Item

    这种操作一般用于在程序中动态修改控件中该项的值,可以用函数FindStringExact() 精确匹配,如:

    int nIndex = m_cbExample.FindStringExact( nStartAfter, “value to be found”);

    nStartAfter指明从哪一行开始查找。如果查找成功,返回的是该项的位置;否则,返回CB_ERR。

    也可以选中包含指定字符串的项,如:

    int nIndex = m_cbExample.SelectString( nStartAfter, “value to be selected”);

    5、删除控件中的Item

    该操作可以利用函数DeleteString(),需要指定被删除项的位置,如:

    m_cbExample.DeleteString(nIndex);

    也可以使用函数ResetContent(),清除目前的所有项,如:

    m_cbExample.ResetContent();

    6、显示控件中的某项

    int nIndex = m_cbExample.GetCurSel(); //当前选中的项

    m_cbExample.SetCurSel(nIndex); //设置第nIndex项为显示的内容

    7、得到或设置输入框中被选中的字符位置

    DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar );

    BOOL LimitText( int nMaxChars ); 设置输入框中可输入的最大字符数。

    8、列表框常用消息映射宏

    ON_CBN_DBLCLK 鼠标双击

    ON_CBN_DROPDOWN 列表框被弹出

    ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生

    ON_CBN_SELCHANGE 列表框中选择的行发生改变

    ON_CBN_EDITUPDATE 输入框中内容被更新

     

     

     

    补充:

    一、如何添加/删除Combo Box内容

    1,在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。

    2,在程序初始化时动态添加

    如: //控件内容初始化

    CString strTemp;

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除现有所有内容

    for(int i=1;i<=100;i++)

    {

    strTemp.Format("%d",i);

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);

    }

    3,下拉的时候添加

    如: CString strTemp;

    int iCount=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCount();//取得目前已经有的行数

    if(iCount<1)//防止重复多次添加

    {

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();

    for(int i=1;i<=100;i++)

    {

    strTemp.Format("%d",i);

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);

    }

    }

    4,删除

    DeleteString( UINT nIndex )//删除指定行,

    5,插入

    InsertString( int nIndex, LPCTSTR lpszItem )//将行插入到指定位置

    6,查找

    FindString( int nStartAfter, LPCTSTR lpszItem )//可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。

    int SelectString( int nStartAfter, LPCTSTR lpszItem )//可以选中包含指定字符串的行

    二、如何控制Combo Box的下拉长度

    1,首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。

    2,二、属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。

    三、选择其中的某行

    1,选中:

    int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();//当前选中的行。

    2,设置

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n)//设置第n行内容为显示的内容。

    四、取得Combo Box框内容

    1取当前内容

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp);

    2取其他行内容

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp);

    四、获得焦点

    通常要判断控件是否获得了焦点,可以用GetFocus()函数

    例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框IDC_EDIT_VALUE2内。

    但是combobox 的焦点不同,因为它是由edit和listbox两部分组成的

    所以获得焦点要用GetParent():if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))

    控制Combo Box的下拉长度

    1,首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。

    二、属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。

    VC++ Combo Box/Combo Box Ex控件

      组合窗口是由一个输入框和一个列表框组成。创建一个组合窗口可以使用成员函数:

    BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );

    其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。

    CBS_DROPDOWN 下拉式组合框

    CBS_DROPDOWNLIST 下拉式组合框,但是输入框内不能进行输入

    CBS_SIMPLE 输入框和列表框同时被显示

    LBS_SORT 所有的行按照字母顺序进行排序

    由于组合框内包含了列表框,所以列表框的功能都能够使用,如可以利用:

    int AddString( LPCTSTR lpszItem )添加行,

    int DeleteString( UINT nIndex )删除指定行,

    int InsertString( int nIndex, LPCTSTR lpszItem )将行插入到指定位置。

    void ResetContent( )可以删除列表框中所有行。

    通过调用int GetCount( )得到当前列表框中行的数量。

    如果需要得到/设置当前被选中的行的位置,可以调用int GetCurSel( )/int SetCurSel(int iIndex)。通过调用int GetLBText( int nIndex, LPTSTR lpszText )得到列表框内指定行的字符串。

    此外通过调用int FindString( int nStartAfter, LPCTSTR lpszItem )可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。

    int SelectString( int nStartAfter, LPCTSTR lpszItem )可以选中包含指定字符串的行。

    此外输入框的功能都能够使用,如可以利用:

    DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar )得到或设置输入框中被选中的字符位置。

    BOOL LimitText( int nMaxChars )设置输入框中可输入的最大字符数。

    输入框的剪贴板功能Copy,Clear,Cut,Paste动可以使用。

    最后介绍一下列表框几种常用的消息映射宏:

    ON_CBN_DBLCLK 鼠标双击

    ON_CBN_DROPDOWN 列表框被弹出

    ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生

    ON_CBN_SELCHANGE 列表框中选择的行发生改变

    ON_CBN_EDITUPDATE 输入框中内容被更新

    使用以上几种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,并且定义形式如ON_Notification( id, memberFxn )的消息映射。如果在对话框中使用组合框,Class Wizard会自动列出相关的消息,并能自动产生消息映射代码。

    在MFC 4.2中对组合框进行了增强,你可以在组合框中使用ImageList,有一个新的类CComboBoxEx(由CComboBox派生)来实现这一功能。在CComboBoxEx类中添加了一些新的成员函数来实现新的功能:首先你需要调用CImageList* SetImageList( CImageList* pImageList );来设置ImageList,然后调用

    int InsertItem( const COMBOBOXEXITEM* pCBItem );来添加行,其中COMBOBOXEXITEM定义如下:

    typedef struct { UINT mask; int iItem; LPTSTR pszText; int cchTextMax; int iImage; int iSelectedImage; int iOverlay;       int iIndent; LPARAM lParam;} COMBOBOXEXITEM, *PCOMBOBOXEXITEM;

    你需要设置mask=CBEIF_IMAGE CBEIF_TEXT,并设置iItem为插入位置,设置pszText为显示字符串,设置iImage为显示的图标索引。下面的代码演示了如何进行插入:

    /*m_cbeWnd 为已经创建的CComboBox对象

    m_list 为CImageList对象IDB_IMG 为16*(16*4)的位图,每个图片为16*16共4个图标*/

    m_list.Create(IDB_IMG,16,4,RGB(0,0,0));

    m_cbeWnd.SetImageList(&m_list);

    COMBOBOXEXITEM insItem;insItem.mask=CBEIF_IMAGE CBEIF_TEXT;insItem.iItem=0; insItem.iImage=0;insItem.pszText="Line 1";m_cbeWnd.InsertItem(&insItem);insItem.iItem=1;insItem.iImage=1;insItem.pszText="Line 2";m_cbeWnd.InsertItem(&insItem);

    通过调用int DeleteItem( int iIndex );来删除行,并指明行的位置。

    通过调用BOOL GetItem( COMBOBOXEXITEM* pCBItem )/BOOL SetItem( const COMBOBOXEXITEM* pCBItem );来得到/设置行数据

    展开全文
  • 【转】MFC下拉列表框的用法

    万次阅读 2011-05-28 19:23:00
    下面的例子简要说明如何利用 MFC CComboBox Class来操作字符串列表。 1、定义控件对应变量 假定已经创建了一Dialog,并且从控件工具箱将 Combo Box 控件拖放到上面。打开 Class Wizard,添加控件对应...

    Combo Box (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。下面的例子简要说明如何利用 MFC CComboBox Class来操作字符串列表。
    1、定义控件对应变量

    假定已经创建了一个Dialog,并且从控件工具箱将 Combo Box 控件拖放到上面。打开 Class Wizard,添加控件对应变量,如:CComboBox m_cbExamble;

    在后面的代码中会不断使用这个变量。

    2、向控件添加 Items

    1) 在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。

    2) 利用函数 AddString() 向 Combo Box 控件添加 Items,如:

    m_cbExample.AddString(“StringData1”);

    m_cbExample.AddString(“StringData2”);

    m_cbExample.AddString(“StringData3”);

    3) 也可以调用函数 InsertString() 将 Item 插入指定位置 nIndex,如:

    m_cbExample.InsertString( nIndex, “StringData” );

    3、从控件得到选定的Item

    假设在控件列表中已经选定某项,现在要得到被选定项的内容,首先要得到该项的位置,然后得到对应位置的内容。这里会用到两个函数,如:

    int nIndex = m_cbExample.GetCurSel();

    CString strCBText;

    m_cbExample.GetLBText( nIndex, strCBText);

    这样,得到的内容就保存在 strCBText 中。

    若要选取当前内容,可调用函数GetWindowText(strCBText)。

    4、在控件中查找给定Item

    这种操作一般用于在程序中动态修改控件中该项的值,可以用函数FindStringExact() 精确匹配,如:

    int nIndex = m_cbExample.FindStringExact( nStartAfter, “value to be found”);

    nStartAfter指明从哪一行开始查找。如果查找成功,返回的是该项的位置;否则,返回CB_ERR。

    也可以选中包含指定字符串的项,如:

    int nIndex = m_cbExample.SelectString( nStartAfter, “value to be selected”);

    5、删除控件中的Item

    该操作可以利用函数DeleteString(),需要指定被删除项的位置,如:

    m_cbExample.DeleteString(nIndex);

    也可以使用函数ResetContent(),清除目前的所有项,如:

    m_cbExample.ResetContent();

    6、显示控件中的某项

    int nIndex = m_cbExample.GetCurSel(); //当前选中的项

    m_cbExample.SetCurSel(nIndex); //设置第nIndex项为显示的内容

    7、得到或设置输入框中被选中的字符位置

    DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar );

    BOOL LimitText( int nMaxChars ); 设置输入框中可输入的最大字符数。

    8、列表框常用消息映射宏

    ON_CBN_DBLCLK 鼠标双击

    ON_CBN_DROPDOWN 列表框被弹出

    ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生

    ON_CBN_SELCHANGE 列表框中选择的行发生改变

    ON_CBN_EDITUPDATE 输入框中内容被更新

     

     

     

    补充:

    一、如何添加/删除Combo Box内容

    1,在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。

    2,在程序初始化时动态添加

    如: //控件内容初始化

    CString strTemp;

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除现有所有内容

    for(int i=1;i<=100;i++)

    {

    strTemp.Format("%d",i);

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);

    }

    3,下拉的时候添加

    如: CString strTemp;

    int iCount=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCount();//取得目前已经有的行数

    if(iCount<1)//防止重复多次添加

    {

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();

    for(int i=1;i<=100;i++)

    {

    strTemp.Format("%d",i);

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);

    }

    }

    4,删除

    DeleteString( UINT nIndex )//删除指定行,

    5,插入

    InsertString( int nIndex, LPCTSTR lpszItem )//将行插入到指定位置

    6,查找

    FindString( int nStartAfter, LPCTSTR lpszItem )//可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。

    int SelectString( int nStartAfter, LPCTSTR lpszItem )//可以选中包含指定字符串的行

    二、如何控制Combo Box的下拉长度

    1,首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。

    2,二、属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。

    三、选择其中的某行

    1,选中:

    int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();//当前选中的行。

    2,设置

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n)//设置第n行内容为显示的内容。

    四、取得Combo Box框内容

    1取当前内容

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp);

    2取其他行内容

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp);

    四、获得焦点

    通常要判断控件是否获得了焦点,可以用GetFocus()函数

    例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框IDC_EDIT_VALUE2内。

    但是combobox 的焦点不同,因为它是由edit和listbox两部分组成的

    所以获得焦点要用GetParent():if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))

    控制Combo Box的下拉长度

    1,首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。

    二、属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。

    VC++ Combo Box/Combo Box Ex控件

      组合窗口是由一个输入框和一个列表框组成。创建一个组合窗口可以使用成员函数:

    BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );

    其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。

    CBS_DROPDOWN 下拉式组合框

    CBS_DROPDOWNLIST 下拉式组合框,但是输入框内不能进行输入

    CBS_SIMPLE 输入框和列表框同时被显示

    LBS_SORT 所有的行按照字母顺序进行排序

    由于组合框内包含了列表框,所以列表框的功能都能够使用,如可以利用:

    int AddString( LPCTSTR lpszItem )添加行,

    int DeleteString( UINT nIndex )删除指定行,

    int InsertString( int nIndex, LPCTSTR lpszItem )将行插入到指定位置。

    void ResetContent( )可以删除列表框中所有行。

    通过调用int GetCount( )得到当前列表框中行的数量。

    如果需要得到/设置当前被选中的行的位置,可以调用int GetCurSel( )/int SetCurSel(int iIndex)。通过调用int GetLBText( int nIndex, LPTSTR lpszText )得到列表框内指定行的字符串。

    此外通过调用int FindString( int nStartAfter, LPCTSTR lpszItem )可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。

    int SelectString( int nStartAfter, LPCTSTR lpszItem )可以选中包含指定字符串的行。

    此外输入框的功能都能够使用,如可以利用:

    DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar )得到或设置输入框中被选中的字符位置。

    BOOL LimitText( int nMaxChars )设置输入框中可输入的最大字符数。

    输入框的剪贴板功能Copy,Clear,Cut,Paste动可以使用。

    最后介绍一下列表框几种常用的消息映射宏:

    ON_CBN_DBLCLK 鼠标双击

    ON_CBN_DROPDOWN 列表框被弹出

    ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生

    ON_CBN_SELCHANGE 列表框中选择的行发生改变

    ON_CBN_EDITUPDATE 输入框中内容被更新

    使用以上几种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,并且定义形式如ON_Notification( id, memberFxn )的消息映射。如果在对话框中使用组合框,Class Wizard会自动列出相关的消息,并能自动产生消息映射代码。

    在MFC 4.2中对组合框进行了增强,你可以在组合框中使用ImageList,有一个新的类CComboBoxEx(由CComboBox派生)来实现这一功能。在CComboBoxEx类中添加了一些新的成员函数来实现新的功能:首先你需要调用CImageList* SetImageList( CImageList* pImageList );来设置ImageList,然后调用

    int InsertItem( const COMBOBOXEXITEM* pCBItem );来添加行,其中COMBOBOXEXITEM定义如下:

    typedef struct { UINT mask; int iItem; LPTSTR pszText; int cchTextMax; int iImage; int iSelectedImage; int iOverlay;       int iIndent; LPARAM lParam;} COMBOBOXEXITEM, *PCOMBOBOXEXITEM;

    你需要设置mask=CBEIF_IMAGE CBEIF_TEXT,并设置iItem为插入位置,设置pszText为显示字符串,设置iImage为显示的图标索引。下面的代码演示了如何进行插入:

    /*m_cbeWnd 为已经创建的CComboBox对象

    m_list 为CImageList对象IDB_IMG 为16*(16*4)的位图,每个图片为16*16共4个图标*/

    m_list.Create(IDB_IMG,16,4,RGB(0,0,0));

    m_cbeWnd.SetImageList(&m_list);

    COMBOBOXEXITEM insItem;insItem.mask=CBEIF_IMAGE CBEIF_TEXT;insItem.iItem=0; insItem.iImage=0;insItem.pszText="Line 1";m_cbeWnd.InsertItem(&insItem);insItem.iItem=1;insItem.iImage=1;insItem.pszText="Line 2";m_cbeWnd.InsertItem(&insItem);

    通过调用int DeleteItem( int iIndex );来删除行,并指明行的位置。

    通过调用BOOL GetItem( COMBOBOXEXITEM* pCBItem )/BOOL SetItem( const COMBOBOXEXITEM* pCBItem );来得到/设置行数据

    展开全文
  • wxPython 把窗口部件放入框架中

    千次阅读 2017-01-14 13:08:55
    在你的wxPython中,所有的用户交互行为都发生在一个窗口部件容器中,它通常被称作窗口,在wxPython 中被称为框架。在这一章中,我们将讨论wxPython中的几不同样式的框架。这主要的wx.Frame有几不同的框架样式...
  • 本节给大家带来的Android给我们提供的系统服务中的——WindowManager(窗口管理服务), 它是显示View的最底层,Toast,Activity,Dialog的底层都用到了这WindowManager, 他是全局的!该类的核心无非:调用...
  • b、给picker对象添加数据,setDate() 支持数据格式为: 数组  picker.setData([{value:'zz',text:'智子'}]); c、显示picker  picker.show( SelectedItemsCallback ) 实例 var picker = new mui....
  • 文章目录七、实现步骤(十)创建窗口界面...目前只是创建一可以显示出来和关闭的主界面窗口,等到将各个功能模块窗口界面都完成了,我们会修改代码,给出主窗口界面的最终版。 MainFrame继承JFrame类 添加构造方法
  • CSS常用属性速查表

    千次阅读 2016-03-20 01:34:56
    属性太多,对于我这种不深入WEB的人员,还是有速查表方便多了,注意利用开头的目录,会不断更新的 CSS 字体属性(Font) 属性 描述 CSS  font 在一声明中设置所有字体属性。 1  font-family 规定文本...
  • 项目 命令来创建一新的Windows程序 在这里选择创建了一Windows窗口程序 (1)工具箱窗口 工具箱提供了Windows应用程序的用户界面控件,这些控件按其使用类型划分在不同的选项卡中,用户...
  • CListCtrl 虚拟列表显示复选

    千次阅读 2011-09-27 10:39:32
    今天写了虚拟列表显示复选的演示程序,放在了: http://download.csdn.net/detail/daiafei/6617913 ,有不明白的朋友可以下载一下。 在用ClistCtrl控件显示大量数据的时候速度相当慢,而且对内存的占用也是...
  • 在已有的项目中,新添加Web窗口,并在设计器界面,拖放一Button控件,同时修改ID属性为“btnAdd”。再拖放一Label控件,修改其ID属性为“lblInfo”。 第二步: 双击【Button】按钮,进入Click事件代码...
  • JAVA上百实例源码以及开源项目

    万次阅读 多人点赞 2016-01-03 17:11:03
    笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此...
  • 它是一 MVP 框架,充分利用了现代 Web 技术,包括 jQuery。它大大减少了操作 DOM 的需求,转而教大家使用模板。它以数据为视角来组织代码,告诉大家:原来 JS 还可以这么写。 使用 Backbone 编写的应用在...
  • GIS软件列表

    万次阅读 2016-09-05 21:36:07
    3map:行星地球项目由3map驱动,这是一自由软件,由Telstra宽带基金会创建并支持,提供客户端与服务器的能力以在线再现虚拟地球。 Amein!:其界面介于ArcMap和UMN Mapserver之间.AmeiN!写了一ArcMap下的...
  • 文章目录一、前言二、使用Spy++工具分析窗口三、C#通过Windows API捕获窗口,获取窗口文本、附录:Windows窗口消息 一、前言 项目是Unity开发的,上架了QQ游戏大厅,需要兼容XP系统。 QQ游戏大厅启动游戏的流程是...
  • 创建窗口添加基本组件2. 自定义标题,隐藏任务栏标题,实现系统托盘显示3. 美化主界面,文本框的奇思妙想4. 实现背景阴影 一. 前言 Fdog系列已写目录: Fdog系列(一):思来想去,不如写一聊天软件,那就从仿...
  • 干货阿里巴巴 开源软件列表

    千次阅读 2016-06-01 09:14:52
    阿里的开源项目很多,这也跟@淘宝正明的开源态度密不可分。有很多重量级的项目,例如LVS、Tengine,或者很有实践价值的中间件,今天小编为大家汇总了阿里开源的项目,快来看看吧! 服务框架 Dubbo ...
  • android安卓源码海量项目合集打包-1

    万次阅读 多人点赞 2019-06-11 16:16:24
    最后更新共计113分类5177套源码29.2 GB。 卷 新加卷 的文件夹 PATH 列表 卷序列号为 00000200 5E7A:7F30 F:. ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签的灵活运用.rar │ │ ...
  • 第七章 高级利用 作者:Gilberto Najera-Gutierrez 译者:飞龙 协议:CC BY-NC-SA 4.0 简介在获得一些便利来发现和利用漏洞之后,我们现在转向可能需要更多努力的其他问题上。这一章中,我们会搜索利用,编译...
  • intent的种启动模式和7大属性

    千次阅读 2016-11-22 11:01:09
    Action作为标识符,代表一Intent,当一Activity需要外部协助处理时,就会发出一Intent,如果一程序能完成相应功能,只要在intent-filter加上这intent就可以了。 Data保存需要传递的数据格式,比如:...
  • C# 控件属性一览表

    千次阅读 2015-01-09 21:09:17
    用来获取或设置窗体的窗口状态。 取值有三种: Normal (窗体正常显示)、 Minimized (窗体以最小化形式显示)和  Maximized(窗体以最大化形式显示)。  (3)StartPosition属性:用来获取或
  • HTML超链接基本属性

    千次阅读 2019-10-17 15:49:02
    一、超链接的常见属性 1、超链接的语法格式 1.1、href属性可以指定连接的地址,可以是本地地址、也可以是锚记标记、也可以是网络地址... target属性四个参数值,分别如下: 第一、_blank:表示点击超链接后在一...
  • 一、前言 这是我看到的一片比较完整的讲自定义窗口,自定义组件的教程,讲的比较详细,特意转过来给大家分享一下...利用学到的东西制作自己的工具(自定义的窗口、Inspector、菜单等等)。 、正文 1、Uni...
  • JAVA必背面试题和项目面试通关要点

    千次阅读 2016-04-15 14:15:53
    1.常问数据库查询、修改(SQL查询包含筛选查询、聚合查询和链接查询和优化问题,手写SQL语句,例如四个球队比赛,用SQL显示所有比赛组合;举例2:选择重复项,然后去掉重复项;) 数据库里的密码如何加密(md5);...
  • 转载自:... 1. React Native 这是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 React Native, 该框架结合了 Web 应用和 Native 应用的优势, 可以使用 JavaScript...
  • 利用MFC 在运行中动态创建新窗口

    千次阅读 1970-01-12 19:01:47
    利用MFC 在运行中动态创建新窗口 作者:郑咏 发布时间:2001/03/23 文章摘要: 本文介绍了Visual C++ 6.0 编程环境下使用MFC 类库编程时,在程序运行中动态创建新窗口的一种方法。本方法利用了MFC的框架类,因此新...
  • Java开源 AJAX框架

    千次阅读 2008-02-05 10:21:00
    利用框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6...
  • 【input 标签的 type 属性详解】

    万次阅读 多人点赞 2019-09-03 23:16:31
    input 标签的 type 属性详解1. input 输入标签的type 属性1.1 input 标签的 type类型 属性的常用属性值⑴ type="text"⑵ type="button"⑶ type="checkbox"⑷ type="file"⑸ type="hidden"⑹ type="image"⑺ type=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,063
精华内容 12,425
关键字:

利用属性窗口向列表框添加四个项目