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