VC MFC组合框(CComboBox)控件

组合框:

自绘组合框(显示图标)

要了解的概念:组合框是由一个编辑框和列表框组合而成的.
CComboBox类里要了解的函数:
SetItemHeight//设置列表框项,或编辑框高度,第一个参数为-1表示设置编辑框高度,0表示列表框项,第二个参数是要设置的高度
SetItemData//为列表框里的项关联一个DWORD值,第一个参数表示列表框项索引,第二个参数指明具体值
GetItemData//只有一个参数,列表框项索引,返回该索引关联的值。

首先像自绘按钮类一样,从控件类中派生出一个子类(组合框类名:CComboBox),派生的类名为:CNewComboBox然后向工程导入五个图标,ID号分别为:

IDI_NORMAL1、IDI_NORMAL2。。。IDI_NORMAL5

往CNewComBox类添加一个函数,用于设置图标ID和文本内容,如下:
int CNewComboBox::SetItemIcon(UINT nID,LPCTSTR lpszString)//第一个参数是图标ID号,第二个是文本内容
{
int index=AddString(lpszString);
SetItemData(index,nID);
return index;
}

然后添加CNewComBox类的虚函数DrawItem,DrawItem函数的代码如下:

CDC dc;
 dc.Attach(lpDrawItemStruct->hDC);//组合框DC
 CRect itemRect(lpDrawItemStruct->rcItem);//项区域
  int nSate=lpDrawItemStruct->itemState;//项状态
  int nIndex=lpDrawItemStruct->itemID;//项索引
      if(nIndex!=-1)
 {

       if(nSate&ODS_SELECTED)//如果选中该项
         dc.FillSolidRect(&itemRect,RGB(124,231,169));
    else
         dc.FillSolidRect(&itemRect,RGB(2,94,193));
  UINT uID=GetItemData(nIndex);
     POINT pt;
    pt.x=itemRect.left;
    pt.y=itemRect.top;
    dc.DrawIcon(pt,LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(uID)));//画图标
    itemRect.left+=35;

    dc.SetBkMode(TRANSPARENT);
    CString str;
    GetLBText(nIndex,str);
    dc.DrawText(str,itemRect,DT_LEFT|DT_VCENTER|DT_SINGLELINE);//显示文本
 }
   dc.Detach();

接着在对话框编辑区给对话框添加一个组合框控件,组合框的样式:类型:下拉列表、所有者绘制:固定、有字串:勾

并为控件关联一个控件变量m_NewCom,类型为CNewComboBox

然后在对话框初始化函数OnInitDialog里添加如下代码:
m_NewCom.SetItemIcon(IDI_NORMAL1,"Kdjfkd");
  m_NewCom.SetItemIcon(IDI_NORMAL2,"kjdkfj");
  m_NewCom.SetItemIcon(IDI_NORMAL3,"dkjfdj");
  m_NewCom.SetItemIcon(IDI_NORMAL4,"kdjfkd");
  m_NewCom.SetItemIcon(IDI_NORMAL5,"kdjfkd");
     m_NewCom.SetItemHeight(-1,35);
  m_NewCom.SetItemHeight(0,35);

最后,记得要包含类头文件 "NewComboBox.h"

编译、运行,效果如下:

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bczheng1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值