📄 wizbarcombobox1.cpp
字号:
// WizBarComboBox1.cpp : implementation file
//
#include "stdafx.h"
#include "VisualJava.h"
#include "WizBarComboBox1.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CWizBarComboBox
IMPLEMENT_SERIAL(CWizBarComboBox,CCustomizableComboBox,1)
CWizBarComboBox::CWizBarComboBox()
{
m_pImageList = NULL;
ZeroMemory(&m_stateInfo,sizeof(xi));
m_nCurState = 0;
strcpy(m_stateInfo[2].m_logFont.lfFaceName ,"Courier");
m_stateInfo[2].m_logFont.lfWeight = 10;
m_stateInfo[2].m_crColor = RGB(192,192,192);//gray
}
CWizBarComboBox::~CWizBarComboBox()
{
}
BEGIN_MESSAGE_MAP(CWizBarComboBox, CCustomizableComboBox)
//{{AFX_MSG_MAP(CWizBarComboBox)
ON_WM_CREATE()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWizBarComboBox message handlers
int CWizBarComboBox::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CCustomizableComboBox::OnCreate(lpCreateStruct) == -1)
return -1;
strcpy(m_stateInfo[0].m_logFont.lfFaceName,"Arial");
m_stateInfo[0].m_logFont.lfWeight = FW_BOLD;
m_stateInfo[0].m_logFont.lfHeight = -MulDiv(10, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), 90);
m_stateInfo[0].m_logFont.lfWidth = -MulDiv(10, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSX), 72*2);
m_stateInfo[0].m_crColor = 0;
//COLOR_BTNTEXT
strcpy(m_stateInfo[1].m_logFont.lfFaceName,"Arial");
m_stateInfo[1].m_logFont.lfWeight = FW_BOLD;
m_stateInfo[1].m_logFont.lfHeight = -MulDiv(10, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), 90);
m_stateInfo[1].m_logFont.lfWidth = -MulDiv(10, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSX), 72*2);
m_stateInfo[1].m_crColor = 0;//::GetSysColor(COLOR_GRAYTEXT);//gray
return 0;
}
void CWizBarComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
//CCustomizableComboBox::DrawItem(lpDrawItemStruct);
ASSERT(lpDrawItemStruct->CtlType == ODT_COMBOBOX);
int nIndex = lpDrawItemStruct->itemID;
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
int cx = 0, cy = 0;
int iImage = -1;
if(nIndex == -1)return;
CString strItem;
GetLBText(nIndex,strItem);
CRect rcText(lpDrawItemStruct->rcItem);
CFont font;
VERIFY(font.CreateFontIndirect(&m_stateInfo[m_nCurState].m_logFont)); // create the font
CFont* pOldFont = dc.SelectObject(&font);
if(m_pImageList != NULL)
{
idata* data = (idata*)CCustomizableComboBox::GetItemDataPtr(nIndex);
iImage = data->m_iImage;
if(iImage != -1)
{
::ImageList_GetIconSize(*m_pImageList, &cx, &cy);
rcText.DeflateRect(cx,0,0,0);
}
}
// Save these value to restore them when done drawing.
COLORREF crOldTextColor = dc.GetTextColor();
COLORREF crOldBkColor = dc.GetBkColor();
int nMode = dc.SetBkColor(TRANSPARENT);
//not responsible for drawing selection
if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
(lpDrawItemStruct->itemState & ODS_SELECTED))
{
dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
dc.FillSolidRect(&rcText, ::GetSysColor(COLOR_HIGHLIGHT));
}
else
{
//CBrush backgrndBrush(RGB(192,192,192));
//dc.Rectangle(&lpDrawItemStruct->rcItem);
//backgrndBrush.DeleteObject();
dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
dc.SetTextColor(m_stateInfo[m_nCurState].m_crColor);
}
dc.DrawText(strItem,strItem.GetLength(),&rcText,
DT_LEFT|DT_SINGLELINE/*|DT_VCENTER*/);
if(iImage != -1)
m_pImageList->Draw(&dc,iImage,CPoint(rcText.left-cx,rcText.top),ILD_TRANSPARENT);
// Reset the background color and the text color back to their
// original values.
dc.SetTextColor(crOldTextColor);
dc.SetBkColor(crOldBkColor);
dc.SetBkMode(nMode);
dc.SelectObject(pOldFont);
font.DeleteObject();
dc.Detach();
}
void CWizBarComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
/*
ASSERT(lpMeasureItemStruct->CtlType == ODT_COMBOBOX);
if(lpMeasureItemStruct->itemID != (UINT) -1)
{
LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
ASSERT(lpszText != NULL);
CSize sz;
CDC* pDC = GetDC();
sz = pDC->GetTextExtent(lpszText);
ReleaseDC(pDC);
lpMeasureItemStruct->itemHeight = 2*sz.cy;
} */
}
void* CWizBarComboBox::GetItemDataPtr(int nIndex)
{
idata* data = (idata*)CCustomizableComboBox::GetItemDataPtr(nIndex);
return data->m_pData;
}
void CWizBarComboBox::SetItemDataPtr(int nIndex,void* pData)
{
idata* data = (idata*)CCustomizableComboBox::GetItemDataPtr(nIndex);
data->m_pData = pData;
}
DWORD CWizBarComboBox::GetItemData(int nIndex)
{
idata* data = (idata*)CCustomizableComboBox::GetItemData(nIndex);
return (DWORD)data->m_pData;
}
void CWizBarComboBox::SetItemData(int nIndex,DWORD dwItemData)
{
idata* data = (idata*)CCustomizableComboBox::GetItemData(nIndex);
data->m_pData = (void*)dwItemData;
}
int CWizBarComboBox::AddString(LPCTSTR lszpString,int iImage /*= -1*/)
{
int index = CCustomizableComboBox::AddString(lszpString);
if(index != CB_ERR)
{
idata* data = new idata;
data->m_iImage = iImage;
CCustomizableComboBox::SetItemData(index,(DWORD)data);
}return index;
}
int CWizBarComboBox::InsertString(int nIndex,LPCTSTR lszpString,int iImage /*=-1*/)
{
int index = CCustomizableComboBox::InsertString(nIndex,lszpString);
if(index != CB_ERR)
{
idata* data = new idata;
data->m_iImage = iImage;
CCustomizableComboBox::SetItemData(index,(DWORD)data);
}return index;
}
int CWizBarComboBox::DeleteString(UINT nIndex)
{
ASSERT(nIndex<(UINT)GetCount());
idata* data = (idata*)CCustomizableComboBox::GetItemData(nIndex);
delete data;
return CCustomizableComboBox::DeleteString(nIndex);
}
void CWizBarComboBox::ResetContent()
{
int count = GetCount();
while(count)
{
DeleteString(0);
--count;
}
}
void CWizBarComboBox::SetState(int state)
{
m_nCurState = state;
Invalidate();
}
void CWizBarComboBox::OnDestroy()
{
CCustomizableComboBox::OnDestroy();
ResetContent();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -