www.pudn.com > SDKSkin.rar > SkinGroupBox.h
// SkinGroupBox.h
#ifndef _SKINGROUPBOX_ONCE_
#define _SKINGROUPBOX_ONCE_
class SkinGroupBox
{
public:
SkinGroupBox()
{
}
LRESULT CALLBACK SkinGroupBoxProc(SKINMSG &skMsg)
{
switch(skMsg._msg)
{
case WM_ERASEBKGND:
return TRUE;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDc = BeginPaint(skMsg._hWnd,&ps);
PaintItem(hDc,skMsg);
EndPaint(skMsg._hWnd,&ps);
}
//return TRUE;
break;
case WM_LBUTTONDOWN:
{
int i = 0;
}
break;
}
return SkinResList::CallDefWndProc(skMsg);
}
//::GetSysColor(COLOR_GRAYTEXT)
LRESULT PaintItem(HDC hDc,SKINMSG &skMsg)
{
TCHAR strText[512] = {0};
GetWindowText(skMsg._hWnd,strText,512);
SIZE szExtent = {0,0};
GetTextExtentPoint32(hDc,strText, _tcslen(strText),&szExtent);
RECT rc;
GetClientRect(skMsg._hWnd,&rc);
//Rectangle(hDc,rc.left,rc.top,rc.right,rc.bottom);
//return 0;
int iOldMode = SetBkMode(hDc,TRANSPARENT);
HPEN hP = CreatePen(PS_INSIDEFRAME|PS_SOLID,1,::GetSysColor(COLOR_3DFACE));
HPEN pOldPen = (HPEN)SelectObject(hDc,hP);
POINT oldPoint;
MoveToEx(hDc,rc.left+1, rc.bottom-1,&oldPoint);
LineTo(hDc,rc.left+1,rc.top+szExtent.cy/2);
if(_tcslen(strText) > 0)
{
LineTo(hDc,8,rc.top+szExtent.cy/2);
MoveToEx(hDc,szExtent.cx,rc.top+szExtent.cy/2,0);
}
LineTo(hDc,rc.right-1,rc.top+szExtent.cy/2);
LineTo(hDc,rc.right-1,rc.bottom-1);
LineTo(hDc,rc.left+1,rc.bottom-1);
MoveToEx(hDc,oldPoint.x,oldPoint.y,0);
RECT rcText = rc;
rcText.left += 12;
rcText.bottom = rcText.top + szExtent.cy;
HFONT fNew = (HFONT)SendMessage(GetParent(skMsg._hWnd),WM_GETFONT,0,0);
HFONT fOld = 0;
if(fNew)
{
fOld = (HFONT)SelectObject(hDc,fNew);
}
DrawText(hDc,strText,strlen(strText),&rcText,DT_SINGLELINE|DT_LEFT|DT_VCENTER);
SetBkMode(hDc,iOldMode);
if(fOld)
{
SelectObject(hDc,fOld);
}
SelectObject(hDc,pOldPen);
DeleteObject(hP);
return 0;
}
static LRESULT DrawCtrlItem(UINT idCtrl,LPDRAWITEMSTRUCT lpdis)
{
bool m_bSelected,m_bFocus,m_bOver;
m_bSelected = m_bFocus = false;
m_bOver = false;
RECT rcDraw = lpdis->rcItem;
HDC _hDc = lpdis->hDC;
int nSaveDC= SaveDC(_hDc);
UINT uState = lpdis->itemState;
//画按钮的外边框,它是一个半径为5的圆角矩形
RECT rc = rcDraw;
Rectangle(_hDc,rc.left,rc.top,rc.right,rc.bottom);
return 0L;
}
};
#endif