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