You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
589 lines
15 KiB
589 lines
15 KiB
//
|
|
// cuitb.cpp
|
|
//
|
|
|
|
#include "private.h"
|
|
#include "cuitb.h"
|
|
#include "cuiwnd.h"
|
|
#include "cuischem.h"
|
|
#include "cmydc.h"
|
|
|
|
HBRUSH CreateDitherBrush( void );
|
|
|
|
#if 0
|
|
void DrawDownTri(HDC hDC, RECT *prc)
|
|
{
|
|
static HBITMAP hbmpTri = NULL;
|
|
HBITMAP hbmpOld;
|
|
HDC hdcMem = CreateCompatibleDC(hDC);
|
|
|
|
if (!hdcMem)
|
|
return;
|
|
|
|
if (!hbmpTri)
|
|
{
|
|
HPEN hpen;
|
|
HPEN hpenOld;
|
|
const static RECT rcBmp = {0, 0, 6, 3};
|
|
|
|
hpen = CreatePen(PS_SOLID, 0, GetSysColor(COLOR_BTNTEXT));
|
|
hbmpTri = CreateCompatibleBitmap(hDC, 5, 3);
|
|
hbmpOld = (HBITMAP)SelectObject(hdcMem, hbmpTri);
|
|
|
|
FillRect( hdcMem, &rcBmp, (HBRUSH)(COLOR_3DFACE + 1) );
|
|
|
|
hpenOld = (HPEN)SelectObject(hdcMem, hpen);
|
|
|
|
MoveToEx(hdcMem, 0, 0, NULL);
|
|
LineTo(hdcMem, 5, 0);
|
|
MoveToEx(hdcMem, 1, 1, NULL);
|
|
LineTo(hdcMem, 4, 1);
|
|
MoveToEx(hdcMem, 2, 2, NULL);
|
|
LineTo(hdcMem, 3, 2);
|
|
|
|
SelectObject(hdcMem, hpenOld);
|
|
|
|
DeleteObject(hpen);
|
|
}
|
|
else
|
|
hbmpOld = (HBITMAP)SelectObject(hdcMem, hbmpTri);
|
|
|
|
|
|
BitBlt(hDC,
|
|
prc->left + ((prc->right - prc->left) / 2) - 3,
|
|
prc->top + ((prc->bottom - prc->top) / 2) - 1,
|
|
5, 3,
|
|
hdcMem,
|
|
0, 0, SRCCOPY);
|
|
|
|
SelectObject(hdcMem, hbmpOld);
|
|
DeleteDC(hdcMem);
|
|
}
|
|
#endif
|
|
|
|
/*=============================================================================*/
|
|
/* */
|
|
/* C U I B U T T O N */
|
|
/* */
|
|
/*=============================================================================*/
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
ctor
|
|
|
|
------------------------------------------------------------------------------*/
|
|
CUIFToolbarButtonElement::CUIFToolbarButtonElement( CUIFToolbarButton *pParent, DWORD dwID, RECT *prc, DWORD dwStyle) : CUIFButton2( pParent, dwID, prc, dwStyle )
|
|
{
|
|
_pTBButton = pParent;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
dtor
|
|
|
|
------------------------------------------------------------------------------*/
|
|
CUIFToolbarButtonElement::~CUIFToolbarButtonElement( void )
|
|
{
|
|
Assert(!m_pUIWnd);
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
OnLButtonUp
|
|
|
|
------------------------------------------------------------------------------*/
|
|
void CUIFToolbarButtonElement::OnLButtonUp( POINT pt )
|
|
{
|
|
CUIFButton2::OnLButtonUp(pt);
|
|
|
|
if (_pTBButton->IsMenuOnly())
|
|
_pTBButton->OnShowMenu();
|
|
else
|
|
_pTBButton->OnLeftClick();
|
|
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
OnRbuttonUp
|
|
|
|
------------------------------------------------------------------------------*/
|
|
void CUIFToolbarButtonElement::OnRButtonUp( POINT pt )
|
|
{
|
|
if (!_pTBButton->IsMenuOnly())
|
|
_pTBButton->OnRightClick();
|
|
|
|
CUIFButton2::OnRButtonUp(pt);
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
OnSetCursor
|
|
|
|
------------------------------------------------------------------------------*/
|
|
BOOL CUIFToolbarButtonElement::OnSetCursor( UINT uMsg, POINT pt )
|
|
{
|
|
_pTBButton->OnSetCursor(uMsg, pt);
|
|
return FALSE;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
OnSetCursor
|
|
|
|
------------------------------------------------------------------------------*/
|
|
LPCWSTR CUIFToolbarButtonElement::GetToolTip( void )
|
|
{
|
|
if (_pTBButton)
|
|
return _pTBButton->GetToolTip();
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/*=============================================================================*/
|
|
/* */
|
|
/* C U I B U T T O N */
|
|
/* */
|
|
/*=============================================================================*/
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
ctor
|
|
|
|
------------------------------------------------------------------------------*/
|
|
CUIFToolbarMenuButton::CUIFToolbarMenuButton( CUIFToolbarButton *pParent, DWORD dwID, RECT *prc, DWORD dwStyle) : CUIFButton2( pParent, dwID, prc, dwStyle )
|
|
{
|
|
_pTBButton = pParent;
|
|
HFONT hfont = CreateFont(8, 8, 0, 0, 400, FALSE, FALSE, FALSE, SYMBOL_CHARSET, 0, 0, 0, 0, "Marlett");
|
|
|
|
SetFont(hfont);
|
|
SetText(L"u");
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
dtor
|
|
|
|
------------------------------------------------------------------------------*/
|
|
CUIFToolbarMenuButton::~CUIFToolbarMenuButton( void )
|
|
{
|
|
HFONT hfontOld = GetFont();
|
|
DeleteObject(hfontOld);
|
|
SetFont((HFONT)NULL);
|
|
}
|
|
|
|
#if 0
|
|
/*------------------------------------------------------------------------------
|
|
|
|
OnPaint
|
|
|
|
------------------------------------------------------------------------------*/
|
|
void CUIFToolbarMenuButton::OnPaint( HDC hDC )
|
|
{
|
|
BOOL fDownFace;
|
|
|
|
// erase face at first
|
|
|
|
FillRect( hDC, &GetRectRef(), (HBRUSH)(COLOR_3DFACE + 1) );
|
|
#ifndef UNDER_CE
|
|
if (m_fToggled && (m_dwStatus == UIBUTTON_NORMAL || m_dwStatus == UIBUTTON_DOWNOUT)) {
|
|
RECT rc;
|
|
HBRUSH hBrush = CreateDitherBrush();
|
|
COLORREF colTextOld = SetTextColor( hDC, GetSysColor(COLOR_3DFACE) );
|
|
COLORREF colBackOld = SetBkColor( hDC, GetSysColor(COLOR_3DHILIGHT) );
|
|
|
|
rc = GetRectRef();
|
|
InflateRect( &rc, -2, -2 );
|
|
FillRect( hDC, &rc, hBrush );
|
|
|
|
SetTextColor( hDC, colTextOld );
|
|
SetBkColor( hDC, colBackOld );
|
|
DeleteObject( hBrush );
|
|
}
|
|
#endif /* !UNDER_CE */
|
|
|
|
// draw face
|
|
|
|
fDownFace = m_fToggled || (m_dwStatus == UIBUTTON_DOWN);
|
|
|
|
|
|
RECT rcDnArrow;
|
|
|
|
int nDownPad = fDownFace ? 1 : 0;
|
|
rcDnArrow = GetRectRef();
|
|
OffsetRect(&rcDnArrow, nDownPad, nDownPad);
|
|
DrawDownTri(hDC, &rcDnArrow);
|
|
|
|
|
|
// draw button edge
|
|
if (m_fToggled) {
|
|
DrawEdgeProc( hDC, &GetRectRef(), TRUE );
|
|
} else {
|
|
switch (m_dwStatus) {
|
|
case UIBUTTON_DOWN: {
|
|
DrawEdgeProc( hDC, &GetRectRef(), TRUE );
|
|
break;
|
|
}
|
|
|
|
case UIBUTTON_HOVER:
|
|
case UIBUTTON_DOWNOUT: {
|
|
DrawEdgeProc( hDC, &GetRectRef(), FALSE );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
OnPaint
|
|
|
|
------------------------------------------------------------------------------*/
|
|
void CUIFToolbarMenuButton::OnLButtonUp( POINT pt )
|
|
{
|
|
CUIFButton2::OnLButtonUp(pt);
|
|
_pTBButton->OnShowMenu();
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
OnPaint
|
|
|
|
------------------------------------------------------------------------------*/
|
|
BOOL CUIFToolbarMenuButton::OnSetCursor( UINT uMsg, POINT pt )
|
|
{
|
|
_pTBButton->OnSetCursor(uMsg, pt);
|
|
return FALSE;
|
|
}
|
|
|
|
/*=============================================================================*/
|
|
/* */
|
|
/* C U I B U T T O N */
|
|
/* */
|
|
/*=============================================================================*/
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
ctor
|
|
|
|
------------------------------------------------------------------------------*/
|
|
CUIFToolbarButton::CUIFToolbarButton( CUIFObject *pParent, DWORD dwID, RECT *prc, DWORD dwStyle, DWORD dwSBtnStyle, DWORD dwSBtnShowType) : CUIFObject( pParent, dwID, prc, dwStyle )
|
|
{
|
|
m_dwSBtnStyle = dwSBtnStyle;
|
|
m_dwSBtnShowType = dwSBtnShowType;
|
|
|
|
}
|
|
|
|
BOOL CUIFToolbarButton::Init()
|
|
{
|
|
RECT rc;
|
|
RECT rcMenuBtn;
|
|
|
|
rcMenuBtn =
|
|
rc = GetRectRef();
|
|
|
|
if (IsMenuButton())
|
|
{
|
|
rc.right -= 12;
|
|
rcMenuBtn.left = rc.right + 1;
|
|
}
|
|
|
|
_pBtn = new CUIFToolbarButtonElement(this, GetID(), &rc,
|
|
UIBUTTON_FITIMAGE |
|
|
UIBUTTON_VCENTER |
|
|
UIBUTTON_CENTER |
|
|
(IsToggle() ? UIBUTTON_TOGGLE : 0) |
|
|
(IsVertical() ? UIBUTTON_VERTICAL : 0));
|
|
|
|
if (!_pBtn)
|
|
return FALSE;
|
|
|
|
_pBtn->Initialize();
|
|
AddUIObj( _pBtn );
|
|
|
|
if (!IsEnabled())
|
|
_pBtn->Enable(FALSE);
|
|
|
|
|
|
if (IsMenuButton())
|
|
{
|
|
_pMenuBtn = new CUIFToolbarMenuButton(this,
|
|
0,
|
|
&rcMenuBtn,
|
|
UIBUTTON_VCENTER |
|
|
UIBUTTON_CENTER |
|
|
(IsVertical() ? UIBUTTON_VERTICAL : 0));
|
|
if (!_pMenuBtn)
|
|
return FALSE;
|
|
|
|
_pMenuBtn->Initialize();
|
|
AddUIObj( _pMenuBtn );
|
|
|
|
if (!IsEnabled())
|
|
_pMenuBtn->Enable(FALSE);
|
|
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
dtor
|
|
|
|
------------------------------------------------------------------------------*/
|
|
CUIFToolbarButton::~CUIFToolbarButton( void )
|
|
{
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
SetShowType
|
|
|
|
------------------------------------------------------------------------------*/
|
|
|
|
void CUIFToolbarButton::SetShowType(DWORD dwSBtnShowType)
|
|
{
|
|
m_dwSBtnShowType = dwSBtnShowType;
|
|
}
|
|
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
SetRect
|
|
|
|
------------------------------------------------------------------------------*/
|
|
|
|
void CUIFToolbarButton::SetRect( const RECT *prc )
|
|
{
|
|
|
|
RECT rc;
|
|
RECT rcMenuBtn;
|
|
|
|
CUIFObject::SetRect(prc);
|
|
|
|
rcMenuBtn =
|
|
rc = GetRectRef();
|
|
|
|
if (IsMenuButton())
|
|
{
|
|
rc.right -= 12;
|
|
rcMenuBtn.left = rc.right + 1;
|
|
}
|
|
|
|
if (_pBtn)
|
|
{
|
|
_pBtn->SetRect(&rc);
|
|
}
|
|
|
|
if (_pMenuBtn)
|
|
{
|
|
_pMenuBtn->SetRect(&rcMenuBtn);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void CUIFToolbarButton::Enable( BOOL fEnable )
|
|
{
|
|
CUIFObject::Enable(fEnable);
|
|
if (_pBtn)
|
|
_pBtn->Enable(fEnable);
|
|
|
|
if (_pMenuBtn)
|
|
_pMenuBtn->Enable(fEnable);
|
|
|
|
}
|
|
|
|
void CUIFToolbarButton::SetIcon( HICON hIcon )
|
|
{
|
|
Assert(PtrToInt(_pBtn));
|
|
_pBtn->SetIcon(hIcon);
|
|
}
|
|
|
|
HICON CUIFToolbarButton::GetIcon( )
|
|
{
|
|
Assert(PtrToInt(_pBtn));
|
|
return _pBtn->GetIcon();
|
|
}
|
|
|
|
void CUIFToolbarButton::SetBitmap( HBITMAP hBmp )
|
|
{
|
|
Assert(PtrToInt(_pBtn));
|
|
_pBtn->SetBitmap(hBmp);
|
|
}
|
|
|
|
HBITMAP CUIFToolbarButton::GetBitmap( )
|
|
{
|
|
Assert(PtrToInt(_pBtn));
|
|
return _pBtn->GetBitmap();
|
|
}
|
|
|
|
void CUIFToolbarButton::SetBitmapMask( HBITMAP hBmp )
|
|
{
|
|
Assert(PtrToInt(_pBtn));
|
|
_pBtn->SetBitmapMask(hBmp);
|
|
}
|
|
|
|
HBITMAP CUIFToolbarButton::GetBitmapMask( )
|
|
{
|
|
Assert(PtrToInt(_pBtn));
|
|
return _pBtn->GetBitmapMask();
|
|
}
|
|
|
|
void CUIFToolbarButton::SetText( WCHAR *psz)
|
|
{
|
|
Assert(PtrToInt(_pBtn));
|
|
_pBtn->SetText(psz);
|
|
}
|
|
|
|
void CUIFToolbarButton::SetFont( HFONT hFont)
|
|
{
|
|
Assert(PtrToInt(_pBtn));
|
|
_pBtn->SetFont(hFont);
|
|
}
|
|
|
|
void CUIFToolbarButton::SetToolTip( LPCWSTR pwchToolTip )
|
|
{
|
|
CUIFObject::SetToolTip(pwchToolTip);
|
|
|
|
if (_pBtn)
|
|
_pBtn->SetToolTip(pwchToolTip);
|
|
|
|
if (_pMenuBtn)
|
|
_pMenuBtn->SetToolTip(pwchToolTip);
|
|
}
|
|
|
|
LPCWSTR CUIFToolbarButton::GetToolTip( void )
|
|
{
|
|
return CUIFObject::GetToolTip();
|
|
}
|
|
|
|
BOOL CUIFToolbarButton::IsMenuOnly()
|
|
{
|
|
return ((m_dwSBtnStyle & (UITBBUTTON_BUTTON | UITBBUTTON_MENU)) == UITBBUTTON_MENU);
|
|
}
|
|
|
|
BOOL CUIFToolbarButton::IsMenuButton()
|
|
{
|
|
return ((m_dwSBtnStyle & (UITBBUTTON_BUTTON | UITBBUTTON_MENU)) == (UITBBUTTON_BUTTON | UITBBUTTON_MENU));
|
|
}
|
|
|
|
BOOL CUIFToolbarButton::IsButtonOnly()
|
|
{
|
|
return ((m_dwSBtnStyle & (UITBBUTTON_BUTTON | UITBBUTTON_MENU)) == (UITBBUTTON_BUTTON));
|
|
}
|
|
|
|
BOOL CUIFToolbarButton::IsToggle()
|
|
{
|
|
return (m_dwSBtnStyle & UITBBUTTON_TOGGLE) ? TRUE : FALSE;
|
|
}
|
|
|
|
BOOL CUIFToolbarButton::IsVertical()
|
|
{
|
|
return (m_dwSBtnStyle & UITBBUTTON_VERTICAL) ? TRUE : FALSE;
|
|
}
|
|
|
|
void CUIFToolbarButton::DetachWndObj( void )
|
|
{
|
|
if (_pBtn)
|
|
_pBtn->DetachWndObj();
|
|
|
|
if (_pMenuBtn)
|
|
_pMenuBtn->DetachWndObj();
|
|
|
|
#ifdef DEBUG
|
|
if (m_pUIWnd && m_pUIWnd->GetCaptureObject())
|
|
{
|
|
Assert(m_pUIWnd->GetCaptureObject() != _pBtn);
|
|
Assert(m_pUIWnd->GetCaptureObject() != _pMenuBtn);
|
|
Assert(m_pUIWnd->GetCaptureObject() != this);
|
|
}
|
|
#endif
|
|
|
|
CUIFObject::DetachWndObj();
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CUIFSeparator
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// OnPaint
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL CUIFSeparator::OnPaintTheme(HDC hDC)
|
|
{
|
|
BOOL fRet = FALSE;
|
|
int iStateID;
|
|
|
|
iStateID = TS_NORMAL;
|
|
|
|
if (FAILED(EnsureThemeData( GetUIWnd()->GetWnd())))
|
|
goto Exit;
|
|
|
|
if (FAILED(DrawThemeBackground(hDC, iStateID, &GetRectRef(), 0 )))
|
|
goto Exit;
|
|
|
|
|
|
fRet = TRUE;
|
|
Exit:
|
|
return fRet;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// OnPaintNoTheme
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
void CUIFSeparator::OnPaintNoTheme(HDC hDC)
|
|
{
|
|
CUIFWindow *pWnd = GetUIWnd();
|
|
CUIFScheme *pUIFScheme = pWnd->GetUIFScheme();
|
|
if (pUIFScheme) {
|
|
pUIFScheme->DrawSeparator(hDC, &GetRectRef(), IsVertical());
|
|
return;
|
|
}
|
|
|
|
CSolidPen hpenL;
|
|
CSolidPen hpenS;
|
|
HPEN hpenOld = NULL;
|
|
|
|
if (!hpenL.Init(GetSysColor(COLOR_3DHILIGHT)))
|
|
return;
|
|
|
|
if (!hpenS.Init(GetSysColor(COLOR_3DSHADOW)))
|
|
return;
|
|
|
|
|
|
if (!IsVertical())
|
|
{
|
|
hpenOld = (HPEN)SelectObject(hDC, (HPEN)hpenS);
|
|
MoveToEx(hDC, GetRectRef().left + 1, GetRectRef().top, NULL);
|
|
LineTo(hDC, GetRectRef().left + 1, GetRectRef().bottom);
|
|
|
|
SelectObject(hDC, (HPEN)hpenL);
|
|
MoveToEx(hDC, GetRectRef().left + 2, GetRectRef().top, NULL);
|
|
LineTo(hDC, GetRectRef().left + 2, GetRectRef().bottom);
|
|
}
|
|
else
|
|
{
|
|
hpenOld = (HPEN)SelectObject(hDC, (HPEN)hpenS);
|
|
MoveToEx(hDC, GetRectRef().left , GetRectRef().top + 1, NULL);
|
|
LineTo(hDC, GetRectRef().right, GetRectRef().top + 1);
|
|
|
|
SelectObject(hDC, (HPEN)hpenL);
|
|
MoveToEx(hDC, GetRectRef().left , GetRectRef().top + 2, NULL);
|
|
LineTo(hDC, GetRectRef().right, GetRectRef().top + 2);
|
|
}
|
|
|
|
SelectObject(hDC, hpenOld);
|
|
}
|