www.pudn.com > SDKSkin.rar > SkinStatic.h


/**************************************************** 
**  Fujitsu Copyright (C) 2006 - 2007 
**	功    能:	CStatic换肤处理。 
 
**	文件名称: 	SkinStatic 
**	文件基类: 
**	扩 展 名:	h 
**	创建日期:	2006-8-19 16:29 
**	作    者:	汪荣 
*****************************************************/ 
 
#ifndef _SKINSTATIC_ONCE_ 
#define _SKINSTATIC_ONCE_ 
 
#include "..\\RNHDC.h" 
#include "..\\RNHBitmap.h" 
class SkinStatic 
{ 
public: 
	SkinStatic() 
	{ 
	} 
	LRESULT CALLBACK SkinStaticProc(SKINMSG &skMsg) 
	{ 
		//if(skMsg._msg == WM_ERASEBKGND) 
		//		{ 
		//			return TRUE; 
		//		} 
		//		else 
		//		{ 
		//			return SkinResList::CallDefWndProc(skMsg); 
		//		} 
		 
		/* 
		*int nType = (SkinWndState::GetWndStyle(skMsg._hWnd) & 0x1F); 
		 
		  switch (nType) 
		  { 
		  case SS_BLACKRECT:  
		  case SS_GRAYRECT:          
		  case SS_WHITERECT:    
		  { 
		  //CRect rClient; 
		  //GetClientRect(rClient); 
		   
			//pDC->FillSolidRect(rClient, GetBkgndColor()); 
			return TRUE; 
			} 
			 
			  case SS_BLACKFRAME:  
			  case SS_GRAYFRAME:          
			  case SS_WHITEFRAME:    
			  case SS_ETCHEDHORZ:        
			  case SS_ETCHEDVERT:        
			  case SS_ETCHEDFRAME:  
			  return TRUE; 
			  } 
		 */ 
		switch(skMsg._msg) 
		{ 
			case WM_ERASEBKGND: 
				{ 
					//if(!SkinWndState::IsSizable(skMsg._hWnd)) return TRUE; 
					 
					SetClassLong(skMsg._hWnd,GCL_HBRBACKGROUND,NULL); 
					RNHDC hDc((HDC)skMsg._wPm,false); 
					SetBkMode((HDC)skMsg._wPm,TRANSPARENT); 
					RECT drRect; 
					bool bErase = false; 
					GetClientRect(skMsg._hWnd,&drRect); 
 
					if(SkinWndState::IsDialog(GetParent(skMsg._hWnd))) 
					{ 
						RNHBitmap hbitmap(SkinIni::Instance()->GetEraseBGImg()); 
						if(!hbitmap) 
						{ 
						} 
						else 
						{ 
							HBITMAP pOldMemBmp = (HBITMAP)SelectObject(hDc,hbitmap); 
							SkinDraw::Draw(hDc,hbitmap,drRect); 
							SelectObject(hDc,pOldMemBmp); 
							bErase = true; 
						} 
					} 
					if(bErase == false) 
					{ 
						HBRUSH hb = (HBRUSH)GetClassLong(GetParent(skMsg._hWnd),GCL_HBRBACKGROUND); 
						FillRect(hDc,&drRect,hb); 
					} 
				} 
				return TRUE; 
			case WM_PAINT: 
				{	 
					RECT rcWnd; 
					GetClientRect(skMsg._hWnd,&rcWnd); 
					HDC hDC; 
					PAINTSTRUCT ps; 
					hDC = BeginPaint(skMsg._hWnd,&ps); 
					DWORD dwStyle = SkinWndState::GetWndStyle(skMsg._hWnd); 
					 
					int iMode = SetBkMode(hDC,TRANSPARENT); 
 
					HFONT fh = (HFONT)SendMessage(skMsg._hWnd,WM_GETFONT,0,0); 
					SelectObject(hDC,fh); 
					if(dwStyle & SS_ICON) 
					{ 
						HICON hc = (HICON)SendMessage(skMsg._hWnd, STM_GETICON ,IMAGE_ICON,0); 
						if(hc == 0) 
						{ 
							hc = (HICON)SendMessage(skMsg._hWnd,STM_SETIMAGE,IMAGE_CURSOR,0); 
						} 
						DrawIcon(hDC,0,0,hc); 
					} 
					else if(dwStyle & SS_BITMAP) 
					{ 
						HBITMAP hb = (HBITMAP)SendMessage(skMsg._hWnd,STM_SETIMAGE,IMAGE_BITMAP,0); 
					} 
					else if(dwStyle & SS_ENHMETAFILE) 
					{ 
						HBITMAP hb = (HBITMAP)SendMessage(skMsg._hWnd,STM_SETIMAGE,IMAGE_ENHMETAFILE,0); 
					} 
					TCHAR	szTitle[1024] = {0}; 
					GetWindowText(skMsg._hWnd,szTitle,1024); 
					if(_tcslen(szTitle) > 0) 
					{ 
						DWORD drStyle = 0; 
						if(dwStyle & SS_CENTER) drStyle |= DT_CENTER; 
						if(dwStyle & SS_LEFT) drStyle |= DT_LEFT; 
						if(dwStyle & SS_RIGHT) drStyle |= DT_RIGHT; 
						DrawText(hDC,szTitle,_tcslen(szTitle),&rcWnd,DT_VCENTER | DT_WORDBREAK);						 
					} 
 
					SetBkMode(hDC,iMode); 
 
					EndPaint(skMsg._hWnd,&ps); 
 
					return TRUE; 
				} 
		} 
		return SkinResList::CallDefWndProc(skMsg); 
	} 
}; 
 
#endif