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