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 + -
显示快捷键?