用ActiveX 创建自己的comboBox 控件(一)
- 新建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 控件(一)的更多相关文章
- 用ActiveX 创建自己的comboBox 控件(二)
3.0 添加事件 3.1 添加OnSelChange 事件 当用户选中列表项的时候触发该事件.(不只是选择改变时触发,本次选择和上次相同时也触发): 添加完成后,在ActivexcomboBox.id ...
- C#中combobox 控件属性、事件、方法
一 .combobox 属性.事件.方法公共属性 名称 说明 AccessibilityObject 获取分配给该控件的 AccessibleObject. AccessibleDefaultActi ...
- MFC中ComboBox控件用法
MFC ComboBox 一.入门篇 ComboBox (组合框)控件很简单,可以节省空间.从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的.用户可以从一个预先定义的列表里选择一个选项 ...
- [C#]WinForm 中 comboBox控件之数据绑定
[C#]WinForm 中 comboBox控件之数据绑定 一.IList 现在我们直接创建一个List集合,然后绑定 IList<string> list = new List<s ...
- comboBox控件动态绑定数据
/// <summary> /// load加载数据 /// </summary> /// <param name=" ...
- ComboBox控件绑定数据源后,添加'请选择'或'全部'
ComboBox控件绑定数据源后,添加'请选择'或'全部' 当使用ComboBox控件绑定数据源之后,通过Items 属性添加的数据是无效的,此时如果要在所有选项前添加 选项 ,则需要考虑从数据源下手 ...
- ExtJS基础知识总结:自定义日历和ComboBox控件(二)
概述 1.ExtJS 5不支持日期选择框中只选择年月,为了满足ExtJs5可以实现选择年月的功能,查询网上资料,整理出来了相应的处理方式,最终实现的效果如下图: 2.ExtJS 控件丰富,如果需要实现 ...
- 加载ComboBox控件
/// <summary> /// 加载公司 /// </summary> /// <param name="cbbCompany">Combo ...
- .Net平台Winform两个ComboBox控件绑定同一个数据源
今天WINFROM编程遇到这么一个问题:是有关WINFORM中两个comboBox控件绑定同一个数据源的问题,在窗体的界面上有两个comboBox,我在Form1_Load中对他们做了数据绑定(具体代 ...
随机推荐
- 关于dos命令行脚本编写
dos常用命令另查 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码也是共用的,只是cmd文件中允许 ...
- wc语法2
wc命令的功能为统计指定文件中的字节数.字数.行数, 并将统计结果显示输出. 语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同 ...
- Javascript中的this指向。
一.JavaScript中的函数 在了解this指向之前,要先弄明白函数执行时它的执行环境是如何创建的,这样可以更清楚的去理解JavaScript中的this指向. function fn(x,y,n ...
- js实现table表格相同内容按需合并
uniteTdCells(tableId) { var table = document.getElementById(tableId); for (let i = 0; i < table.r ...
- mysql 基本函数以及初学语句
创建数据库create database 数据库名: 查看数据库列表show databases; 选择数据库use 数据库名: 删除数据库drop database 数据库名: 创建表CREATE ...
- Shell脚本、Shell脚本结构、date命令的用法、变量
1.Shell脚本: shell是一种脚本语言 目的:可以实现自动化运维,能大大增加运维的效率.2.Shell脚本结构: #!/bin/bash 以#!/bin/bash开头,即以/bin/ba ...
- PTA——黑洞数
PTA 7-44 黑洞数 我的程序,一个用例通不过 #include<stdio.h> void sort(int *a,int n); int main() { ; scanf(&quo ...
- python 不同进程间通信
from multiprocessing import Process,Queue import os def f (qq): qq.put([42,None,'hello']) #将列表传入队列qq ...
- python:基本统计值计算(平均数,方差,中位数)
#CalStatisticsV1.py def getNum(): #获取用户不定长度的输入 nums=[] test=input("请输入要存储的数据(回车退出):") whil ...
- Java面试题 OOAD & UML+XML+SQL+JDBC & Hibernate
二.OOA/D 与UML 部分:(共6 题:基础2 道,中等难度4 道) 96.UML 是什么?常用的几种图?[基础] 答:UML 是标准建模语言:常用图包括:用例图,静态图(包括类图.对象图和包图) ...