📄 coollistctrl.cpp
字号:
//画背景
m_MemDC.BitBlt(m_screenRect.left,m_screenRect.top,m_screenRect.Width(),m_screenRect.Height(),
m_pBackDC,m_pBkImageRect->left,m_pBkImageRect->top,SRCCOPY);
//创建并且设置字体
pOldFont = (CFont*)m_MemDC.SelectObject(font);
//画标题文字
m_MemDC.SetBkMode(TRANSPARENT);
m_MemDC.SetTextColor(m_TextColor);
CRect TempRect;
//绘制列表条目文字
for(int i = m_iHead,j = AREA_LIST_SLIDER_0 ;i<=m_iTail;i++,j++)
{
GetAppointedRect(j,&TempRect);
if(m_iCurTextID == i)
{
DrawSemiTransparentRect(&m_MemDC,TempRect,m_SeledTransColor);//半透明
m_MemDC.SetTextColor(m_SeledTxtColor);
}
else
{
DrawSemiTransparentRect(&m_MemDC,TempRect,m_TransColor);//半透明
m_MemDC.SetTextColor(m_TextColor);
}
m_MemDC.DrawText(m_pItemText.GetAt(i),TempRect,DT_SINGLELINE|DT_VCENTER|DT_CENTER);
}
memDC.CreateCompatibleDC(pDC);
pOldBmp = memDC.SelectObject(m_pButtonBmp);
//绘制绘制滑竿上按纽
GetAppointedRect(AREA_LIST_SLIDER_UP,&TempRect);
if(m_iCurFocusBtn==FOCUS_UPBTN)
{
::TransparentImage(m_MemDC.m_hDC,TempRect.left,TempRect.top,TempRect.Width(),TempRect.Height(),
memDC.m_hDC,slideWid,0,slideWid,slideWid,RGB(255,0,255));//图片是横放的
}
else
{
::TransparentImage(m_MemDC.m_hDC,TempRect.left,TempRect.top,TempRect.Width(),TempRect.Height(),
memDC.m_hDC,0,0,slideWid,slideWid,RGB(255,0,255));//图片是横放的
}
//绘制绘制滑竿下按纽
GetAppointedRect(AREA_LIST_SLIDER_DOWN,&TempRect);
if(m_iCurFocusBtn==FOCUS_DOWNBTN)
{
::TransparentImage(m_MemDC.m_hDC,TempRect.left,TempRect.top,TempRect.Width(),TempRect.Height(),
memDC.m_hDC,slideWid*3,0,slideWid,slideWid,RGB(255,0,255));//图片是横放的
}
else
{
::TransparentImage(m_MemDC.m_hDC,TempRect.left,TempRect.top,TempRect.Width(),TempRect.Height(),
memDC.m_hDC,2*slideWid,0,slideWid,slideWid,RGB(255,0,255));//图片是横放的
}
//绘制滑竿半透明可滑动区域
GetAppointedRect(AREA_LIST_SLIDER,&TempRect);
DrawSemiTransparentRect(&m_MemDC,TempRect,m_TransColor);//半透明
//绘制小滑块
if(m_iCurFocusBtn==FOCUS_SLIDER)
{
::TransparentImage(m_MemDC.m_hDC,m_SliderRect.left,m_SliderRect.top,m_SliderRect.Width(),m_SliderRect.Height(),
memDC.m_hDC,slideWid*5,0,slideWid,slideWid,RGB(255,0,255));//图片是横放的
}
else
{
::TransparentImage(m_MemDC.m_hDC,m_SliderRect.left,m_SliderRect.top,m_SliderRect.Width(),m_SliderRect.Height(),
memDC.m_hDC,slideWid*4,0,slideWid,slideWid,RGB(255,0,255));//图片是横放的
}
//绘制边框:灰色
/*CPen pen( PS_SOLID, 1, m_BorderColor );
CPen *pOldPen = m_MemDC.SelectObject( &pen );
m_MemDC.MoveTo(m_screenRect.left,m_screenRect.top);
m_MemDC.LineTo(m_screenRect.right-1,m_screenRect.top);
m_MemDC.LineTo(m_screenRect.right-1,m_screenRect.bottom-1);
m_MemDC.LineTo(m_screenRect.left,m_screenRect.bottom-1);
m_MemDC.LineTo(m_screenRect.left,m_screenRect.top);
m_MemDC.MoveTo(m_screenRect.right-slideWid,m_screenRect.top);
m_MemDC.LineTo(m_screenRect.right-slideWid,m_screenRect.bottom);
m_MemDC.SelectObject( pOldPen );
pen.DeleteObject();*/
memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
pDC->BitBlt(m_screenRect.left,m_screenRect.top,m_screenRect.Width(),m_screenRect.Height(),&m_MemDC,0,0,SRCCOPY);
}
void CCoolListCtrl::OnPaint()
{
CPaintDC dc(this);
if(!m_bOnceFlag)
{
OnceCode(&dc);
m_bOnceFlag = !m_bOnceFlag;
}
DrawOneScreen(&dc);
}
BOOL CCoolListCtrl::DestroyWindow()
{
m_MemDC.SelectObject(pOldFont);
font->DeleteObject();
delete font;
font = NULL;
m_MemDC.SelectObject(pOldTempBmp);
m_MemDC.DeleteDC();
TempBmp.DeleteObject();
return CStatic::DestroyWindow();
}
void CCoolListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
INT iSeledArea = -1;
iSeledArea = GetCurSeledRect(point);
if( iSeledArea>=AREA_LIST_SLIDER_0 && iSeledArea<=AREA_LIST_SLIDER_7 )//列表
{
m_iCurTextID = m_iHead + iSeledArea;
m_iCurFocusBtn = -1;
::InvalidateRect(this->m_hWnd,NULL,false);
}
else if(iSeledArea>=AREA_LIST_SLIDER_UP&&iSeledArea<=AREA_LIST_SLIDER_DOWN)//滑块上下按纽
{
if(iSeledArea == AREA_LIST_SLIDER_UP)
{
if(m_iHead>0)
{
m_iHead --;
m_iTail --;
}
m_iCurFocusBtn = FOCUS_UPBTN;
SetSliderPercent(m_iHead);
}
else if(iSeledArea == AREA_LIST_SLIDER_DOWN)
{
if(m_iTail<m_iItemTotal-1)
{
m_iHead ++;
m_iTail ++;
}
SetSliderPercent(m_iHead);
m_iCurFocusBtn = FOCUS_DOWNBTN;
}
GetSliderRectFromPercent(m_fSliderPercent,&m_SliderRect);
::InvalidateRect(this->m_hWnd,NULL,false);
}
else if(iSeledArea == AREA_LIST_SLIDER)//滑竿区域
{
m_bIsMouseDownFlag = true;
CRect rect;
GetAppointedRect(AREA_LIST_SLIDER,&rect);
m_SliderY = point.y;
//求出按下的点与SLIDER区域顶点相对百分比
m_fSliderPercent = (float)((float)(m_SliderY - rect.top))/((float)rect.Height());
if(m_fSliderPercent<0.0)
m_fSliderPercent=0.0;
else if(m_fSliderPercent>1.0)
m_fSliderPercent = 1.0;
GetSliderRectFromPercent(m_fSliderPercent,&m_SliderRect);
m_iCurFocusBtn = FOCUS_SLIDER;
GetHeadTailFromPercent(m_fSliderPercent,&m_iHead,&m_iTail);
}
CStatic::OnLButtonDown(nFlags, point);
}
//通过百分比获得小滑块的位置矩形
void CCoolListCtrl::GetSliderRectFromPercent(float fPercent,CRect *pRect)
{
CRect rect;
GetAppointedRect(AREA_LIST_SLIDER,&rect);
int iBaseX,iBaseY;
iBaseX = rect.left;
iBaseY = rect.top;
float ftemp = fPercent;
if(ftemp<0.0)
ftemp = 0.0;
else if(ftemp>1.0)
ftemp = 1.0;
float delta_y = ftemp*(float)rect.Height();//相对于顶部的增量
pRect->left = iBaseX;
pRect->top = iBaseY + delta_y;
pRect->right = rect.right;
pRect->bottom = pRect->top + rect.Width();
pRect->OffsetRect(0,-rect.Width()/2);//移动半截
}
void CCoolListCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
//处理滑竿上的小滑块
if(m_bIsMouseDownFlag)
{
CRect rect;
GetAppointedRect(AREA_LIST_SLIDER,&rect);
m_SliderY = point.y;
//求出按下的点与SLIDER区域顶点相对百分比
m_fSliderPercent = (float)((float)(m_SliderY - rect.top))/((float)rect.Height());
if(m_fSliderPercent<0.08)
m_fSliderPercent=0.08;
else if(m_fSliderPercent>0.93)
m_fSliderPercent = 0.93;
GetSliderRectFromPercent(m_fSliderPercent,&m_SliderRect);
m_iCurFocusBtn = FOCUS_SLIDER;
GetHeadTailFromPercent(m_fSliderPercent,&m_iHead,&m_iTail);
::InvalidateRect(this->m_hWnd,NULL,false);
}
CStatic::OnMouseMove(nFlags, point);
}
void CCoolListCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
if(m_bIsMouseDownFlag)
{
m_bIsMouseDownFlag = false;
m_iCurFocusBtn = -1;
}
CStatic::OnLButtonUp(nFlags, point);
}
//获得条目总数
INT CCoolListCtrl::GetItemTotal()
{
return m_iItemTotal;
}
//根据百分比得到头和尾
BOOL CCoolListCtrl::GetHeadTailFromPercent(float fPercent,int *iHead,int *iTail)
{
if(m_iItemTotal<ONEPAGE_NUM)
{
*iHead = 0;
*iTail = ONEPAGE_NUM - 1;
return true;
}
*iHead = (int)( fPercent*((float)m_iItemTotal) );
if(*iHead>m_iItemTotal-ONEPAGE_NUM)
*iHead = m_iItemTotal-ONEPAGE_NUM;
*iTail = *iHead + ONEPAGE_NUM - 1;
return true;
}
//通过头标志设置SLIDER的位置
BOOL CCoolListCtrl::SetSliderPercent(int iHead)
{
m_fSliderPercent = ((float)(iHead+4))/((float)m_iItemTotal);//+2是因为一幕为8,一半为4
return true;
}
//获得当前选择的条目字符串
LPTSTR CCoolListCtrl::GetCurSeledStr()
{
return m_pItemText.GetAt(m_iCurTextID);
}
//设置颜色
BOOL CCoolListCtrl::SetColor(COLORREF TxtColor,COLORREF SeledTxtColor,
COLORREF TransColor,COLORREF SeledTransColor,COLORREF BorderColor)
{
m_TextColor = TxtColor;
SeledTxtColor = m_SeledTxtColor;
m_TransColor = TransColor;
m_SeledTransColor =SeledTransColor ;
m_BorderColor = BorderColor;
return true;
}
//获得当前选中的条目
int CCoolListCtrl::GetCurSeledItem()
{
return m_iCurTextID;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -