687 lines
17 KiB
C++
687 lines
17 KiB
C++
// BtnST.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "BtnSTICON.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
|
|
// CIconButton
|
|
|
|
CIconButton::CIconButton()
|
|
{
|
|
m_MouseOnButton = FALSE;
|
|
yxb = 0;
|
|
m_hIconIn = NULL;
|
|
m_hIconOut = NULL;
|
|
m_cxIcon = 0;
|
|
m_cyIcon = 0;
|
|
m_hCursor = NULL;
|
|
|
|
// Default type is "flat" button
|
|
m_bIsFlat = TRUE;
|
|
|
|
// By default draw border in "flat" button
|
|
m_bDrawBorder = TRUE;
|
|
|
|
// By default icon is aligned horizontally
|
|
m_nAlign = ST_ALIGN_HORIZ;
|
|
|
|
// By default show the text button
|
|
m_bShowText = TRUE;
|
|
|
|
// By default, for "flat" button, don't draw the focus rect
|
|
m_bDrawFlatFocus = FALSE;
|
|
|
|
SetDefaultInactiveBgColor();
|
|
SetDefaultInactiveFgColor();
|
|
SetDefaultActiveBgColor();
|
|
SetDefaultActiveFgColor();
|
|
} // End of CIconButton
|
|
|
|
|
|
CIconButton::~CIconButton()
|
|
{
|
|
// Destroy the icons (if any)
|
|
if (m_hIconIn != NULL) ::DeleteObject(m_hIconIn);
|
|
if (m_hIconOut != NULL) ::DeleteObject(m_hIconOut);
|
|
// Destroy the cursor (if any)
|
|
if (m_hCursor != NULL) ::DestroyCursor(m_hCursor);
|
|
} // End of ~CIconButton
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CIconButton, CButton)
|
|
//{{AFX_MSG_MAP(CIconButton)
|
|
ON_WM_CAPTURECHANGED()
|
|
ON_WM_SETCURSOR()
|
|
ON_WM_KILLFOCUS()
|
|
ON_WM_MOUSEMOVE()
|
|
ON_WM_LBUTTONUP()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
void CIconButton::SetIcon(int nIconInId, int nIconOutId, BYTE cx, BYTE cy)
|
|
{
|
|
HINSTANCE hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nIconInId),
|
|
RT_GROUP_ICON);
|
|
// Set icon when the mouse is IN the button
|
|
m_hIconIn = (HICON)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nIconInId), IMAGE_ICON, 0, 0, 0);
|
|
|
|
// Set icon when the mouse is OUT the button
|
|
m_hIconOut = (nIconOutId == NULL) ? m_hIconIn : (HICON)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nIconOutId), IMAGE_ICON, 0, 0, 0);
|
|
|
|
m_cxIcon = cx;
|
|
m_cyIcon = cy;
|
|
|
|
RedrawWindow();
|
|
} // End of SetIcon
|
|
|
|
|
|
BOOL CIconButton::SetBtnCursor(int nCursorId)
|
|
{
|
|
HINSTANCE hInstResource;
|
|
// Destroy any previous cursor
|
|
if (m_hCursor != NULL) ::DestroyCursor(m_hCursor);
|
|
m_hCursor = NULL;
|
|
|
|
// If we want a cursor
|
|
if (nCursorId != -1)
|
|
{
|
|
hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nCursorId),
|
|
RT_GROUP_CURSOR);
|
|
// Load icon resource
|
|
m_hCursor = (HCURSOR)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nCursorId), IMAGE_CURSOR, 0, 0, 0);
|
|
// If something wrong then return FALSE
|
|
if (m_hCursor == NULL) return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
} // End of SetBtnCursor
|
|
|
|
|
|
void CIconButton::SetFlat(BOOL bState)
|
|
{
|
|
m_bIsFlat = bState;
|
|
Invalidate();
|
|
} // End of SetFlat
|
|
|
|
|
|
BOOL CIconButton::GetFlat()
|
|
{
|
|
return m_bIsFlat;
|
|
} // End of GetFlat
|
|
|
|
|
|
void CIconButton::SetAlign(int nAlign)
|
|
{
|
|
switch (nAlign)
|
|
{
|
|
case ST_ALIGN_HORIZ:
|
|
m_nAlign = ST_ALIGN_HORIZ;
|
|
break;
|
|
case ST_ALIGN_VERT:
|
|
m_nAlign = ST_ALIGN_VERT;
|
|
break;
|
|
}
|
|
Invalidate();
|
|
} // End of SetAlign
|
|
|
|
|
|
int CIconButton::GetAlign()
|
|
{
|
|
return m_nAlign;
|
|
} // End of GetAlign
|
|
|
|
|
|
void CIconButton::DrawBorder(BOOL bEnable)
|
|
{
|
|
m_bDrawBorder = bEnable;
|
|
} // End of DrawBorder
|
|
|
|
|
|
const TCHAR* CIconButton::GetVersionC()
|
|
{
|
|
return _T("2.3");
|
|
} // End of GetVersionC
|
|
|
|
|
|
const short CIconButton::GetVersionI()
|
|
{
|
|
return 23; // Divide by 10 to get actual version
|
|
} // End of GetVersionI
|
|
|
|
|
|
void CIconButton::SetShowText(BOOL bShow)
|
|
{
|
|
m_bShowText = bShow;
|
|
Invalidate();
|
|
} // End of SetShowText
|
|
|
|
|
|
BOOL CIconButton::GetShowText()
|
|
{
|
|
return m_bShowText;
|
|
} // End of GetShowText
|
|
|
|
|
|
void CIconButton::OnMouseMove(UINT nFlags, CPoint point)
|
|
{
|
|
CWnd* pWnd; // Finestra attiva
|
|
CWnd* pParent; // Finestra che contiene il bottone
|
|
|
|
CButton::OnMouseMove(nFlags, point);
|
|
|
|
// If the mouse enter the button with the left button pressed
|
|
// then do nothing
|
|
if (nFlags & MK_LBUTTON && m_MouseOnButton == FALSE) return;
|
|
|
|
// If our button is not flat then do nothing
|
|
if (m_bIsFlat == FALSE) return;
|
|
|
|
pWnd = GetActiveWindow();
|
|
pParent = GetOwner();
|
|
|
|
if ((GetCapture() != this) &&
|
|
(
|
|
#ifndef ST_LIKEIE
|
|
pWnd != NULL &&
|
|
#endif
|
|
pParent != NULL))
|
|
{
|
|
m_MouseOnButton = TRUE;
|
|
//SetFocus(); // Thanks Ralph!
|
|
SetCapture();
|
|
Invalidate();
|
|
}
|
|
else
|
|
{
|
|
CRect rc;
|
|
GetClientRect(&rc);
|
|
if (!rc.PtInRect(point))
|
|
{
|
|
// Redraw only if mouse goes out
|
|
if (m_MouseOnButton == TRUE)
|
|
{
|
|
m_MouseOnButton = FALSE;
|
|
Invalidate();
|
|
}
|
|
// If user is NOT pressing left button then release capture!
|
|
if (!(nFlags & MK_LBUTTON)) ReleaseCapture();
|
|
}
|
|
}
|
|
} // End of OnMouseMove
|
|
|
|
|
|
void CIconButton::OnKillFocus(CWnd * pNewWnd)
|
|
{
|
|
CButton::OnKillFocus(pNewWnd);
|
|
|
|
// If our button is not flat then do nothing
|
|
if (m_bIsFlat == FALSE) return;
|
|
|
|
if (m_MouseOnButton == TRUE)
|
|
{
|
|
m_MouseOnButton = FALSE;
|
|
Invalidate();
|
|
}
|
|
} // End of OnKillFocus
|
|
|
|
|
|
void CIconButton::OnCaptureChanged(CWnd *pWnd)
|
|
{
|
|
if (m_MouseOnButton == TRUE)
|
|
{
|
|
ReleaseCapture();
|
|
Invalidate();
|
|
}
|
|
|
|
// Call base message handler
|
|
CButton::OnCaptureChanged(pWnd);
|
|
} // End of OnCaptureChanged
|
|
//81,7360£¤
|
|
|
|
void CIconButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
|
|
{
|
|
#ifdef ST_USE_MEMDC
|
|
CDC *pdrawDC = CDC::FromHandle(lpDIS->hDC);
|
|
CMemDC memDC(pdrawDC);
|
|
CDC *pDC = &memDC;
|
|
#else
|
|
CDC* pDC = CDC::FromHandle(lpDIS->hDC);
|
|
#endif
|
|
|
|
CPen *pOldPen;
|
|
BOOL bIsPressed = (lpDIS->itemState & ODS_SELECTED);
|
|
BOOL bIsFocused = (lpDIS->itemState & ODS_FOCUS);
|
|
BOOL bIsDisabled = (lpDIS->itemState & ODS_DISABLED);
|
|
|
|
CRect itemRect = lpDIS->rcItem;
|
|
|
|
if (m_bIsFlat == FALSE)
|
|
{
|
|
if (bIsFocused)
|
|
{
|
|
CBrush br(RGB(0,0,0));
|
|
pDC->FrameRect(&itemRect, &br);
|
|
itemRect.DeflateRect(1, 1);
|
|
}
|
|
}
|
|
|
|
// Prepare draw... paint button's area with background color
|
|
COLORREF bgColor;
|
|
if ((m_MouseOnButton == TRUE) || (bIsPressed))
|
|
bgColor = GetActiveBgColor();
|
|
else
|
|
bgColor = GetInactiveBgColor();
|
|
|
|
CBrush br(bgColor);
|
|
pDC->FillRect(&itemRect, &br);
|
|
|
|
// Disegno lo sfondo del bottone
|
|
//CBrush br(GetSysColor(COLOR_BTNFACE));
|
|
//pDC->FillRect(&itemRect, &br);
|
|
|
|
// Draw pressed button
|
|
if (bIsPressed)
|
|
{
|
|
if (m_bIsFlat == TRUE)
|
|
{
|
|
if (m_bDrawBorder == TRUE)
|
|
{
|
|
CPen penBtnHiLight(PS_SOLID, 0, GetSysColor(COLOR_BTNHILIGHT)); // Bianco
|
|
CPen penBtnShadow(PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW)); // Grigio scuro
|
|
|
|
// Disegno i bordi a sinistra e in alto
|
|
// Dark gray line
|
|
pOldPen = pDC->SelectObject(&penBtnShadow);
|
|
pDC->MoveTo(itemRect.left, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.left, itemRect.top);
|
|
pDC->LineTo(itemRect.right, itemRect.top);
|
|
// Disegno i bordi a destra e in basso
|
|
// White line
|
|
pDC->SelectObject(penBtnHiLight);
|
|
pDC->MoveTo(itemRect.left, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.right-1, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.right-1, itemRect.top-1);
|
|
//
|
|
pDC->SelectObject(pOldPen);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CBrush brBtnShadow(GetSysColor(COLOR_BTNSHADOW));
|
|
pDC->FrameRect(&itemRect, &brBtnShadow);
|
|
}
|
|
}
|
|
else // ...else draw non pressed button
|
|
{
|
|
if(yxb == 0)
|
|
{
|
|
CPen penBtnHiLight(PS_SOLID, 0, GetSysColor(COLOR_BTNHILIGHT)); // White
|
|
CPen pen3DLight(PS_SOLID, 0, GetSysColor(COLOR_3DLIGHT)); // Light gray
|
|
CPen penBtnShadow(PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW)); // Dark gray
|
|
CPen pen3DDKShadow(PS_SOLID, 0, GetSysColor(COLOR_3DDKSHADOW)); // Black
|
|
|
|
if (m_bIsFlat == TRUE)
|
|
{
|
|
if (m_MouseOnButton == TRUE && m_bDrawBorder == TRUE)
|
|
{
|
|
// Disegno i bordi a sinistra e in alto
|
|
// White line
|
|
pOldPen = pDC->SelectObject(&penBtnHiLight);
|
|
pDC->MoveTo(itemRect.left, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.left, itemRect.top);
|
|
pDC->LineTo(itemRect.right, itemRect.top);
|
|
// Disegno i bordi a destra e in basso
|
|
// Dark gray line
|
|
pDC->SelectObject(penBtnShadow);
|
|
pDC->MoveTo(itemRect.left, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.right-1, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.right-1, itemRect.top-1);
|
|
//
|
|
pDC->SelectObject(pOldPen);
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Disegno i bordi a sinistra e in alto
|
|
// White line
|
|
pOldPen = pDC->SelectObject(&penBtnHiLight);
|
|
pDC->MoveTo(itemRect.left, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.left, itemRect.top);
|
|
pDC->LineTo(itemRect.right, itemRect.top);
|
|
// Light gray line
|
|
pDC->SelectObject(pen3DLight);
|
|
pDC->MoveTo(itemRect.left+1, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.left+1, itemRect.top+1);
|
|
pDC->LineTo(itemRect.right, itemRect.top+1);
|
|
// Disegno i bordi a destra e in basso
|
|
// Black line
|
|
pDC->SelectObject(pen3DDKShadow);
|
|
pDC->MoveTo(itemRect.left, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.right-1, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.right-1, itemRect.top-1);
|
|
// Dark gray line
|
|
pDC->SelectObject(penBtnShadow);
|
|
pDC->MoveTo(itemRect.left+1, itemRect.bottom-2);
|
|
pDC->LineTo(itemRect.right-2, itemRect.bottom-2);
|
|
pDC->LineTo(itemRect.right-2, itemRect.top);
|
|
//
|
|
pDC->SelectObject(pOldPen);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CPen penBtnHiLight(PS_SOLID, 0, GetSysColor(COLOR_BTNHILIGHT)); // White
|
|
CPen pen3DLight(PS_SOLID, 0, GetSysColor(COLOR_3DLIGHT)); // Light gray
|
|
CPen penBtnShadow(PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW)); // Dark gray
|
|
CPen pen3DDKShadow(PS_SOLID, 0, GetSysColor(COLOR_3DDKSHADOW)); // Black
|
|
|
|
if (m_bIsFlat == TRUE)
|
|
{
|
|
if (m_bDrawBorder == TRUE)
|
|
{
|
|
// Disegno i bordi a sinistra e in alto
|
|
// Dark gray line
|
|
pOldPen = pDC->SelectObject(&penBtnShadow);
|
|
pDC->MoveTo(itemRect.left, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.left, itemRect.top);
|
|
pDC->LineTo(itemRect.right, itemRect.top);
|
|
// Disegno i bordi a destra e in basso
|
|
// White line
|
|
pDC->SelectObject(penBtnHiLight);
|
|
pDC->MoveTo(itemRect.left, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.right-1, itemRect.bottom-1);
|
|
pDC->LineTo(itemRect.right-1, itemRect.top-1);
|
|
//
|
|
pDC->SelectObject(pOldPen);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
// Read the button title
|
|
CString sTitle;
|
|
GetWindowText(sTitle);
|
|
|
|
// If we don't want the title displayed
|
|
if (m_bShowText == FALSE) sTitle.Empty();
|
|
|
|
CRect captionRect = lpDIS->rcItem;
|
|
|
|
// Draw the icon
|
|
if (m_hIconIn != NULL)
|
|
{
|
|
DrawTheIcon(pDC, &sTitle, &lpDIS->rcItem, &captionRect, bIsPressed, bIsDisabled);
|
|
}
|
|
|
|
// Write the button title (if any)
|
|
if (sTitle.IsEmpty() == FALSE)
|
|
{
|
|
// Disegno la caption del bottone
|
|
// Se il bottone e' premuto muovo la captionRect di conseguenza
|
|
if (bIsPressed)
|
|
captionRect.OffsetRect(1, 1);
|
|
|
|
// ONLY FOR DEBUG
|
|
// Evidenzia il rettangolo in cui verra' centrata la caption
|
|
//CBrush brBtnShadow(RGB(255, 0, 0));
|
|
//pDC->FrameRect(&captionRect, &brBtnShadow);
|
|
|
|
#ifdef ST_USE_MEMDC
|
|
// Get dialog's font
|
|
CFont *pCurrentFont = GetFont();
|
|
CFont *pOldFont = pDC->SelectObject(pCurrentFont);
|
|
#endif
|
|
if ((m_MouseOnButton == TRUE) || (bIsPressed))
|
|
{
|
|
pDC->SetTextColor(GetActiveFgColor());
|
|
pDC->SetBkColor(GetActiveBgColor());
|
|
}
|
|
else
|
|
{
|
|
pDC->SetTextColor(GetInactiveFgColor());
|
|
pDC->SetBkColor(GetInactiveBgColor());
|
|
}
|
|
// Center text
|
|
CRect centerRect = captionRect;
|
|
pDC->DrawText(sTitle, -1, captionRect, DT_SINGLELINE|DT_CALCRECT);
|
|
captionRect.OffsetRect((centerRect.Width() - captionRect.Width())/2, (centerRect.Height() - captionRect.Height())/2);
|
|
/* RFU
|
|
captionRect.OffsetRect(0, (centerRect.Height() - captionRect.Height())/2);
|
|
captionRect.OffsetRect((centerRect.Width() - captionRect.Width())-4, (centerRect.Height() - captionRect.Height())/2);
|
|
*/
|
|
|
|
pDC->DrawState(captionRect.TopLeft(), captionRect.Size(), (LPCTSTR)sTitle, (bIsDisabled ? DSS_DISABLED : DSS_NORMAL),
|
|
TRUE, 0, (CBrush*)NULL);
|
|
#ifdef ST_USE_MEMDC
|
|
pDC->SelectObject(pOldFont);
|
|
#endif
|
|
}
|
|
|
|
if (m_bIsFlat == FALSE || (m_bIsFlat == TRUE && m_bDrawFlatFocus == TRUE))
|
|
{
|
|
// Draw the focus rect
|
|
if (bIsFocused)
|
|
{
|
|
CRect focusRect = itemRect;
|
|
focusRect.DeflateRect(3, 3);
|
|
pDC->DrawFocusRect(&focusRect);
|
|
}
|
|
}
|
|
} // End of DrawItem
|
|
|
|
|
|
void CIconButton::DrawTheIcon(CDC* pDC, CString* title, RECT* rcItem, CRect* captionRect, BOOL IsPressed, BOOL IsDisabled)
|
|
{
|
|
CRect iconRect = rcItem;
|
|
|
|
switch (m_nAlign)
|
|
{
|
|
case ST_ALIGN_HORIZ:
|
|
if (title->IsEmpty())
|
|
{
|
|
// Center the icon horizontally
|
|
iconRect.left += ((iconRect.Width() - m_cxIcon)/2);
|
|
}
|
|
else
|
|
{
|
|
// L'icona deve vedersi subito dentro il focus rect
|
|
iconRect.left += 3;
|
|
captionRect->left += m_cxIcon + 3;
|
|
}
|
|
// Center the icon vertically
|
|
iconRect.top += ((iconRect.Height() - m_cyIcon)/2);
|
|
break;
|
|
case ST_ALIGN_VERT:
|
|
// Center the icon horizontally
|
|
iconRect.left += ((iconRect.Width() - m_cxIcon)/2);
|
|
if (title->IsEmpty())
|
|
{
|
|
// Center the icon vertically
|
|
iconRect.top += ((iconRect.Height() - m_cyIcon)/2);
|
|
}
|
|
else
|
|
{
|
|
captionRect->top += m_cyIcon;
|
|
}
|
|
break;
|
|
}
|
|
|
|
// If button is pressed then press the icon also
|
|
if (IsPressed) iconRect.OffsetRect(1, 1);
|
|
// Ole'!
|
|
pDC->DrawState(iconRect.TopLeft(),
|
|
iconRect.Size(),
|
|
(m_MouseOnButton == TRUE || IsPressed) ? m_hIconIn : m_hIconOut,
|
|
(IsDisabled ? DSS_DISABLED : DSS_NORMAL),
|
|
(CBrush*)NULL);
|
|
} // End of DrawTheIcon
|
|
|
|
|
|
void CIconButton::PreSubclassWindow()
|
|
{
|
|
// Add BS_OWNERDRAW style
|
|
SetButtonStyle(GetButtonStyle() | BS_OWNERDRAW);
|
|
CButton::PreSubclassWindow();
|
|
} // End of PreSubclassWindow
|
|
|
|
|
|
void CIconButton::SetDefaultInactiveBgColor(BOOL bRepaint)
|
|
{
|
|
m_crInactiveBg = ::GetSysColor(COLOR_BTNFACE);
|
|
if (bRepaint == TRUE) Invalidate();
|
|
} // End of SetDefaultInactiveBgColor
|
|
|
|
|
|
void CIconButton::SetInactiveBgColor(COLORREF crNew, BOOL bRepaint)
|
|
{
|
|
m_crInactiveBg = crNew;
|
|
if (bRepaint == TRUE) Invalidate();
|
|
} // End of SetInactiveBgColor
|
|
|
|
|
|
const COLORREF CIconButton::GetInactiveBgColor()
|
|
{
|
|
return m_crInactiveBg;
|
|
} // End of GetInactiveBgColor
|
|
|
|
|
|
void CIconButton::SetDefaultInactiveFgColor(BOOL bRepaint)
|
|
{
|
|
m_crInactiveFg = ::GetSysColor(COLOR_BTNTEXT);
|
|
if (bRepaint == TRUE) Invalidate();
|
|
} // End of SetDefaultInactiveFgColor
|
|
|
|
|
|
void CIconButton::SetInactiveFgColor(COLORREF crNew, BOOL bRepaint)
|
|
{
|
|
m_crInactiveFg = crNew;
|
|
if (bRepaint == TRUE) Invalidate();
|
|
} // End of SetInactiveFgColor
|
|
|
|
|
|
const COLORREF CIconButton::GetInactiveFgColor()
|
|
{
|
|
return m_crInactiveFg;
|
|
} // End of GetInactiveFgColor
|
|
|
|
|
|
void CIconButton::SetDefaultActiveBgColor(BOOL bRepaint)
|
|
{
|
|
m_crActiveBg = ::GetSysColor(COLOR_BTNFACE);
|
|
if (bRepaint == TRUE) Invalidate();
|
|
} // End of SetDefaultActiveBgColor
|
|
|
|
|
|
void CIconButton::SetActiveBgColor(COLORREF crNew, BOOL bRepaint)
|
|
{
|
|
m_crActiveBg = crNew;
|
|
if (bRepaint == TRUE) Invalidate();
|
|
} // End of SetActiveBgColor
|
|
|
|
|
|
const COLORREF CIconButton::GetActiveBgColor()
|
|
{
|
|
return m_crActiveBg;
|
|
} // End of GetActiveBgColor
|
|
|
|
|
|
void CIconButton::SetDefaultActiveFgColor(BOOL bRepaint)
|
|
{
|
|
m_crActiveFg = ::GetSysColor(COLOR_BTNTEXT);
|
|
if (bRepaint == TRUE) Invalidate();
|
|
} // End of SetDefaultActiveFgColor
|
|
|
|
|
|
void CIconButton::SetActiveFgColor(COLORREF crNew, BOOL bRepaint)
|
|
{
|
|
m_crActiveFg = crNew;
|
|
if (bRepaint == TRUE) Invalidate();
|
|
} // End of SetActiveFgColor
|
|
|
|
|
|
const COLORREF CIconButton::GetActiveFgColor()
|
|
{
|
|
return m_crActiveFg;
|
|
} // End of GetActiveFgColor
|
|
|
|
|
|
void CIconButton::SetFlatFocus(BOOL bDrawFlatFocus, BOOL bRepaint)
|
|
{
|
|
m_bDrawFlatFocus = bDrawFlatFocus;
|
|
|
|
// Repaint the button
|
|
if (bRepaint == TRUE) Invalidate();
|
|
} // End of SetFlatFocus
|
|
|
|
|
|
BOOL CIconButton::GetFlatFocus()
|
|
{
|
|
return m_bDrawFlatFocus;
|
|
} // End of GetFlatFocus
|
|
|
|
|
|
BOOL CIconButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
|
|
{
|
|
// If a cursor was specified then use it!
|
|
if (m_hCursor != NULL)
|
|
{
|
|
::SetCursor(m_hCursor);
|
|
return TRUE;
|
|
}
|
|
|
|
return CButton::OnSetCursor(pWnd, nHitTest, message);
|
|
} // End of OnSetCursor
|
|
|
|
#undef ST_USE_MEMDC
|
|
#undef ST_LIKE
|
|
|
|
void CIconButton::OnLButtonUp(UINT nFlags, CPoint point)
|
|
{
|
|
if(m_csHelpKey != _T("")){
|
|
XString sFile(256);
|
|
TCHAR keywords[256];
|
|
_tcscpy(keywords, (const TCHAR*)m_csHelpKey);
|
|
HH_AKLINK link;
|
|
link.cbStruct = sizeof(HH_AKLINK) ;
|
|
link.fReserved = FALSE ;
|
|
link.pszKeywords = keywords ;
|
|
link.pszUrl = NULL ;
|
|
link.pszMsgText = NULL ;
|
|
link.pszMsgTitle = NULL ;
|
|
link.pszWindow = NULL ;
|
|
link.fIndexOnFail = TRUE ;
|
|
|
|
//mod liaoy 170817 ¶ÔÈçC:\\Tangent\\sys18x64²éÕÒsysÎļþ¼Ð´íÎó,¸ÄΪֱ½Ó²éÕÒ°ïÖúÎļþ
|
|
//CString csSysPath = g_sAppPath;
|
|
//csSysPath = csSysPath.Left(csSysPath.GetLength() - 7) + _T("\\sys\\");
|
|
//sFile << csSysPath << _T("TElec.chm");
|
|
if (!FindFile(_T("TElec.chm"),sFile))
|
|
return;
|
|
//mod end
|
|
|
|
::HtmlHelp(NULL,(LPCTSTR)sFile,HH_DISPLAY_TOPIC ,NULL);
|
|
|
|
//win10¿ÉÄܵ¼Ö±ÀÀ£
|
|
//::HtmlHelp(NULL, (LPCTSTR)sFile, HH_KEYWORD_LOOKUP, (DWORD)&link);
|
|
//::HtmlHelp(NULL, (LPCTSTR)sFile, HH_DISPLAY_INDEX, (DWORD)keywords);
|
|
::HtmlHelp(NULL, (LPCTSTR)sFile, HH_KEYWORD_LOOKUP, (DWORD_PTR)&link);
|
|
::HtmlHelp(NULL, (LPCTSTR)sFile, HH_DISPLAY_INDEX, (DWORD_PTR)keywords);
|
|
return;
|
|
}
|
|
CButton::OnLButtonUp(nFlags, point);
|
|
}
|