热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用ActiveX创建自己的comboBox控件(一)

新建ActiveX工程ActiveXcomboBoxOk-next-next-next,createcontrolbasedon选择combobox,点击finish创建成功
  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();

}

转:https://www.cnblogs.com/small-lazybee/p/7070243.html



推荐阅读
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 本文介绍了Cocos2dx学习笔记中的更新函数scheduleUpdate、进度计时器CCProgressTo和滚动视图CCScrollView的用法。详细介绍了scheduleUpdate函数的作用和使用方法,以及schedule函数的区别。同时,还提供了相关的代码示例。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
author-avatar
杨洋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有