1. 新建ActiveX工程ActiveXcomboBox

      

Ok->next->next->next, create control based on 选择combobox, 点击finish创建成功.

2.添加方法

打开类视图,在类视图中找到ActiveXcomboBoxLib,打开旁边的“+”号展开,在_DActiveXcomboBox 上右键 Add-->Add Method

在弹出的对话框中,method name 输入函数名:AddString ,internal name 自动添加。返回值类型选择 void ;添加参数:parameter name : strData ,parameter type : BSTR,点击Add 添加参数成功。

Finish.完成,在类视图中可出现了刚添加的函数:

接下来要实现函数体。打开solution explorer , 双击打开ActiveXcomboBoxCtrl.cpp , 找到刚刚添加的函数AddString,在函数里添加代码:

ASSERT(::IsWindow(m_hWnd));

::SendMessage(m_hWnd, CB_ADDSTRING, 0, (LPARAM)strData);

2.2利用ActiveX container测试函数:

运行程序,弹出对话框,在executable file name 中选择:ActiveX Control Test Container

点击OK,打开了ActiveX Control Test Container ,在空白处右键,弹出菜单,选择Insert New Control

在弹出的对话框中选择ActiveXcomboBox Control  :

OK 创建的控件被添加进来了:

接下来测试函数:选中控件,然后点击工具栏上红色的小方块:

在invoke method 对话框中,method name 选择Addstring , parameter value 中输入要加入到combobox  的字符串,这里输入“aaaa”,点击“set value”给参数赋值成功。

点击“Invoke”调用函数。此时可以看到,comboBox 中下拉列表多了一行字符串,说明添加成功。

重复此操作添加多行:

2.3 修改comboBox 的外观

上面添加进来的comboBox 不是下拉列表可隐藏的,要想改变ComboBox 的外观可在

ActiveXcomboBoxCtrl.cpp 文件中,找到函数PreCreateWindow 。

在函数中添加 cs.style |= CBS_DROPDOWNLIST;

comboBox 有三种显示样式:CBS_SIMPLE –-- 始终显示列表框

CBS_DROPDOWN  ---类似于 CBS_SIMPLE,只不过只有当用户选择编辑控件旁的图标时,才会显示该列表框。

CBS_DROPDOWNLIST---  类似于 CBS_DROPDOWN,只不过编辑控件无法编辑,只能显示列表框中当前选择的文本。

用户可根据需要更改combbox的显示样式:

如:

cs.style |= WS_VSCROLL 是在列表长度不够时显示垂直的滚动条。

(这里的或运算(|) 是为了保证原来的设置被保留)

再运行程序,变成了下拉列表的样子:

如果把comboBox拉的比较短,弹出下拉列表框会带有滚动条:

 2.4 添加函数DeleteItem

按照上面添加函数的方法再添加一个函数void DeleteItem(LONG nIndex);

(该函数用于删除一项,nIndex 是要删除的项的索引号)

在ActiveXcomboBoxCtrl.cpp 文件中添加函数实现:

void CActiveXcomboBoxCtrl::DeleteItem(LONG nIndex)

{

AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: Add your dispatch handler code here

SendMessage(CB_DELETESTRING, nIndex, 0);

}

2.5添加函数Getcount

2.6    添加函数GetCurSel

LONG GetCurSel(void); 用来获得当前选中的项目的索引。

2.7    添加函数SetCurSel

void  SetCurSel(LONG nSelect); 设置当前选中的项。--nSelect 选中项的索引。

Next-->finish.

2.8  添加函数GetListTextLen

LONG GetListTextLen(LONG nIndex);该函数用来获得指定索引项的字符串长度。

LONG CactiveXComboBoxCtrl::GetListTextLen(LONG nIndex)

{

AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: Add your dispatch handler code here

ASSERT(::IsWindow(m_hWnd));

return (int)::SendMessage(m_hWnd, CB_GETLBTEXTLEN, nIndex, 0);

return 0;

}

2.9添加函数GetText

BSTR GetText(LONG nIndex); 获得指定索引nIndex 的内容。

BSTR CactiveXComboBoxCtrl::GetText(LONG nIndex)

{

AFX_MANAGE_STATE(AfxGetStaticModuleState());

CString strResult;

// TODO: Add your dispatch handler code here

::SendMessage(m_hWnd, CB_GETLBTEXT, nIndex, (LPARAM)strResult.GetBufferSetLength(GetListTextLen(nIndex)));

strResult.ReleaseBuffer();

return strResult.AllocSysString();

}

用ActiveX 创建自己的comboBox 控件(一)的更多相关文章

  1. 用ActiveX 创建自己的comboBox 控件(二)

    3.0 添加事件 3.1 添加OnSelChange 事件 当用户选中列表项的时候触发该事件.(不只是选择改变时触发,本次选择和上次相同时也触发): 添加完成后,在ActivexcomboBox.id ...

  2. C#中combobox 控件属性、事件、方法

    一 .combobox 属性.事件.方法公共属性 名称 说明 AccessibilityObject 获取分配给该控件的 AccessibleObject. AccessibleDefaultActi ...

  3. MFC中ComboBox控件用法

    MFC ComboBox 一.入门篇 ComboBox (组合框)控件很简单,可以节省空间.从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的.用户可以从一个预先定义的列表里选择一个选项 ...

  4. [C#]WinForm 中 comboBox控件之数据绑定

    [C#]WinForm 中 comboBox控件之数据绑定 一.IList 现在我们直接创建一个List集合,然后绑定 IList<string> list = new List<s ...

  5. comboBox控件动态绑定数据

    /// <summary>        /// load加载数据        /// </summary>        /// <param name=" ...

  6. ComboBox控件绑定数据源后,添加'请选择'或'全部'

    ComboBox控件绑定数据源后,添加'请选择'或'全部' 当使用ComboBox控件绑定数据源之后,通过Items 属性添加的数据是无效的,此时如果要在所有选项前添加 选项 ,则需要考虑从数据源下手 ...

  7. ExtJS基础知识总结:自定义日历和ComboBox控件(二)

    概述 1.ExtJS 5不支持日期选择框中只选择年月,为了满足ExtJs5可以实现选择年月的功能,查询网上资料,整理出来了相应的处理方式,最终实现的效果如下图: 2.ExtJS 控件丰富,如果需要实现 ...

  8. 加载ComboBox控件

    /// <summary> /// 加载公司 /// </summary> /// <param name="cbbCompany">Combo ...

  9. .Net平台Winform两个ComboBox控件绑定同一个数据源

    今天WINFROM编程遇到这么一个问题:是有关WINFORM中两个comboBox控件绑定同一个数据源的问题,在窗体的界面上有两个comboBox,我在Form1_Load中对他们做了数据绑定(具体代 ...

随机推荐

  1. 剑指Offer 52. 正则表达式匹配 (字符串)

    题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式 ...

  2. kettle在本地执行向远程hdfs执行转换错误"Couldn't open file hdfs"

    kettle在本地执行向远程hdfs执行转换时,会出现以下错误: ToHDFS.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18 ...

  3. bootstrap table表格前台分页,点击tab选项,重新刷新表格

    近期做项目的时候使用bootstrap表格前台分页,并且有一个tab切换选项,共用一个table,效果如下图,上方是tab选项,下方是table: 在实际实现的时候,在默认状态下,表格翻到了第5页,此 ...

  4. https://blog.csdn.net/doegoo/article/details/50749817

    因为使用DiscuzX3.2进行系统的整合后,因为只是想在原J2EE的系统上增加论坛功能,而且J2EE中已经有一套用户的注册认证的体系,所以不需要在Discuz的系统中去注册以及登录功能,而是通过在J ...

  5. PythonStudy——流程控制 Process control

    1. 分支结构 -- if -- if...else...-- if...elif...else...-- if嵌套 ''' if 条件: 同缩进的代码块 ''' if age > 18: pr ...

  6. 数学:确定性的丧失 (M·克莱因 著)

    第一章 数学真理的起源 (已看) 第二章 数学真理的繁荣 (已看) 第三章 科学的数学化 (已看) 第四章 第一场灾难:真理的丧失 (已看) 第五章 一门逻辑科学不合逻辑的发展 (已看) 第六章 分析 ...

  7. 秒懂,Java 注解 (Annotation)你可以这样学 - CSDN博客

    https://blog.csdn.net/briblue/article/details/73824058 文章开头先引入一处图片. 这处图片引自老罗的博客.为了避免不必要的麻烦,首先声明我个人比较 ...

  8. C#编程经验-enum and struct

    enum,store fixed values,use array replace,not use this data-structurestruct,store several variables, ...

  9. 在他机上还原DB2的备份

    在服务器获取得到db2的备份文件,拷贝到d盘db2_backup目录下面 在windows下的时间戳标记为时间目录名+文件名.001前面的 "2014022\0001006.001" ...

  10. PAT 乙级 1065 单身狗 (25 分)

    1065 单身狗 (25 分) “单身狗”是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数 N(≤ 50 000),是 ...