DSkinControl( For MFC) 控件- dsCtrlComboBox

image

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

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

dsCtrlComboBox控件结构

image

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

 
 
    
  
  
    
  
  
    
  
  
    
  
  
    
  
  
    
  
  
    
  
  
    
  
  

 
 

其中

index="100" id="image.default"   picfile="#extend.combobox.bk.nor" left="5" top="3" width="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:

 
 
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

 
  
  
    
   
   
      
    
    
      
    
    
      
    
    
      
    
    
     
    
    
    
        
     
     
        
     
     
    
    
    
            
    
   
   

  
  
  

 
 

同样以上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的所有源码,开发人员可以根据界面需要配置不同的界面来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值