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

📄 dlginputctrl.cpp

📁 用户管理系统
💻 CPP
字号:
// DlgInputCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "Kvip.h"
#include "DlgInputCtrl.h"
//#include "XCtrl\MemDC.H"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgInputCtrl

CDlgInputCtrl::CDlgInputCtrl()
{
 	m_cr3DFace              = ::GetSysColor(COLOR_3DFACE);
	m_cr3DHighLight         = ::GetSysColor(COLOR_3DHIGHLIGHT);
	m_cr3DShadow            = ::GetSysColor(COLOR_3DSHADOW);
	m_crBtnFace             = ::GetSysColor(COLOR_BTNFACE);
	m_crBtnShadow           = ::GetSysColor(COLOR_BTNSHADOW);
	m_crBtnText             = ::GetSysColor(COLOR_BTNTEXT);
	m_crGrayText            = ::GetSysColor(COLOR_GRAYTEXT);
	m_crHighLight           = ::GetSysColor(COLOR_HIGHLIGHT);
	m_crHighLightText       = ::GetSysColor(COLOR_HIGHLIGHTTEXT);
	m_crWindow              = ::GetSysColor(COLOR_WINDOW);
	m_crWindowText          = ::GetSysColor(COLOR_WINDOWTEXT);

	m_sTime = _T("");
}

CDlgInputCtrl::~CDlgInputCtrl()
{
   m_caBkColor.RemoveAll();
   m_caTxColor.RemoveAll();
   m_caName.RemoveAll();
}


BEGIN_MESSAGE_MAP(CDlgInputCtrl, CListCtrlBase)
	//{{AFX_MSG_MAP(CDlgInputCtrl)
	//ON_WM_DRAWITEM()
	//ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgInputCtrl message handlers



//id CDlgInputCtrl::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
//
//ListCtrl::OnDrawItem(nIDCtl, lpDrawItemStruct);
//

void CDlgInputCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your message handler code here and/or call default
	CRect rcItem, rcMask;
	CString sText;
	CBrush Brush;
//	CPen   Pen;
//	CPen   *pOldPen;
	COLORREF rcColor, rcBkColor;
    int x = 0;
	int nItem = lpDrawItemStruct->itemID;
	int nColumnSize = GetHeaderCtrl()->GetItemCount();

//取区间
    rcItem	= GetCellRect(nItem, 0, FALSE);
	CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
//画背景
    pDC->FillSolidRect(rcMask, GetBkColor());
    
	for (x=0; x<nColumnSize; x++)
      {
         rcItem	= GetCellRect(nItem, x, FALSE);
         sText = CListCtrl::GetItemText(nItem, x);
		 if(x == 0 && IsHighlight(nItem))
		 {
		   rcColor = m_crHighLightText;
		   rcBkColor = m_crHighLight;
		 }
         else
		 {
		   GetColorEx(sText, rcColor, rcBkColor);
		 }
         pDC->FillSolidRect(rcItem, rcBkColor);
		 pDC->SetTextColor(rcColor);
		 pDC->SetBkMode(TRANSPARENT);
         pDC->DrawText(sText, rcItem, DT_SINGLELINE | DT_CENTER | DT_VCENTER );
      }
}

CRect CDlgInputCtrl::GetCellRect(int nItem, int nColumn, BOOL outside)
{
	static CRect rectCell;

	// Get the height
    CListCtrl::GetItemRect(nItem, rectCell, LVIR_BOUNDS);
    LV_COLUMN column;
	column.mask = LVCF_WIDTH;        // Set the mask to only return the width

    for (int x=0; x<nColumn; x++)
    {
        column.iSubItem=1;
        CListCtrl::GetColumn(x, &column); // Get rect-edge (left/top)
        rectCell.left+=column.cx;
    }
    column.iSubItem=1;
    CListCtrl::GetColumn(nColumn, &column); // Get rect-edge (right/bottom)
    rectCell.right = rectCell.left + column.cx;

    if (!outside)
    {   //decrease 1 pixel
        rectCell.left++;    rectCell.right--;
        rectCell.top++;     rectCell.bottom--;
    }
	return rectCell;
}

//新增或修改
BOOL CDlgInputCtrl::Add(LPCSTR pName, COLORREF crTx, COLORREF crBk)
{
  for(int i = 0; i < m_caName.GetSize(); i++)
  {
	 if(pName == m_caName.GetAt(i))
	 {
	 m_caTxColor.SetAt(i, crTx);
	 m_caBkColor.SetAt(i, crBk);
	 return false;
	 }
  }//end for
  m_caName.Add(pName);
  m_caTxColor.Add(crTx);
  m_caBkColor.Add(crBk);
  return false;
}


BOOL CDlgInputCtrl::GetColorEx(LPCSTR pName, COLORREF &rcColor, COLORREF &rcBkColor)
{
  for(int i =0 ; i < m_caName.GetSize(); i++)
  {
	if(m_caName.GetAt(i) == pName)
	{
		rcColor = (COLORREF)m_caTxColor.GetAt(i);
		rcBkColor = (COLORREF)m_caBkColor.GetAt(i);
		return true;
	}
  }
  rcColor = GetTextColor();
  rcBkColor = GetBkColor();
  return false;
}
void CDlgInputCtrl::UpdateSubItem(int nItem, int nSubItem)
{
	ASSERT(nItem >= 0);
	ASSERT(nItem < GetItemCount());
	if ((nItem < 0) || nItem >= GetItemCount())
		return;
	ASSERT(nSubItem >= 0);
	ASSERT(nSubItem < GetHeaderCtrl()->GetItemCount());
	if ((nSubItem < 0) || nSubItem >= GetHeaderCtrl()->GetItemCount())
		return;

	CRect rect;
	if (nSubItem == -1)
	{
		GetItemRect(nItem, &rect, LVIR_BOUNDS);
	}
	else
	{
		GetSubItemRect(nItem, nSubItem, LVIR_BOUNDS, rect);
	}

	InvalidateRect(&rect);
	UpdateWindow();
}
BOOL CDlgInputCtrl::SetItemText(int nItem, int nSubItem, LPCTSTR lpszText)
{
	ASSERT(nItem >= 0);
	ASSERT(nItem < GetItemCount());
	if ((nItem < 0) || nItem >= GetItemCount())
		return FALSE;
	ASSERT(nSubItem >= 0);
	ASSERT(nSubItem < GetHeaderCtrl()->GetItemCount());
	if ((nSubItem < 0) || nSubItem >= GetHeaderCtrl()->GetItemCount())
		return FALSE;

	BOOL rc = CListCtrl::SetItemText(nItem, nSubItem, lpszText);

	UpdateSubItem(nItem, nSubItem);

	return rc;
}
BOOL CDlgInputCtrl::IsHighlight(int iItem)
{
//	DWORD dwStyle    = GetStyle();
	DWORD dwExStyle  = GetExtendedStyle();

	LV_ITEM lvi;
	lvi.mask = LVIF_IMAGE | LVIF_STATE;
	lvi.iItem = iItem;
	lvi.iSubItem = 0;
	lvi.stateMask = 0xFFFF;		// get all state flags
	GetItem(&lvi);
    if (lvi.state & LVIS_SELECTED)
	{
	  if (GetFocus() == this)
		return true;
	  else if(dwExStyle & LVS_EX_FULLROWSELECT)
		return true;
	}
  return false;
}

⌨️ 快捷键说明

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