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

📄 xlistbox.cpp

📁 Smartphone手机阅读软件
💻 CPP
字号:
#include "stdafx.h"
#include "XListBox.h"

int CXListBox::AddItem(LPCTSTR lpszItem, COLORREF rgb)
{
	int nItem = AddString(lpszItem);
	if (nItem >= 0)
		SetItemData(nItem, rgb);
	return nItem;
}

int CXListBox::InsertItem(int nIndex, LPCTSTR lpszItem, COLORREF rgb)
{
	int nItem = ((CListBox*)this)->InsertString(nIndex,lpszItem);
	if (nItem >= 0)
		SetItemData(nItem, rgb);
	return nItem;
}
LRESULT CXListBox::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
	CClientDC dc(m_hWnd);   //DON'T USE CPAINTDC
	int nIndex = GetCurSel();
	if(nIndex == LB_ERR)
		return (DWORD)-1;
	
	CRect rcItem,rcWnd;
	GetItemRect(nIndex,&rcItem);
	GetClientRect(&rcWnd);
	
	CDC dcMem;
	dcMem.CreateCompatibleDC(dc);
	CBitmap bmpMem;
	bmpMem.CreateCompatibleBitmap(dc,rcWnd.Width(),rcWnd.Height());
	dcMem.SelectBitmap(bmpMem);
	
	//Draw border when getting focus 
	DWORD dwStyle = GetStyle();
	if(!(dwStyle & WS_BORDER))
		rcWnd.right ++;
	dcMem.SetBkMode(TRANSPARENT);
	int dcSave = dcMem.SaveDC();
	if(m_hWnd == ::GetFocus())
		dcMem.SelectStockPen(BLACK_PEN);
	else
		dcMem.SelectStockPen(NULL_PEN);
	dcMem.Rectangle(rcWnd);
	dcMem.RestoreDC(dcSave);

	//get text
	CString szText;
	GetText(nIndex,szText);
	
	//Draw focus background
	COLORREF cfItem = (COLORREF)GetItemData(nIndex);
	CBrush br;
	br.CreateSolidBrush(cfItem);
	CRect rect(rcItem);
	CSize size;
	dc.GetTextExtent(szText,szText.GetLength(),&size);
//	rect.right = rect.right * 9 / 10;
	rect.DeflateRect(2,2,2,2);
	dcMem.FillRect(rect,br);

	//draw focus rect of control
	if(m_bEnableBorder)
	{
		dcMem.DrawFocusRect(&rect);
		rect.InflateRect(1,1,1,1);
		CPen Pen;
		Pen.CreatePen(PS_SOLID,1,RGB(0,128,128));
		HPEN hpen = dcMem.SelectPen(Pen.m_hPen);
		HBRUSH hBrush = dcMem.SelectStockBrush(NULL_BRUSH);
		dcMem.Rectangle(&rect);
		dcMem.SelectBrush(hBrush);
		Pen.DeleteObject();
		dcMem.SelectPen(hpen);
		rect.left += 2;
	}
	
	//Set text color ,text font and Draw text
	COLORREF crText = dcMem.SetTextColor(cfItem^RGB(255,255,255)); 
	if ((cfItem == RGB(128,128,128)) || (cfItem == RGB(128,128,0)))
		dcMem.SetTextColor(RGB(255,255,255)); 

	dcMem.DrawText(szText, -1, &rect, DT_SINGLELINE|DT_LEFT|DT_VCENTER);
	dcMem.SetTextColor(crText);
	
	dc.BitBlt(rcWnd.left,rcWnd.top,rcWnd.Width(),rcWnd.Height(),dcMem,0,0,SRCCOPY);
	dcMem.DeleteDC();
	bmpMem.DeleteObject();
	return 0;
}

void CXListBox::EnableRGBBorder(BOOL nEnabled)
{
	m_bEnableBorder = nEnabled;
//	Invalidate();
}

⌨️ 快捷键说明

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