(CDC* pDC);
afx_msg void OnPaint();
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnSelchange();
afx_msg void OnSelendok();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif // !defined(_BS_BSCOLORCB)
///////////////////////////////////////////////////////////////CBSColorComboBox的实现文件;
#include "stdafx.h"
#include "BSColorComboBox.h"
CBSColorComboBox::CBSColorComboBox()
{
//当前鼠标是否在对象上
m_bOverControl = false;
//小图标尺寸
iIconX = ::GetSystemMetrics(SM_CXSMICON);
iIconY = ::GetSystemMetrics(SM_CYSMICON);
}
CBSColorComboBox::~CBSColorComboBox()
{
while(!m_crItem.IsEmpty())
{
LPBSCBITEM lpItem = m_crItem.RemoveHead();
delete lpItem;
}
}
BOOL CBSColorComboBox::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
{
DWORD dw = dwStyle;
if( !CComboBox::Create(dw, rect, pParentWnd, nID) )
return false;
CFont * font = CFont::FromHandle((HFONT)::GetStockObject(DEFAULT_GUI_FONT));
SetFont(font);
return true;
}
IMPLEMENT_DYNCREATE(CBSColorComboBox, CComboBox)
BEGIN_MESSAGE_MAP(CBSColorComboBox, CComboBox)
//{{AFX_MSG_MAP(CBSColorComboBox)
ON_WM_ERASEBKGND()
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_MOUSEMOVE()
ON_CONTROL_REFLECT(CBN_SELCHANGE, OnSelchange)
ON_CONTROL_REFLECT(CBN_SELENDOK, OnSelendok)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CBSColorComboBox::InitBSColorCB(void)
{
int iMinColor = COLOR_SCROLLBAR,
iMaxColor = COLOR_BTNHIGHLIGHT;
if(WINVER > = 0x0400)
iMaxColor = COLOR_INFOBK;
if(WINVER > = 0x0500)
iMaxColor = 28;
//初始化CB颜色列表框的Item(常见的SysColor值)
for(int iLoop = iMinColor; iLoop <= iMaxColor; ++iLoop)
{
LPBSCBITEM lpItem = new BSCBITEM;
lpItem-> iIndex = AddString(strColorName[iLoop]);
lpItem-> crColor = ::GetSysColor(iLoop);
lpItem-> lpCaption = strColorName[iLoop];
//
if(m_crItem.IsEmpty())
m_crItem.AddHead(lpItem);
else
m_crItem.AddTail(lpItem);
}
//该Item是为了用户自定义颜色而设置
LPBSCBITEM lpItem = new BSCBITEM;
lpItem-> iIndex = AddString("More Colors");
lpItem-> crColor = RGB(213, 233, 249);
lpItem-> lpCaption = "More Colors";
if(m_crItem.IsEmpty())
m_crItem.AddHead(lpItem);
else
m_crItem.AddTail(lpItem);
//初始化当前颜色
m_crColor = m_crItem.GetHead()-> crColor;
}
BOOL CBSColorComboBox::OnEraseBkgnd(CDC* pDC)
{
ASSERT(pDC-> GetSafeHdc());
return false;
}
void CBSColorComboBox::OnPaint()
{
CPaintDC dc(this);
OnCBPaint(&dc);
}
void CBSColorComb
|