⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wizbarcombobox1.cpp

📁 用bcg库编写的java IDE 源码
💻 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 + -