ownerdrawnedcombo.cpp
来自「用bcg库编写的java IDE 源码」· C++ 代码 · 共 151 行
CPP
151 行
// OwnerDrawnedCombo.cpp : implementation file
//
#include "stdafx.h"
#include "VisualJava.h"
#include "OwnerDrawnedCombo.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// COwnerDrawnedCombo
COwnerDrawnedCombo::COwnerDrawnedCombo()
{
}
COwnerDrawnedCombo::~COwnerDrawnedCombo()
{
}
BEGIN_MESSAGE_MAP(COwnerDrawnedCombo, CComboBox)
//{{AFX_MSG_MAP(COwnerDrawnedCombo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COwnerDrawnedCombo message handlers
//CBS_OWNERDRAWFIXED
void COwnerDrawnedCombo::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType == ODT_COMBOBOX);
COwnerDrawnedCombo::__color* pcolor = (COwnerDrawnedCombo::__color*)
GetItemData((int)lpDrawItemStruct->itemID);
int nCount = GetCount();
int nIndex = (int)lpDrawItemStruct->itemID;
if(nIndex<nCount&&nIndex>=0)
{
LPCTSTR lpszText = (LPCTSTR) lpDrawItemStruct->itemData;
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
// Save these value to restore them when done drawing.
COLORREF crOldTextColor = dc.GetTextColor();
COLORREF crOldBkColor = dc.GetBkColor();
CBrush brush;
brush.CreateSolidBrush(pcolor->m_nColor);
CBrush *pBrush = dc.SelectObject(&brush);
CPen pen;
pen.CreatePen(PS_DASH,1,RGB(0,0,0));
CPen* pPen = dc.SelectObject(&pen);
CRect rc(lpDrawItemStruct->rcItem);
rc.DeflateRect(2,2,2,2);
dc.Rectangle(&rc);
dc.SelectObject(pBrush);
dc.SelectObject(pPen);
pBrush->DeleteObject();
pPen->DeleteObject();
CString strText;
GetLBText(nIndex,strText);
if(strText.Compare(_T("custom")) == 0)
{
CFont font;
font.CreatePointFont(100,"Times New Roman");
CFont* pOldFont = dc.SelectObject(&font);
CSize sz = dc.GetTextExtent("custom");
int xShrink = (rc.Width()-sz.cx)/2;
int yShrink = (rc.Height()-sz.cy)/2;
rc.DeflateRect(xShrink,yShrink,xShrink,yShrink);
dc.SetTextColor(0xffffff);
int mode = dc.SetBkMode(TRANSPARENT);
dc.DrawText("custom",&rc,DT_CENTER);
//dc.TextOut(rc.left,rc.top,"custom");
dc.SelectObject(pOldFont);
dc.SetBkMode(mode);
}
// Reset the background color and the text color back to their
// original values.
dc.SetTextColor(crOldTextColor);
dc.SetBkColor(crOldBkColor);
dc.Detach();
}
/*
// Draw the text.
dc.DrawText(
lpszText,
strlen(lpszText),
&lpDrawItemStruct->rcItem,
DT_CENTER|DT_SINGLELINE|DT_VCENTER);
*/
}
void COwnerDrawnedCombo::SetColorData(int nIndex, COLORREF nColor)
{
COwnerDrawnedCombo::__color* pcolor = new COwnerDrawnedCombo::__color;
pcolor->m_nColor = nColor;
SetItemData(nIndex,(DWORD)pcolor);
}
COLORREF COwnerDrawnedCombo::GetItemColor(int nIndex)
{
COwnerDrawnedCombo::__color* pcolor = (COwnerDrawnedCombo::__color*)GetItemData(nIndex);
return pcolor->m_nColor;
}
void COwnerDrawnedCombo::SelectColor(COLORREF crSel,DWORD nID)
{
int nCount = GetCount();
for(int I=0; I<nCount; I++)
{
COwnerDrawnedCombo::__color* pcolor = (COwnerDrawnedCombo::__color*)GetItemData(I);
if(pcolor->m_nColor == crSel)
{
SetCurSel(I);
//GetParent()->SendMessage(WM_COMMAND,MAKEWPARAM(nID,CBN_SELCHANGE),(LPARAM)m_hWnd);
return;
}
}
if(nCount>0)
{
COwnerDrawnedCombo::__color* pcolor = (COwnerDrawnedCombo::__color*)GetItemData(I-1);
pcolor->m_nColor = crSel;
SetCurSel(I-1);
//GetParent()->SendMessage(WM_COMMAND,MAKEWPARAM(nID,CBN_SELCHANGE),(LPARAM)m_hWnd);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?