蓝色边框,选择时是深蓝色边框,下拉按钮可以自定义图片,不过只能是 15*16的BMP
classCMyComboBox:publicCComboBox
...{
//Construction
public:
CMyComboBox();
//normal_id普通状态图片的ID
//hover_idhover状态图片的ID
//push_idpush状态图片的ID
CMyComboBox(unsignedintnormal_id,unsignedinthover_id,unsignedintpush_id);
//Attributes
public:
//Operations
public:
//OverridesClassWizard
//generatedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CMyComboBox)
protected:
virtualvoidPreSubclassWindow();
//}}AFX_VIRTUAL
//Implementation
public:
virtual~CMyComboBox();
//Generatedmessagemapfunctions
protected:
//{{AFX_MSG(CMyComboBox)
afx_msgvoidOnPaint();
afx_msgvoidOnMouseMove(UINTnFlags,CPointpoint);
afx_msgvoidOnTimer(UINTnIDEvent);
afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);
afx_msgvoidOnLButtonUp(UINTnFlags,CPointpoint);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
voidDrawButton(CDC*pDC);
private:
unsignedintm_normal_id;
unsignedintm_hover_id;
unsignedintm_push_id;
//0-normal1-hover2-push
intm_button_state;
boolm_active;
boolm_draw;
};
#defineBUTTON_STATE_NORMAL0
#defineBUTTON_STATE_HOVER(1<<1)
#defineBUTTON_STATE_PUSH(1<<2)
/**////////////////////////////////////////////////////////////////////////////////CMyComboBox
CMyComboBox::CMyComboBox():m_active(false),
m_normal_id(0),
m_hover_id(0),
m_push_id(0),
m_button_state(BUTTON_STATE_NORMAL)
...{
}
CMyComboBox::CMyComboBox(unsignedintnormal_id,
unsignedinthover_id,
unsignedintpush_id):
m_active(false),
m_normal_id(normal_id),
m_hover_id(hover_id),
m_push_id(push_id),
m_button_state(BUTTON_STATE_NORMAL)
...{
}
CMyComboBox::~CMyComboBox()
...{
}
BEGIN_MESSAGE_MAP(CMyComboBox,CComboBox)
//{{AFX_MSG_MAP(CMyComboBox)
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
ON_WM_TIMER()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/**////////////////////////////////////////////////////////////////////////////////CMyComboBoxmessagehandlers
voidCMyComboBox::PreSubclassWindow()
...{
CRectrc;
GetWindowRect(&rc);
rc.left-=2;
rc.top-=15;
rc.bottom-=23;
rc.right-=8;
MoveWindow(&rc);
ModifyStyle(0,BS_OWNERDRAW);
CComboBox::PreSubclassWindow();
}
void
CMyComboBox::OnPaint()
...{
CRectrc;
CDC*pDC;
Default();
pDC=GetDC();
GetClientRect(rc);
if(m_active)
pDC->Draw3dRect(rc,RGB(78,108,133),RGB(78,108,133));
else
pDC->Draw3dRect(rc,RGB(126,157,185),RGB(126,157,185));
//填充掉阴影
rc.DeflateRect(1,1);
pDC->Draw3dRect(rc,RGB(255,255,255),RGB(255,255,255));
//填充掉原来的按钮
rc.left+=(rc.Width()-18);
rc.DeflateRect(1,1);
pDC->Draw3dRect(rc,RGB(255,255,255),RGB(255,255,255));
DrawButton(pDC);
ReleaseDC(pDC);
}
voidCMyComboBox::OnMouseMove(UINTnFlags,CPointpoint)
...{
m_draw=true;
SetTimer(1,10,NULL);
OnTimer(1);
CComboBox::OnMouseMove(nFlags,point);
}
void
CMyComboBox::OnTimer(UINTnIDEvent)
...{
POINTpt;
CRectrc,rc_button;
GetCursorPos(&pt);
GetWindowRect(&rc);
rc_button=rc;
rc_button.left+=rc_button.Width()-17;
if(rc_button.PtInRect(pt))
...{
if(m_button_state!=BUTTON_STATE_PUSH)
m_button_state=BUTTON_STATE_HOVER;
}
else
m_button_state=BUTTON_STATE_NORMAL;
if(rc.PtInRect(pt))
...{
m_active=true;
if(m_draw)
...{
m_draw=false;
Invalidate();
}
}
else
...{
KillTimer(1);
m_active=false;
m_button_state=0;
Invalidate();
}
CComboBox::OnTimer(nIDEvent);
}
void
CMyComboBox::DrawButton(CDC*pDC)
...{
if(m_normal_id==0||m_hover_id==0||m_push_id==0)
return;
CDCMemDC;
CBitmapbitmap;
CRectrc;
GetWindowRect(&rc);
MemDC.CreateCompatibleDC(pDC);
if(m_button_state==BUTTON_STATE_NORMAL)
...{
bitmap.LoadBitmap(m_normal_id);
}
elseif(m_button_state==BUTTON_STATE_HOVER)
...{
bitmap.LoadBitmap(m_hover_id);
}
else
...{
bitmap.LoadBitmap(m_push_id);
}
MemDC.SelectObject(&bitmap);
pDC->BitBlt(rc.Width()-17,3,15,16,&MemDC,0,0,SRCCOPY);
}
voidCMyComboBox::OnLButtonDown(UINTnFlags,CPointpoint)
...{
m_button_state=BUTTON_STATE_PUSH;
Invalidate();
CComboBox::OnLButtonDown(nFlags,point);
}
voidCMyComboBox::OnLButtonUp(UINTnFlags,CPointpoint)
...{
m_button_state=BUTTON_STATE_HOVER;
Invalidate();
CComboBox::OnLButtonUp(nFlags,point);
}
分享到:
相关推荐
android完美下拉框控件android完美下拉框控件android完美下拉框控件android完美下拉框控件
QTableView添加复选框,下拉框控件
ListCtrl控件和下拉框,编辑框等控件组合使用ListCtrl控件和下拉框,编辑框等控件组合使用ListCtrl控件和下拉框,编辑框等控件组合使用ListCtrl控件和下拉框,编辑框等控件组合使用ListCtrl控件和下拉框,编辑框等...
用C#编写的一个下拉框控件,展开后内部可以有树型结构,对应WINFORM程序特别有用.
asp.net C# 实现的可以输入的 dropdownlist 控件。
自定义表头,添加复选框和下拉选项框
VB下拉框控件 网格控件应用实例,一个基于VB的网格下拉框控件,也就是让下拉框拉出的不是列表式数据,而是表格形式的数据,点击表格中的任意格数据,即可选中数据,换换形式,或许更新颖。
使用java swing编写的日期下拉框控件,可以在swing开发中使用,还有对两个日期的先后进行判断的工具类,有详细的使用说明。
asp.net WEB 多选下拉框控件源码
增强型的FlexComboBox控件,一款VB下拉框控件,带图标,支持模糊查找,模拟下拉框提示等功能,英文版,附上了源代码,便于二次开发和学习研究。
多选下拉框控件源码 项目描述 自定义一个多选下拉框控件 该控件实现了下拉框选项中可以多项选择, 全选功能。 控件开源,欢迎感兴趣的用户下载学习。
自己写的一个模仿QQ登陆窗体的下拉框 基本功能都已实现 有动画效果 内附使用说明 工具VS2010 你值得拥有 ------------------------------------------------------------------------------------------------- ...
bootstrap的多选下拉框控件,通过对多选框的渲染,在下拉框中实现多选
ios下拉框控件
ASP.NET多选下拉框自定义控件,采用Ajax方式多选下拉框
类似Google的下拉框控件实现方法,主要使用的javascript+xml技术; 进入下面地址可以马上体验,比如输入a,m等字符; http://218.108.38.56/mygoogle/mygoogle.html 博客有描述文章 ...
该资源为已完成的拉框参数联动查询模板、饼图联动饼图模板,适配FR10.0版本、可直接下载学习使用。
支持多选的下拉框控件。控件继承自ComboBox,下拉框里放的是CheckedListBox
Jquery可编辑下拉框控件,web开发非常实用,有多个功能设置