原文地址:http://www.uieasy.cn/blog/?p=513

传统的combobox 在使用方面有很多限制,很难满足我们combobox类型控件的需求。主要表现中combobox内置的listbox难以控制且比较难以完美绘制。因此我们在DSkinControl控件中添加了新的控件dsCtrlComboBox来实现一些标准combobox难以实现的功能。

dsCtrlComboBox控件结构

由于使用dskinlite界面库可以自由绘制一个子窗口,绘制listbox,因此上图所示QQ登录界面很容易配置出来。首先是上部继承自CWnd的子窗口,我们在dsCtrlCombobox中使用combobox_bk来绘制。xml配置如下:

<window name="combobox_bk" type="static"> <property bkcolor="RGB(255,255,255)" btransparentbk="false" /> <text state="all" font="#default" left="30" vertalign="center" bsingleline="true" textcolor="RGB(0,0,0)" /> <image state="normal" picfile="#extend.combobox.bk.nor" paintmode="stretchparthorz" left_part="3" right_part="3"/> <image state="over|down" picfile="#extend.combobox.bk.over" paintmode="stretchparthorz" left_part="3" right_part="3"/> <image state="all" index="100" id="image.default" picfile="#extend.combobox.bk.nor" left="5" top="3" ;20" height="20"/> <image state="normal" index="2" left="-25" top="1" width="24" height="24" picfile="#extend.combobox.btn.nor" /> <image state="over" index="2" left="-25" top="1" width="24" height="24" picfile="#extend.combobox.btn.over" /> <image state="down" index="2" left="-25" top="1" width="24" height="24" picfile="#extend.combobox.btn.down" /> </window>

其中

<image state="all" index="100" id="image.default"   picfile="#extend.combobox.bk.nor" left="5" top="3" ;20" height="20"/>

是我们为类似IM登陆中使用的combobox优化的一种模式。其中index=100 id="image.default"是固定的值,用于显示dsCtrlCombobox前面的用户头像。

在dsCtrlComboBox内部代码中,通过如下调用来控制界面显示:

void dsCtrlComboBox::SetWindowImage( CString strImage) { ShowWindowImage( TRUE); if ( !strImage.IsEmpty()) dsSetDrawItemValue( GetSafeHwnd(), _T("image.default"), strImage, FALSE); } void dsCtrlComboBox::ShowWindowImage(BOOL bShow) { if ( bShow ) dsSetDrawItemVisible( GetSafeHwnd(), 100,100, TRUE, FALSE); else dsSetDrawItemVisible( GetSafeHwnd(), 100,100, FALSE, FALSE); }

因为我们提供dsCtrlComboBox的所有源码,因此开发人员也可以根据自己的需要来定义这些绘制元素。

同时我们通过以下xml配置绘制下拉的listbox:

<window name="combobox.listbox" type=""> <property bkcolor="#system_bg" bordercolor="RGB(255,0,0)" btransparentbk="false" scrollbar="scrollbar" /> <rect id="border" index="1" bordercolor="#system.border" border;1" style="hole" /> <rect id="border" index="2" bordercolor="RGB(255,255,255)" left="1" top="1" right="-1" bottom="-1" borderwidth="1" style="hole" /> <rect id="item" state="checked" gradientmode="horiz" gradientbegincolor="RGB(63,152,217)" gradientendcolor="RGB(48,134,198)" /> <rect id="item" bordercolor="RGB(255,255,255)" fillcolor="RGB(255,255,255)" state="normal"/> <listboxinfo bDrawOver="true" itemheight="35" > <drawitem id="default" > <image state="all" id="image.default" picfile="#extend.combobox.bk.nor" left="5" top="2" width="20" height="20"/> <text id="text.default" content="" left="30" top="4" state="normal" textcolor="RGB(0,0,0)" font="#default"/> <text id="text.default" content="" left="30" top="4" state="over" textcolor="RGB(68,138,237)" font="#default"/> <text id="text.default" content="" left="30" top="4" state="checked" textcolor="RGB(255,255,255)" font="#default"/> <eventitem id="close" event="LButtonDown" cursor="handcur" state="checked" left="-20" top="5" width="15" height="15" visible="true"> <image state="normal" picfile="#extend.listbox.closebtn.nor" /> <image state="over" picfile="#extend.listbox.closebtn.over" /> </eventitem> </drawitem> </listboxinfo> </window>

同样以上XML中id为“text.default” 和id 为“image.default”的绘制元素在代码中会被设置不同的值,用以显示每一个item对应的文本和图片值。

dsCtrlComboBox 函数使用

基本上我们完全按照MFC CComboBox的API来做封装,为了使用户很容易理解并使用。CComboBox的大部分函数我们在dsCtrlComboBox中都实现了,有些做了一些扩展。如:

int dsCtrlComboBox::AddString( LPCTSTR lpszString, LPCTSTR lpszImage);

此函数表示在添加item项时,同时指定item text及 item image。详情请参考我们的ComboBoxTest示例工程。

总结:

由于DSkinLite界面库对界面绘制灵活的支持,使得我们可以使用dsCtrlComboBox非常容易的绘制出不同样式的界面,本文中的类似IM软件中用户登陆combobox只是一个方面的应用,因为我们提供了DSkinControl的所有源码,开发人员可以根据界面需要配置不同的界面来。

Technorati 标签: combobox QQ登录界面 界面库 界面控件

转载于:https://blog.51cto.com/guicoder/531045

用combobox扩展控件(dsCtrlComboBox)做出类似QQ登录界面的效果相关推荐

  1. 用基本控件简单地仿QQ登录界面

    2019独角兽企业重金招聘Python工程师标准>>> //  Created by 妖精的尾巴 on 15-8-14. //  Copyright (c) 2015年 妖精的尾巴. ...

  2. Bootstrap 表单的扩展控件

    除了基本的控件,作为对 HTML 表单控件的补充,Bootstrap 还为表单额外提供了一些非常实用的扩展控件. 输入框的前置和后置组件,是非常实用的控制控件.利用输入框的前置和后置组件,可以在输入框 ...

  3. ajax控件扩展,22.6 扩展控件

    22.6  扩展控件 ASP.NET AJAX在扩展已有控件方面占有很大的优势,它为创建新的扩展控件提供了一个框架,目前没有扩展控件,但使用ASP.NET AJAX控件工具集可以得到许多扩展控件.本节 ...

  4. 支持拼音检索的TextBox扩展控件-使用

    我的上一个支持拼音检索的TextBox扩展控件,由于有些网友留言和发邮件问如何用, 如:菜鸟AAA等当时想到肯定大家都会用,就没上传示例程序. 原文为:http://www.cnblogs.com/w ...

  5. WPF触控程序开发(三)——类似IPhone相册的反弹效果

    原文: WPF触控程序开发(三)--类似IPhone相册的反弹效果 用过IPhone的都知道,IPhone相册里,当图片放大到一定程度后,手指一放,会自动缩回,移动图片超出边框后手指一放,图片也会自动 ...

  6. 【第3版emWin教程】第55章 emWin6.x按钮Button控件自定义回调函数,实现各种按钮效果

    教程不断更新中:链接 第55章       emWin6.x按钮Button控件自定义回调函数,实现各种按钮效果 本章节为大家讲解按钮控件自定义回调函数,通过其回调函数就可以实现各种按钮效果.这方面的 ...

  7. Android动态加载XML文件及控件来简单实现QQ好友印象的功能

    在android开发中,我们常常会遇到界面布局控件不确定的情况.由于某些功能的原因或者为了体现某些app的特色等这些原因会导致我们在实现界面布局时需要动态去加载一些控件,那么下面就来介绍一下如何用动态 ...

  8. C语言实现类似QQ聊天界面抖动功能

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104991863 实 ...

  9. PHP防QQ列表右划,react native 实现类似QQ的侧滑列表效果

    如果列表行数据需要更多的操作,使用侧滑菜单是移动端比较常见的方式,也符合用户的操作习惯,对app的接受度自然会相对提高点.最近得空就把原来的react-native项目升级了侧滑操作,轻轻松松支持an ...

最新文章

  1. 了解C++默默编写并调用哪些函数
  2. Nginx模块之———— RTMP 模块的在线统计功能 stat 数据流数据的获取(不同节点则获取的方式不同)...
  3. 分位数(quantiles)、Z-score 与 F-score
  4. mpvue tabBar设定 app.json
  5. 标准make变量 MAKE_VERSION, CURDIR
  6. 解决EF 4.0 中数据缓存机制
  7. 工作日志WebRoot--编辑页关于处理两个关联的选择框
  8. 【习题0】准备工作【第0天】
  9. java mybtis关联查询,7.MyBatis 关联查询(一对一)
  10. java 泛型 类型形参(Type Parameters) 类型
  11. 好的 Web 前端年薪会有多少?
  12. 洛谷1363——幻想迷宫(搜索)
  13. Java基础知识强化之IO流笔记19:FileOutputStream的三个write方法
  14. (3/3) plsql使用技巧PL/SQL Developer实现双击table表名查询
  15. editplus使用
  16. OpenCV C++安装和配置
  17. 天正电气图例_cad天正电气常用快捷键整理
  18. kube-scheduler源码分析(三)之 scheduleOne
  19. 【2021-07-23】JS逆向之雷速体育canvas渲染数据解密
  20. 如何让溢出的文字省略号显示

热门文章

  1. hypermesh 连接单元_西门子五件套L9型2M插头2兆线接头射频同轴电缆连接器三通双通头_...
  2. hdu1316 水大数
  3. 【数字信号处理】序列傅里叶变换 ( 傅里叶变换实例 | 矩形窗函数 | 傅里叶变换 | 傅里叶变换幅频特性 | 傅里叶变换相频特性 )
  4. 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 抽象业务逻辑函数 )
  5. 【Android Binder 系统】一、Binder 系统核心 ( IPC 进程间通信 | RPC 远程调用 )
  6. 【计算机网络】物理层 : 调制 ( 数字数据 调制 模拟信号 | 调幅 | 调频 | 调相 | 调幅 + 调相 QAM | 计算示例 | 模拟信号 调制为 模拟信号 )
  7. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )
  8. 【Android 系统开发】Android JNI 之 JNIEnv 解析
  9. 【Linux 操作系统】阿里云服务器 操作实战 部署C语言开发环境(vim配置,gcc) 部署J2EE网站(jdk,tomcat)
  10. 并发编程中的GIL锁(全局解释器锁)自己理解的他为啥存在