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

📄 imagelistbox.cpp

📁 这些源代码
💻 CPP
字号:
// ImageListBox.cpp : implementation file
//

#include "stdafx.h"
#include "Controls.h"
#include "ImageListBox.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CImageListBox

CImageListBox::CImageListBox()
{
	m_pImages = NULL;
}

CImageListBox::~CImageListBox()
{
}


BEGIN_MESSAGE_MAP(CImageListBox, CListBox)
	//{{AFX_MSG_MAP(CImageListBox)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CImageListBox message handlers

#define _FULLFOCUSRECT
#ifdef _FULLFOCUSRECT
void CImageListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	UINT nItem = lpDrawItemStruct->itemID;
	if (nItem == (UINT) -1)
		return;
	CDC dc;
	dc.Attach (lpDrawItemStruct->hDC);
	CBrush brush;

	CRect rc = lpDrawItemStruct->rcItem;

	brush.CreateSolidBrush (GetSysColor (lpDrawItemStruct->itemState & ODS_SELECTED ? COLOR_HIGHLIGHT : COLOR_WINDOW));
	dc.SetTextColor (GetSysColor (lpDrawItemStruct->itemState & ODS_SELECTED ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT));
	dc.FillRect (rc, &brush);
	dc.SetBkMode (TRANSPARENT);
	POSITION pos = m_ListData.FindIndex (nItem);
	LISTIMAGEDATA ld = m_ListData.GetAt (pos);
	if (lpDrawItemStruct->itemState & ODS_FOCUS)
		dc.DrawFocusRect (&rc);

	if (m_pImages != NULL)
	{
		IMAGEINFO ii;
		m_pImages->Draw (&dc, ld.nImage, CPoint(rc.left, rc.top), ILD_NORMAL);
		m_pImages->GetImageInfo(ld.nImage, &ii);
		rc.left += ii.rcImage.right - ii.rcImage.left;
	}
//
//	Add four pixels to the left margin to keep from
//	butting up against the wall or image.
//
	rc.left += 4;

	CSize sz = dc.GetTextExtent (ld.Text);
	rc.top += (rc.bottom - rc.top - sz.cy) / 2;

	dc.DrawText (ld.Text, &rc, DT_VCENTER);
	dc.Detach ();
}

#else

void CImageListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	UINT nItem = lpDrawItemStruct->itemID;
	if (nItem == (UINT) -1)
		return;
	CDC dc;
	dc.Attach (lpDrawItemStruct->hDC);
	CBrush brushWhite;
	CBrush brushSel;
	CRect rc = lpDrawItemStruct->rcItem;

	brushWhite.CreateSolidBrush (GetSysColor (COLOR_WINDOW));
	brushSel.CreateSolidBrush (GetSysColor (lpDrawItemStruct->itemState & ODS_SELECTED ? COLOR_HIGHLIGHT : COLOR_WINDOW));

	dc.SetTextColor (GetSysColor (lpDrawItemStruct->itemState & ODS_SELECTED ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT));
	dc.FillRect (rc, &brushWhite);
	dc.SetBkMode (TRANSPARENT);

	POSITION pos = m_ListData.FindIndex (nItem);
	LISTIMAGEDATA ld = m_ListData.GetAt (pos);

	if (m_pImages != NULL)
	{
		IMAGEINFO ii;
		m_pImages->Draw (&dc, ld.nImage, CPoint(rc.left, rc.top), lpDrawItemStruct->itemState & ODS_SELECTED ? ILD_BLEND : ILD_TRANSPARENT);
		m_pImages->GetImageInfo(ld.nImage, &ii);
		rc.left += ii.rcImage.right - ii.rcImage.left;
	}
//
//	Add four pixels to the left margin to keep from
//	butting up against the wall or image.
//
	rc.left += 4;
	dc.FillRect (rc, &brushSel);
	if (lpDrawItemStruct->itemState & ODS_FOCUS)
		dc.DrawFocusRect (&rc);

	if (lpDrawItemStruct->itemState & ODS_FOCUS)
		dc.DrawFocusRect (&rc);

	CSize sz = dc.GetTextExtent (ld.Text);
	rc.top += (rc.bottom - rc.top - sz.cy) / 2;

	dc.DrawText (ld.Text, &rc, DT_VCENTER);
	dc.Detach ();
}
#endif	//	_FULLFOCUSRECT

void CImageListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
{
	if (m_pImages != NULL)
	{
		IMAGEINFO ii;
		m_pImages->GetImageInfo(lpMeasureItemStruct->itemID, &ii);
		lpMeasureItemStruct->itemHeight = ii.rcImage.bottom - ii.rcImage.top + 4;
	}
}

void CImageListBox::SetImageList(CImageList *pImages)
{
	m_pImages = pImages;
}

int CImageListBox::AddItem(LISTIMAGEDATA &ld)
{
	AddString ("");
	return (m_ListData.AddTail (ld) == NULL ? -1 : 0);
}

/*
 */

/*
 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -