Leaked source code of windows server 2003
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

//
// 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);
}