You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
567 lines
14 KiB
C++
567 lines
14 KiB
C++
2 years ago
|
// XTPPopupItem.cpp: implementation of the CXTPPopupItem class.
|
||
|
//
|
||
|
// This file is a part of the XTREME CONTROLS MFC class library.
|
||
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
||
|
//
|
||
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
||
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
||
|
// CONSENT OF CODEJOCK SOFTWARE.
|
||
|
//
|
||
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
||
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
||
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
||
|
// SINGLE COMPUTER.
|
||
|
//
|
||
|
// CONTACT INFORMATION:
|
||
|
// support@codejock.com
|
||
|
// http://www.codejock.com
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "Common/XTPImageManager.h"
|
||
|
#include "Common/XTPDrawHelpers.h"
|
||
|
#include "Common/XTPRichRender.h"
|
||
|
#include "Common/XTPMarkupRender.h"
|
||
|
#include "Common/XTPColorManager.h"
|
||
|
|
||
|
#include "../Defines.h"
|
||
|
#include "XTPPopupItem.h"
|
||
|
#include "XTPPopupControl.h"
|
||
|
#include "XTPPopupPaintManager.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
#define IMAGE_PLACEHOLDER 0xDEADBEAF
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CXTPPopupItem
|
||
|
|
||
|
IMPLEMENT_DYNCREATE(CXTPPopupItem, CCmdTarget)
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// CXTPPopupItem
|
||
|
|
||
|
CXTPPopupItem::CXTPPopupItem(LPRECT rcItem, LPCTSTR lpszCaption, COLORREF clrBackground, COLORREF clrBorder)
|
||
|
: m_nID(0)
|
||
|
, m_nIndex(0)
|
||
|
, m_nIconIndex((int)-1)
|
||
|
, m_bButton(FALSE)
|
||
|
, m_bHyperLink(TRUE)
|
||
|
, m_bBold(FALSE)
|
||
|
, m_bUnderline(TRUE)
|
||
|
, m_nAlign(DT_LEFT)
|
||
|
, m_ptOffset(0,0)
|
||
|
, m_clrText((COLORREF)-1)
|
||
|
, m_clrHotText((COLORREF)-1)
|
||
|
, m_clrBack(clrBackground)
|
||
|
, m_clrBorder(clrBorder)
|
||
|
, m_rcItem(rcItem)
|
||
|
, m_strCaption(lpszCaption)
|
||
|
, m_pControl(NULL)
|
||
|
, m_pRichRender(NULL)
|
||
|
, m_pUIElement(NULL)
|
||
|
{
|
||
|
#ifdef _XTP_ACTIVEX
|
||
|
EnableAutomation();
|
||
|
EnableTypeLib();
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
CXTPPopupItem::~CXTPPopupItem()
|
||
|
{
|
||
|
SAFE_DELETE(m_pRichRender);
|
||
|
|
||
|
XTPMarkupReleaseElement(m_pUIElement);
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::SetRTFText(LPCTSTR str)
|
||
|
{
|
||
|
SAFE_DELETE(m_pRichRender);
|
||
|
m_pRichRender = new CXTPRichRender;
|
||
|
|
||
|
m_strCaption = str;
|
||
|
m_bHyperLink = FALSE;
|
||
|
m_pRichRender->SetText(str);
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::SetRTFText(UINT nIDResource)
|
||
|
{
|
||
|
HMODULE hModule = AfxFindResourceHandle(MAKEINTRESOURCE(nIDResource), _T("RTF"));
|
||
|
if (!hModule)
|
||
|
return;
|
||
|
HRSRC hResource = ::FindResource(hModule, MAKEINTRESOURCE(nIDResource), _T("RTF"));
|
||
|
if (!hResource)
|
||
|
return;
|
||
|
|
||
|
HGLOBAL hMem= ::LoadResource(hModule, hResource);
|
||
|
if (!hMem)
|
||
|
return;
|
||
|
|
||
|
LPSTR lpBuffer = (LPSTR)LockResource(hMem);
|
||
|
|
||
|
CString str(lpBuffer);
|
||
|
|
||
|
SetRTFText(str);
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::SetCaption(LPCTSTR str)
|
||
|
{
|
||
|
m_strCaption = str;
|
||
|
|
||
|
XTPMarkupReleaseElement(m_pUIElement);
|
||
|
|
||
|
if (m_pControl->GetMarkupContext())
|
||
|
{
|
||
|
m_pUIElement = XTPMarkupParseText(m_pControl->GetMarkupContext(), str);
|
||
|
}
|
||
|
|
||
|
RedrawControl();
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::SetMarkupText(LPCTSTR str)
|
||
|
{
|
||
|
m_pControl->EnableMarkup(TRUE);
|
||
|
|
||
|
m_bHyperLink = FALSE;
|
||
|
|
||
|
SetCaption(str);
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::RedrawControl()
|
||
|
{
|
||
|
ASSERT(m_pControl);
|
||
|
if (m_pControl)
|
||
|
m_pControl->RedrawControl();
|
||
|
}
|
||
|
|
||
|
|
||
|
BOOL CXTPPopupItem::IsSelected() const
|
||
|
{
|
||
|
ASSERT(m_pControl);
|
||
|
return m_pControl && m_pControl->m_pSelected == this;
|
||
|
}
|
||
|
|
||
|
BOOL CXTPPopupItem::IsPressed() const
|
||
|
{
|
||
|
ASSERT(m_pControl);
|
||
|
return m_pControl && m_pControl->m_pPressed == this;
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::OnItemInserted()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::Draw(CDC* pDC)
|
||
|
{
|
||
|
if (m_pUIElement)
|
||
|
{
|
||
|
XTPMarkupSetDefaultFont(m_pControl->GetMarkupContext(), (HFONT)GetTextFont()->GetSafeHandle(), m_clrText == (COLORREF)-1 ? m_pControl->GetPaintManager()->m_clrText : m_clrText);
|
||
|
|
||
|
XTPMarkupRenderElement(m_pUIElement, pDC->GetSafeHdc(), m_rcItem);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ASSERT(m_pControl);
|
||
|
if (m_pControl)
|
||
|
m_pControl->GetPaintManager()->DrawItem(pDC, this);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
CFont* CXTPPopupItem::GetTextFont()
|
||
|
{
|
||
|
ASSERT(m_pControl);
|
||
|
return (m_pControl && m_fntText.m_hObject == NULL) ?
|
||
|
&m_pControl->GetPaintManager()->m_fntText : &m_fntText;
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::SetTextFont(CFont* pFntText)
|
||
|
{
|
||
|
ASSERT(pFntText);
|
||
|
if (!pFntText)
|
||
|
return;
|
||
|
|
||
|
LOGFONT lf;
|
||
|
pFntText->GetLogFont(&lf);
|
||
|
|
||
|
SetTextFont(&lf);
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::SetTextFont(PLOGFONT pLogfText)
|
||
|
{
|
||
|
ASSERT(pLogfText);
|
||
|
|
||
|
m_fntText.DeleteObject();
|
||
|
m_fntText.CreateFontIndirect(pLogfText);
|
||
|
|
||
|
RedrawControl();
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::CalculateHeight()
|
||
|
{
|
||
|
if (m_pRichRender)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (m_pUIElement)
|
||
|
{
|
||
|
XTPMarkupSetDefaultFont(m_pControl->GetMarkupContext(), (HFONT)GetTextFont()->GetSafeHandle(), COLORREF_NULL);
|
||
|
|
||
|
CSize sz = XTPMarkupMeasureElement(m_pUIElement, m_rcItem.Width());
|
||
|
m_rcItem.right = m_rcItem.left + sz.cx;
|
||
|
m_rcItem.bottom = m_rcItem.top + sz.cy;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
CXTPImageManagerIcon* pIcon = GetImage();
|
||
|
|
||
|
if (pIcon)
|
||
|
{
|
||
|
m_rcItem.bottom = m_rcItem.top + pIcon->GetHeight();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
CWindowDC dc(NULL);
|
||
|
CRect rcText(0, 0, m_rcItem.Width(), 0);
|
||
|
|
||
|
CFont fntUnderline;
|
||
|
CFont* pFont = GetTextFont();
|
||
|
|
||
|
if (IsHyperLink() && IsUnderline() || IsBold())
|
||
|
{
|
||
|
LOGFONT lpLogFont;
|
||
|
pFont->GetLogFont(&lpLogFont);
|
||
|
lpLogFont.lfUnderline = (IsHyperLink() && IsUnderline());
|
||
|
lpLogFont.lfWeight = IsBold() ? FW_BOLD : FW_NORMAL;
|
||
|
|
||
|
VERIFY(fntUnderline.CreateFontIndirect(&lpLogFont));
|
||
|
pFont = &fntUnderline;
|
||
|
}
|
||
|
|
||
|
CXTPFontDC font(&dc, pFont);
|
||
|
|
||
|
dc.DrawText(m_strCaption, rcText, m_nAlign | DT_CALCRECT);
|
||
|
|
||
|
m_rcItem.bottom = m_rcItem.top + rcText.Height();
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::FitToContent()
|
||
|
{
|
||
|
if (m_pRichRender)
|
||
|
{
|
||
|
CWindowDC dc(NULL);
|
||
|
CSize sz = m_pRichRender->GetTextExtent(&dc, m_rcItem.Width());
|
||
|
m_rcItem.right = m_rcItem.left + sz.cx;
|
||
|
m_rcItem.bottom = m_rcItem.top + sz.cy;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (m_pUIElement)
|
||
|
{
|
||
|
XTPMarkupSetDefaultFont(m_pControl->GetMarkupContext(), (HFONT)GetTextFont()->GetSafeHandle(), COLORREF_NULL);
|
||
|
|
||
|
CSize sz = XTPMarkupMeasureElement(m_pUIElement, m_rcItem.Width());
|
||
|
m_rcItem.right = m_rcItem.left + sz.cx;
|
||
|
m_rcItem.bottom = m_rcItem.top + sz.cy;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
CalculateWidth();
|
||
|
CalculateHeight();
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::CalculateWidth()
|
||
|
{
|
||
|
if (m_pRichRender)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (m_pUIElement)
|
||
|
{
|
||
|
XTPMarkupSetDefaultFont(m_pControl->GetMarkupContext(), (HFONT)GetTextFont()->GetSafeHandle(), COLORREF_NULL);
|
||
|
|
||
|
CSize sz = XTPMarkupMeasureElement(m_pUIElement, m_rcItem.Width());
|
||
|
m_rcItem.right = m_rcItem.left + sz.cx;
|
||
|
m_rcItem.bottom = m_rcItem.top + sz.cy;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
CXTPImageManagerIcon* pIcon = GetImage();
|
||
|
|
||
|
if (pIcon)
|
||
|
{
|
||
|
m_rcItem.right = m_rcItem.left + pIcon->GetWidth();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (m_nAlign & DT_WORDBREAK) return;
|
||
|
|
||
|
CWindowDC dc(NULL);
|
||
|
CRect rcText(0, 0, 0, m_rcItem.Height());
|
||
|
|
||
|
CFont fntUnderline;
|
||
|
CFont* pFont = GetTextFont();
|
||
|
|
||
|
if (IsHyperLink() && IsUnderline() || IsBold())
|
||
|
{
|
||
|
LOGFONT lpLogFont;
|
||
|
pFont->GetLogFont(&lpLogFont);
|
||
|
lpLogFont.lfUnderline = (IsHyperLink() && IsUnderline());
|
||
|
lpLogFont.lfWeight = IsBold() ? FW_BOLD : FW_NORMAL;
|
||
|
|
||
|
VERIFY(fntUnderline.CreateFontIndirect(&lpLogFont));
|
||
|
pFont = &fntUnderline;
|
||
|
}
|
||
|
|
||
|
CXTPFontDC font(&dc, pFont);
|
||
|
|
||
|
dc.DrawText(m_strCaption, rcText, m_nAlign | DT_CALCRECT);
|
||
|
|
||
|
if (m_nAlign & DT_RIGHT)
|
||
|
{
|
||
|
m_rcItem.left = m_rcItem.right - rcText.Width();
|
||
|
}
|
||
|
else if (m_nAlign & DT_CENTER)
|
||
|
{
|
||
|
LONG lCentrl = m_rcItem.left + m_rcItem.Width()/2;
|
||
|
m_rcItem.left = lCentrl - rcText.Width()/2;
|
||
|
m_rcItem.right = m_rcItem.left + rcText.Width();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_rcItem.right = m_rcItem.left + rcText.Width();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
BOOL CXTPPopupItem::SetIcon(HICON hIcon, XTPPopupItemIcon itemIcon)
|
||
|
{
|
||
|
if (!hIcon)
|
||
|
return FALSE;
|
||
|
|
||
|
return m_pControl->GetImageManager()->SetIcon(hIcon, GetIconIndex(), 0,
|
||
|
itemIcon == xtpPopupItemIconNormal ? xtpImageNormal: itemIcon == xtpPopupItemIconSelected ? xtpImageHot : xtpImageChecked);
|
||
|
}
|
||
|
|
||
|
BOOL CXTPPopupItem::SetIcon(UINT nIDIcon, XTPPopupItemIcon itemIcon)
|
||
|
{
|
||
|
|
||
|
return m_pControl->GetImageManager()->SetIcon(nIDIcon, GetIconIndex(), 0,
|
||
|
itemIcon == xtpPopupItemIconNormal ? xtpImageNormal: itemIcon == xtpPopupItemIconSelected ? xtpImageHot : xtpImageChecked);
|
||
|
}
|
||
|
|
||
|
BOOL CXTPPopupItem::SetIcons(UINT nIDBitmap, COLORREF clrTransparent, int itemIcon)
|
||
|
{
|
||
|
BOOL bAlphaBitmap = FALSE;
|
||
|
|
||
|
HBITMAP hBitmap = CXTPImageManagerIcon::LoadBitmapFromResource(MAKEINTRESOURCE(nIDBitmap), &bAlphaBitmap);
|
||
|
if (!hBitmap)
|
||
|
return FALSE;
|
||
|
|
||
|
BOOL res = SetIcons(hBitmap, clrTransparent, itemIcon, bAlphaBitmap);
|
||
|
|
||
|
DeleteObject(hBitmap);
|
||
|
|
||
|
return res;
|
||
|
}
|
||
|
|
||
|
|
||
|
BOOL CXTPPopupItem::SetIcons(HBITMAP hBitmap, COLORREF clrTransparent, int itemIcon, BOOL bAlphaBitmap)
|
||
|
{
|
||
|
BITMAP bmpInfo;
|
||
|
ZeroMemory(&bmpInfo, sizeof(BITMAP));
|
||
|
::GetObject(hBitmap, sizeof(BITMAP), &bmpInfo);
|
||
|
|
||
|
int nCount = (itemIcon & xtpPopupItemIconNormal ? 1 : 0) +
|
||
|
(itemIcon & xtpPopupItemIconSelected ? 1 : 0) +
|
||
|
(itemIcon & xtpPopupItemIconPressed ? 1 : 0);
|
||
|
|
||
|
if (nCount == 0)
|
||
|
return FALSE;
|
||
|
|
||
|
int nIndex = 0;
|
||
|
|
||
|
CBitmap bmp;
|
||
|
bmp.Attach(hBitmap);
|
||
|
|
||
|
|
||
|
COLORREF clr = m_pControl->GetImageManager()->GetMaskColor();
|
||
|
m_pControl->GetImageManager()->SetMaskColor(clrTransparent);
|
||
|
|
||
|
if ((itemIcon & xtpPopupItemIconNormal) != 0)
|
||
|
{
|
||
|
UINT nIDs[] = {IMAGE_PLACEHOLDER, IMAGE_PLACEHOLDER, IMAGE_PLACEHOLDER};
|
||
|
nIDs[nIndex++] = GetIconIndex();
|
||
|
|
||
|
m_pControl->GetImageManager()->SetIcons(bmp, nIDs, nCount, CSize(bmpInfo.bmWidth / nCount, bmpInfo.bmHeight), xtpImageNormal, bAlphaBitmap);
|
||
|
}
|
||
|
|
||
|
if ((itemIcon & xtpPopupItemIconSelected) != 0)
|
||
|
{
|
||
|
UINT nIDs[] = {IMAGE_PLACEHOLDER, IMAGE_PLACEHOLDER, IMAGE_PLACEHOLDER};
|
||
|
nIDs[nIndex++] = GetIconIndex();
|
||
|
|
||
|
m_pControl->GetImageManager()->SetIcons(bmp, nIDs, nCount, CSize(bmpInfo.bmWidth / nCount, bmpInfo.bmHeight), xtpImageHot, bAlphaBitmap);
|
||
|
}
|
||
|
|
||
|
if ((itemIcon & xtpPopupItemIconPressed) != 0)
|
||
|
{
|
||
|
UINT nIDs[] = {IMAGE_PLACEHOLDER, IMAGE_PLACEHOLDER, IMAGE_PLACEHOLDER};
|
||
|
nIDs[nIndex++] = GetIconIndex();
|
||
|
|
||
|
m_pControl->GetImageManager()->SetIcons(bmp, nIDs, nCount, CSize(bmpInfo.bmWidth / nCount, bmpInfo.bmHeight), xtpImageChecked, bAlphaBitmap);
|
||
|
}
|
||
|
|
||
|
|
||
|
m_pControl->GetImageManager()->SetMaskColor(clr);
|
||
|
|
||
|
bmp.Detach();
|
||
|
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
CXTPImageManagerIcon* CXTPPopupItem::GetImage() const
|
||
|
{
|
||
|
return m_pControl->GetImageManager()->GetImage(GetIconIndex(), m_rcItem.Width());
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::CenterIcon()
|
||
|
{
|
||
|
m_ptOffset = CPoint(0, 0);
|
||
|
|
||
|
CXTPImageManagerIcon* pIcon = GetImage();
|
||
|
|
||
|
if (!pIcon)
|
||
|
return;
|
||
|
|
||
|
CSize sz = pIcon->GetExtent();
|
||
|
CRect rc = GetRect();
|
||
|
|
||
|
if (rc.Width() > sz.cx) m_ptOffset.x = rc.Width()/2 - sz.cx/2;
|
||
|
if (rc.Height() > sz.cy) m_ptOffset.y = rc.Height()/2 - sz.cy/2;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#ifdef _XTP_ACTIVEX
|
||
|
|
||
|
// {569C30D0-E2D7-4ae7-ACCF-EC2209058C15}
|
||
|
static const GUID IID_IPopupItem =
|
||
|
{ 0x569c30d0, 0xe2d7, 0x4ae7, { 0xac, 0xcf, 0xec, 0x22, 0x9, 0x5, 0x8c, 0x15 } };
|
||
|
|
||
|
|
||
|
BEGIN_INTERFACE_MAP(CXTPPopupItem, CCmdTarget)
|
||
|
INTERFACE_PART(CXTPPopupItem, IID_IPopupItem, Dispatch)
|
||
|
END_INTERFACE_MAP()
|
||
|
|
||
|
IMPLEMENT_OLETYPELIB_EX(CXTPPopupItem, IID_IPopupItem)
|
||
|
|
||
|
BEGIN_DISPATCH_MAP(CXTPPopupItem, CCmdTarget)
|
||
|
DISP_PROPERTY_EX_ID(CXTPPopupItem, "Caption", 1, OleGetCaption, SetCaption , VT_BSTR)
|
||
|
DISP_PROPERTY_ID(CXTPPopupItem, "TextAlignment", 2, m_nAlign, VT_I4)
|
||
|
DISP_PROPERTY_ID(CXTPPopupItem, "HyperLink", 3, m_bHyperLink, VT_BOOL)
|
||
|
DISP_PROPERTY_ID(CXTPPopupItem, "Button", 4, m_bButton, VT_BOOL)
|
||
|
DISP_PROPERTY_ID(CXTPPopupItem, "Id", 5, m_nID, VT_I4)
|
||
|
DISP_PROPERTY_ID(CXTPPopupItem, "TextColor", 6, m_clrText, VT_COLOR)
|
||
|
DISP_PROPERTY_ID(CXTPPopupItem, "BackgroundColor", 7, m_clrBack, VT_COLOR)
|
||
|
DISP_PROPERTY_ID(CXTPPopupItem, "BorderColor", 8, m_clrBorder, VT_COLOR)
|
||
|
DISP_FUNCTION_ID(CXTPPopupItem, "SetIcon", 9, OleSetIcon, VT_EMPTY, VTS_I4 VTS_I4)
|
||
|
DISP_FUNCTION_ID(CXTPPopupItem, "SetIcons", 10, OleSetIcons, VT_EMPTY, VTS_I4 VTS_COLOR VTS_I4)
|
||
|
DISP_FUNCTION_ID(CXTPPopupItem, "CenterIcon", 11, CenterIcon, VT_EMPTY, VTS_NONE)
|
||
|
DISP_FUNCTION_ID(CXTPPopupItem, "CalculateHeight", 12, CalculateHeight, VT_EMPTY, VTS_NONE)
|
||
|
DISP_FUNCTION_ID(CXTPPopupItem, "CalculateWidth", 13, CalculateWidth, VT_EMPTY, VTS_NONE)
|
||
|
DISP_PROPERTY_ID(CXTPPopupItem, "Bold", 14, m_bBold, VT_BOOL)
|
||
|
DISP_PROPERTY_ID(CXTPPopupItem, "IconIndex", 15, m_nIconIndex, VT_I4)
|
||
|
DISP_PROPERTY_EX_ID(CXTPPopupItem, "Font", DISPID_FONT, OleGetFont, OleSetFont, VT_FONT)
|
||
|
|
||
|
DISP_PROPERTY_EX_ID(CXTPPopupItem, "Left", 16, OleGetLeft, OleSetLeft, VT_I4)
|
||
|
DISP_PROPERTY_EX_ID(CXTPPopupItem, "Top", 17, OleGetTop, OleSetTop, VT_I4)
|
||
|
DISP_PROPERTY_EX_ID(CXTPPopupItem, "Width", 18, OleGetWidth, OleSetWidth, VT_I4)
|
||
|
DISP_PROPERTY_EX_ID(CXTPPopupItem, "Height", 19, OleGetHeight, OleSetHeight, VT_I4)
|
||
|
|
||
|
END_DISPATCH_MAP()
|
||
|
|
||
|
|
||
|
void CXTPPopupItem::OleSetIcon(int hIcon, int itemIcon)
|
||
|
{
|
||
|
SetIcon((HICON)hIcon, (XTPPopupItemIcon)itemIcon);
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::OleSetIcons(int hBitmap, COLORREF clrTransparent, int itemIcon)
|
||
|
{
|
||
|
SetIcons((HBITMAP)hBitmap, clrTransparent, itemIcon);
|
||
|
}
|
||
|
|
||
|
BSTR CXTPPopupItem::OleGetCaption()
|
||
|
{
|
||
|
return m_strCaption.AllocSysString();
|
||
|
}
|
||
|
|
||
|
LPFONTDISP CXTPPopupItem::OleGetFont()
|
||
|
{
|
||
|
return AxCreateOleFont(GetTextFont(), this, (LPFNFONTCHANGED)&CXTPPopupItem::OleSetFont);
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::OleSetFont(LPFONTDISP pFontDisp)
|
||
|
{
|
||
|
ASSERT((pFontDisp == NULL) ||
|
||
|
AfxIsValidAddress(pFontDisp, sizeof(IDispatch), FALSE));
|
||
|
|
||
|
AxCreateFontFromDispatch(&m_fntText, pFontDisp);
|
||
|
}
|
||
|
|
||
|
long CXTPPopupItem::OleGetLeft()
|
||
|
{
|
||
|
return m_rcItem.left;
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::OleSetLeft(long nLeft)
|
||
|
{
|
||
|
m_rcItem.SetRect(nLeft, m_rcItem.top, nLeft + OleGetWidth(), m_rcItem.bottom);
|
||
|
}
|
||
|
|
||
|
long CXTPPopupItem::OleGetTop()
|
||
|
{
|
||
|
return m_rcItem.top;
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::OleSetTop(long nTop)
|
||
|
{
|
||
|
m_rcItem.SetRect(m_rcItem.left, nTop, m_rcItem.right, nTop + OleGetHeight());
|
||
|
}
|
||
|
|
||
|
long CXTPPopupItem::OleGetWidth()
|
||
|
{
|
||
|
return m_rcItem.Width();
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::OleSetWidth(long nWidth)
|
||
|
{
|
||
|
m_rcItem.SetRect(m_rcItem.left, m_rcItem.top, m_rcItem.left + nWidth, m_rcItem.bottom);
|
||
|
}
|
||
|
|
||
|
long CXTPPopupItem::OleGetHeight()
|
||
|
{
|
||
|
return m_rcItem.Height();
|
||
|
}
|
||
|
|
||
|
void CXTPPopupItem::OleSetHeight(long nHeight)
|
||
|
{
|
||
|
m_rcItem.SetRect(m_rcItem.left, m_rcItem.top, m_rcItem.right, m_rcItem.top + nHeight);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#endif
|