📄 imagelistbox.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 + -