// ExStatic.cpp : implementation file
//
#include "stdafx.h"
#include "ExStatic.h"
#include "ResMng.h"
#include "SysConfig.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CExStatic
IResMng* CExStatic::s_pResMng = CResMng::Instance();
enum slider_e{
sld_offset_nor = 0,
sld_offset_dwn,
sld_offset_bgn,
sld_offset_fill,
sld_offset_unfill,
sld_offset_end
};
CExStatic::CExStatic()
{
m_bFmt12 = FALSE;
m_DrawItem.stSkinID = SKIN_ID_NONE;
m_DrawItem.stPntSkinID = SKIN_ID_NONE;
m_DrawItem.nNumber = 0;
m_DrawItem.nFontID = sf_18;
m_DrawItem.nFontCol = sc_white;
m_DrawItem.stcStyle = STC_TEXT_SINGLE;
m_DrawItem.nBkCol = sc_transparent;
m_bMouseDown = FALSE;
m_nCurPos = 0;
}
CExStatic::~CExStatic()
{
}
BEGIN_MESSAGE_MAP(CExStatic, CStatic)
//{{AFX_MSG_MAP(CExStatic)
ON_WM_PAINT()
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CExStatic::SkinSetStcID(BYTE byStyle, DWORD dwSkinID, DWORD dwPntResID /*= SKIN_ID_NONE*/)
{
m_DrawItem.stcStyle = byStyle;
m_DrawItem.stSkinID = dwSkinID;
m_DrawItem.stPntSkinID = dwPntResID;
switch(m_DrawItem.stcStyle)
{
case STC_DIGITAL_TIME:
{
PSKINBMP_ST pSkin = s_pResMng->RequestBmp(m_DrawItem.stSkinID,true );
// ASSERT(pSkin != NULL );
SetWindowPos(NULL,0,0, pSkin->nWidthPerCell * 5,pSkin->nHeightPerCell, SWP_NOMOVE | SWP_NOZORDER );
}
break;
case STC_DIGITAL_NUM :
{
PSKINBMP_ST pSkin = s_pResMng->RequestBmp(m_DrawItem.stSkinID,true );
ASSERT(pSkin != NULL );
SetWindowPos(NULL,0, 0, pSkin->nWidthPerCell * 2,pSkin->nHeightPerCell, SWP_NOMOVE | SWP_NOZORDER );
}
break;
case STC_BMP_BATTERY:
{
PSKINBMP_ST pSkin = s_pResMng->RequestBmp(m_DrawItem.stSkinID,true );
ASSERT(pSkin != NULL );
SetWindowPos(NULL,0, 0, pSkin->nWidthPerCell,pSkin->nHeightPerCell, SWP_NOMOVE | SWP_NOZORDER );
}
break;
case STC_BMP:
{
PSKINBMP_ST pSkin = s_pResMng->RequestBmp(m_DrawItem.stSkinID,false );
ASSERT(pSkin != NULL );
SetWindowPos(NULL,0, 0, pSkin->nWidthPerCell,pSkin->nHeightPerCell, SWP_NOMOVE | SWP_NOZORDER );
}
break;
case STC_DIGITAL_FM:
{
PSKINBMP_ST pSkin = s_pResMng->RequestBmp(m_DrawItem.stSkinID,false );
ASSERT(pSkin != NULL );
SetWindowPos(NULL,0, 0, pSkin->nWidthPerCell * 8,pSkin->nHeightPerCell, SWP_NOMOVE | SWP_NOZORDER );
}
break;
case STC_DIGITAL_CH:
{
PSKINBMP_ST pSkin = s_pResMng->RequestBmp(m_DrawItem.stSkinID,false );
ASSERT(pSkin != NULL );
SetWindowPos(NULL,0, 0, pSkin->nWidthPerCell * 5,pSkin->nHeightPerCell, SWP_NOMOVE | SWP_NOZORDER );
}
case STC_SLIDER:
{
CRect rt;
GetClientRect(&rt);
PSKINBMP_ST pSkin = s_pResMng->RequestBmp(m_DrawItem.stSkinID,true );
ASSERT(pSkin != NULL );
SetWindowPos(NULL,0, 0, rt.Width(),pSkin->nHeightPerCell, SWP_NOMOVE | SWP_NOZORDER );
}
break;
default:
break;
}
}
void CExStatic::SkinSetDigitalTime(int nSec, BOOL bFmt12 /*= FALSE*/)
{
m_bFmt12 = bFmt12;
m_DrawItem.nNumber = nSec;
Invalidate();
}
void CExStatic::SkinSetTxtAttri(BYTE byFontID, BYTE byColID, BYTE byBkCol /*sc_transparent*/)
{
m_DrawItem.nFontID = byFontID;
m_DrawItem.nFontCol = byColID;
m_DrawItem.nBkCol = byBkCol;
Invalidate();
}
void CExStatic::SkinSetCH(DWORD dwCh)
{
m_DrawItem.nNumber = dwCh;
Invalidate();
}
void CExStatic::SkinSetNum(DWORD dwNum)
{
m_DrawItem.nNumber = dwNum;
Invalidate();
}
void CExStatic::SkinSetBatterNum(DWORD dwBattery)
{
m_DrawItem.nNumber = dwBattery;
Invalidate();
}
void CExStatic::SkinSetFm(DWORD dwFm)
{
m_DrawItem.nNumber = dwFm;
Invalidate();
}
//////////////////////////////////////////////////////////////////////////
void CExStatic::SKinSetMapOffset(DWORD dwOffset)
{
m_DrawItem.nNumber = dwOffset;
}
void CExStatic::SkinSetPos(int nPos)
{
if ( !m_bMouseDown )
{
m_DrawItem.nNumber = nPos;
Invalidate();
}
}
int CExStatic::SkinGetPos()
{
return (m_DrawItem.nNumber % 101);
}
/////////////////////////////////////////////////////////////////////////////
// CExStatic message handlers
void CExStatic::OnPaint()
{
CPaintDC dc(this);
CRect rt;
GetClientRect(&rt);
HDC hMemDC = CreateCompatibleDC( dc.GetSafeHdc() );
HBITMAP hMemBmp = CreateCompatibleBitmap(dc.GetSafeHdc(), rt.Width(), rt.Height() );
HBITMAP hPreBmp = (HBITMAP)SelectObject( hMemDC, hMemBmp );
//#define STC_TEXT_MULTIPLE (0x02) //多行文本
switch( m_DrawItem.stcStyle )
{
case STC_TEXT_SINGLE: SkinDrawSingleLine(hMemDC, &rt,DT_CENTER); break;
case STC_TEXT_SINGLE_LEFT: SkinDrawSingleLine(hMemDC, &rt,DT_LEFT); break;
case STC_TEXT_SINGLE_RIGHT: SkinDrawSingleLine(hMemDC, &rt,DT_RIGHT); break;
case STC_TEXT_SINGLE_ELIDE: SkinDrawSingleLineElide(hMemDC, &rt); break;
case STC_BMP : SkinDrawOnlyBmp(hMemDC, &rt); break;
case STC_BMP_BATTERY: SkinDrawBattery(hMemDC); break;
case STC_DIGITAL_TIME: SkinDrawDigitalTime(hMemDC,&rt); break;
case STC_DIGITAL_NUM: SkinDrawDigitalNum(hMemDC, &rt); break;
case STC_DIGITAL_CH: SkinDrawDigitalCH(hMemDC, &rt); break;
case STC_DIGITAL_FM: SkinDrawDigitalFm(hMemDC, &rt); break;
case STC_TEXT_MULTIPLE: SkinDrawMultipleText(hMemDC, &rt);break;
case STC_MAP_ZONE: SkinDrawZoneMap(hMemDC, &rt); break;
case STC_SLIDER: SkinDrawSlider(hMemDC, &rt); break;
default:
CStatic::OnPaint();
return;
}
::BitBlt(dc.GetSafeHdc(), 0,0, rt.Width(), rt.Height(),
hMemDC, 0, 0, SRCCOPY );
SelectObject(hMemDC, hPreBmp);
DeleteObject( hMemBmp );
DeleteDC( hMemDC );
}
// Nonzero if it erase background; otherwise,it is zero
BOOL CExStatic::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return FALSE;
return CStatic::OnEraseBkgnd(pDC);
}
void CExStatic::SkinDrawMultipleText(HDC hDC, LPRECT lpRect)
{
CRect rt;
if ( m_DrawItem.nBkCol ==sc_transparent)
{
SkinDrawBkFromParent(hDC, m_DrawItem.stPntSkinID);
}
// Draw multiple line text
COLORREF TextCol = s_pResMng->RequestCol(m_DrawItem.nFontCol);
HFONT hFont = s_pResMng->RequestFont(m_DrawItem.nFontID );
COLORREF PrevCol = SetTextColor(hDC, TextCol);
HFONT PrevFont = (HFONT)SelectObject(hDC, hFont );
GetClientRect(&rt);
// Fill the back with solid color
if ( m_DrawItem.nBkCol != sc_transparent )
{
COLORREF bkCol = s_pResMng->RequestCol(m_DrawItem.nBkCol);
::SetBkColor(hDC, bkCol);
::ExtTextOut(hDC, 0, 0, ETO_OPAQUE, &rt, NULL, 0, NULL);
}
SetBkMode(hDC, TRANSPARENT);
TCHAR szTxt[MAX_PATH]={0};
GetWindowText(szTxt,MAX_PATH);
::DrawText(hDC,szTxt,_tcslen(szTxt), lpRect ,DT_TOP | DT_LEFT | DT_WORDBREAK);
SelectObject(hDC, PrevFont);
SetTextColor(hDC, PrevCol );
}
///
void CExStatic::SkinDrawSingleLine(HDC hDC,LPRECT lpRect, DWORD dwStyle /* = DT_CENTER*/)
{
CRect rt;
if ( m_DrawItem.nBkCol ==sc_transparent )
{
SkinDrawBkFromParent(hDC, m_DrawItem.stPntSkinID);
}
// Draw single line text
COLORREF TextCol = s_pResMng->RequestCol(m_DrawItem.nFontCol);
HFONT hFont = s_pResMng->RequestFont(m_DrawItem.nFontID );
COLORREF PrevCol = SetTextColor(hDC, TextCol);
HFONT PrevFont = (HFONT)SelectObject(hDC, hFont );
GetClientRect(&rt);
if ( m_DrawItem.nBkCol != sc_transparent )
{
COLORREF bkCol = s_pResMng->RequestCol(m_DrawItem.nBkCol);
CBrush br(bkCol);
FillRect(hDC, &rt, br);
}
SetBkMode(hDC, TRANSPARENT);
TCHAR szTxt[MAX_PATH]={0};
GetWindowText(szTxt,MAX_PATH
没有合适的资源?快使用搜索试试~ 我知道了~
ce 界面控件类,主要有 skin button等界面控件。
共17个文件
h:10个
cpp:7个
4星 · 超过85%的资源 需积分: 10 94 下载量 95 浏览量
2009-05-09
22:56:05
上传
评论
收藏 23KB RAR 举报
温馨提示
ce 界面控件类 主要用于wince界面便成,主要有 skin button等界面控件。
资源推荐
资源详情
资源评论
收起资源包目录
SkinMng.rar (17个子文件)
SkinMng
SkinSetType.h 167B
MaskCtrl.cpp 2KB
BtnCommon.cpp 2KB
IResMng.h 575B
BtnOfMainMenu.cpp 5KB
SkinPub.h 5KB
ExButton.cpp 8KB
ExButton.h 2KB
CSkinBitmap.cpp 3KB
MaskCtrl.h 1KB
BtnOfMainMenu.h 1KB
ResMng.cpp 13KB
BtnCommon.h 1KB
ResMng.h 1KB
ExStatic.h 3KB
CSkinBitmap.h 1KB
ExStatic.cpp 22KB
共 17 条
- 1
资源评论
- 「已注销」2015-11-17wince上除了一个button控件其他基本没用
vvrobin
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功