标签:
转载请说明原出处,谢谢~·http://blog.csdn.net/zhuhongshu/article/details/45362751
#ifndef SKIN_PICKER_PICTURE_ITEM_H #define SKIN_PICKER_PICTURE_ITEM_H //xml sample:<SkinPikerPictureItem name="" width="118" height="70" bkimage="UI\BKImage\1small.jpg" bkname="测试" author="Redrain" /> //类名和接口名,在CreateControl函数中会用到 const TCHAR kSkinPickerPictureItemClassName[] = _T("SkinPikerPictureItemUI"); const TCHAR kSkinPickerPictureItemInterface[] = _T("SkinPikerPictureItem"); //黑色的前景图的位置 const TCHAR kSkinPickerPictureItemForeImage[] = _T("file='UI\\LeftTab\\listitem\\ListBk.png' fade='150'"); //边框的颜色、图片名称的文字颜色、作者信息的文字颜色 const DWORD kBorderColor = 0xFF64B0FA; const DWORD kBkNameColor = 0xFFFFFFFF; const DWORD kAuthorColor = 0xFFAAAAAA; class CSkinPikerPictureItemUI : public CButtonUI { public: CSkinPikerPictureItemUI(); LPCTSTR GetClass() const; LPVOID GetInterface(LPCTSTR pstrName); void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue); void PaintStatusImage(HDC hDC); private: CDuiString m_BkName; CDuiString m_Author; }; #endif // SKIN_PICKER_PICTURE_ITEM_H
CSkinPikerPictureItemUI::CSkinPikerPictureItemUI() { m_Author = _T("作者:"); } LPCTSTR CSkinPikerPictureItemUI::GetClass() const { return kSkinPickerPictureItemClassName; } LPVOID CSkinPikerPictureItemUI::GetInterface(LPCTSTR pstrName) { if( _tcscmp(pstrName, kSkinPickerPictureItemInterface) == 0 ) return static_cast<CSkinPikerPictureItemUI*>(this); return CButtonUI::GetInterface(pstrName); } void CSkinPikerPictureItemUI::SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue) { if( _tcscmp(pstrName, _T("bkname")) == 0 ) m_BkName = pstrValue; else if( _tcscmp(pstrName, _T("author")) == 0 ) m_Author += pstrValue; CButtonUI::SetAttribute(pstrName, pstrValue); } void CSkinPikerPictureItemUI::PaintStatusImage(HDC hDC) { CButtonUI::PaintStatusImage(hDC); if( IsFocused() ) m_uButtonState |= UISTATE_FOCUSED; else m_uButtonState &= ~ UISTATE_FOCUSED; if( !IsEnabled() ) m_uButtonState |= UISTATE_DISABLED; else m_uButtonState &= ~ UISTATE_DISABLED; if( (m_uButtonState & UISTATE_PUSHED) != 0 || (m_uButtonState & UISTATE_HOT) != 0) { DrawImage(hDC, kSkinPickerPictureItemForeImage) ; //计算作者信息文字和背景图片名字文字的显示位置,这里是用了硬编码,请使用者自己修改 RECT rcBkName = m_rcItem; LONG nTextPadding = (m_rcItem.right - m_rcItem.left - CRenderEngine::GetTextSize(hDC, GetManager(), m_BkName.GetData(), m_iFont, m_uTextStyle).cx) / 2; rcBkName.left += nTextPadding; rcBkName.right -= nTextPadding; rcBkName.top += 15; rcBkName.bottom = rcBkName.top + 20; RECT rcAuthor = m_rcItem; nTextPadding = (m_rcItem.right - m_rcItem.left - CRenderEngine::GetTextSize(hDC, GetManager(), m_Author.GetData(), m_iFont, m_uTextStyle).cx) / 2; rcAuthor.left += nTextPadding; rcAuthor.right -= nTextPadding; rcAuthor.top += 40; rcAuthor.bottom = rcAuthor.top + 20; CRenderEngine::DrawText(hDC, m_pManager, rcBkName, m_BkName, kBkNameColor, m_iFont, m_uTextStyle); CRenderEngine::DrawText(hDC, m_pManager, rcAuthor, m_Author, kAuthorColor, m_iFont, m_uTextStyle); CRenderEngine::DrawRect(hDC, m_rcItem, 2, kBorderColor); } }
virtual void DoEvent(TEventUI& event); virtual void DoPaint(HDC hDC, const RECT& rcPaint); virtual void PaintBkColor(HDC hDC); virtual void PaintBkImage(HDC hDC); virtual void PaintStatusImage(HDC hDC); virtual void PaintText(HDC hDC); virtual void PaintBorder(HDC hDC); virtual void DoInit(); virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue); virtual bool IsVisible() const; virtual void SetVisible(bool bVisible = true); virtual void SetInternVisible(bool bVisible = true); // 仅供内部调用,有些UI拥有窗口句柄,需要重写此函数 virtual void SetPos(RECT rc);
CControlUI* CSkinPickerDialog::CreateControl(LPCTSTR pstrClass) { if (_tcsicmp(pstrClass, kSkinPickerPictureItemInterface) == 0) return new CSkinPikerPictureItemUI(); return NULL; }
CControlUI* CDialogBuilder::Create(STRINGorID xml, LPCTSTR type, IDialogBuilderCallback* pCallback, CPaintManagerUI* pManager, CControlUI* pParent)
m_hhWnd = CreateWindow(_T("#32770"), _T("WndMediaDisplay"), WS_VISIBLE | WS_CHILD, 0, 0, 0, 0, m_PaintManager.GetPaintWindow(), (HMENU)0, NULL, NULL);
LPCTSTR GetWindowClassName() const; LPCTSTR GetSuperClassName() const;
标签:
原文地址:http://blog.csdn.net/zhuhongshu/article/details/45362751