|
@@ -0,0 +1,1364 @@
|
|
|
+// Label.cpp : implementation file
|
|
|
+//
|
|
|
+
|
|
|
+#include "stdafx.h"
|
|
|
+#include "SubLabel.h"
|
|
|
+
|
|
|
+#ifdef _DEBUG
|
|
|
+#define new DEBUG_NEW
|
|
|
+#undef THIS_FILE
|
|
|
+static char THIS_FILE[] = __FILE__;
|
|
|
+#endif
|
|
|
+
|
|
|
+BEGIN_MESSAGE_MAP(CLabel, CStatic)
|
|
|
+ //{{AFX_MSG_MAP(CLabel)
|
|
|
+ ON_WM_TIMER()
|
|
|
+ ON_WM_LBUTTONDOWN()
|
|
|
+ ON_WM_SETCURSOR()
|
|
|
+ ON_WM_SYSCOLORCHANGE()
|
|
|
+ ON_WM_PAINT()
|
|
|
+ ON_WM_ERASEBKGND()
|
|
|
+ //}}AFX_MSG_MAP
|
|
|
+ ON_WM_CTLCOLOR_REFLECT()
|
|
|
+END_MESSAGE_MAP()
|
|
|
+
|
|
|
+/////////////////////////////////////////////////////////////////////////////
|
|
|
+// CLabel Version 1.2
|
|
|
+//
|
|
|
+// From now on I'll try to keep a log of fixes and enhancements...
|
|
|
+//
|
|
|
+// The new feature were added due to the response of people.
|
|
|
+// All I ask is to all you programmers out there, is if you add, fix or
|
|
|
+// enhance this code, sent me a copy and I'll send the copy on to www.codeproject.com
|
|
|
+//
|
|
|
+// Happy Software Engineer :)
|
|
|
+//
|
|
|
+// New features include:
|
|
|
+//
|
|
|
+// A. Support for 3D Fonts
|
|
|
+// B. Support for background transparency
|
|
|
+// C. More comments provided
|
|
|
+// D. If alignment is 'centered' and the window text is seperated by '\r\n'
|
|
|
+// the will be centered accordingly - requested by someone @ nasa ;)
|
|
|
+// E. Support for font rotation.
|
|
|
+// F. Respond to System Color Change
|
|
|
+// G. OnPaint improved performance - using Double Buffering Technique
|
|
|
+//
|
|
|
+// Thanks to:
|
|
|
+// Mark McDowell - For suggestion on 'Increasing the flexibility of "hypertext" setting...'
|
|
|
+// Erich Ruth - For suggestion on 'Font Rotation'
|
|
|
+//
|
|
|
+
|
|
|
+/////////////////////////////////////////////////////////////////////////////
|
|
|
+// CLabel Version 1.3
|
|
|
+//
|
|
|
+// A. Added SS_LEFTNOWORDWRAP to include wordwrap
|
|
|
+// B. Fix repainting problem
|
|
|
+// C. Fix SetBkColor
|
|
|
+// D. Added SS_CENTER
|
|
|
+
|
|
|
+// Thanks to:
|
|
|
+// Marius - Added styling problem.
|
|
|
+// Azing Vondeling & Broker - Spotting painting Problem.
|
|
|
+// Mel Stober - Back Color & SS_CENTER
|
|
|
+//
|
|
|
+/////////////////////////////////////////////////////////////////////////////
|
|
|
+// CLabel Version 1.4
|
|
|
+//
|
|
|
+// A. Fix to transparency mode
|
|
|
+// B. Added new SetText3DHiliteColor to change the 3D Font face color - default is white.
|
|
|
+//
|
|
|
+// Thanks to:
|
|
|
+// michael.groeger - Spotting Transparency with other controls bug.
|
|
|
+//
|
|
|
+//
|
|
|
+/////////////////////////////////////////////////////////////////////////////
|
|
|
+// CLabel Version 1.5
|
|
|
+//
|
|
|
+// A. Sanity handle check
|
|
|
+// B. Support Interface Charset
|
|
|
+// C. Check compilition with _UNICODE
|
|
|
+// D. Fix hyperlink feature
|
|
|
+// E. Support default Dialog Font
|
|
|
+// F. Inclusion of SS_OWNERDRAW via control creation and subclassing
|
|
|
+// G. Modification to Text aligmnent code
|
|
|
+// H. New background gradient fill function
|
|
|
+//
|
|
|
+// Thanks to:
|
|
|
+// Steve Kowald - Using null handles
|
|
|
+// Alan Chan - Supporting International Windows
|
|
|
+// Dieter Fauth - Request for default Dialog font
|
|
|
+// Herb Illfelder - Text Alignment code
|
|
|
+//
|
|
|
+/////////////////////////////////////////////////////////////////////////////
|
|
|
+// CLabel Version 1.6
|
|
|
+// Jeroen Roosendaal - SetFont suggestion
|
|
|
+// Laurent - Spotting SelectObject bugs
|
|
|
+// Bernie - Fix PreCreateWindow bug
|
|
|
+// Jignesh I. Patel - Added expanded tabs feature
|
|
|
+// Jim Farmelant - Fix SetText crash
|
|
|
+
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::CLabel
|
|
|
+//
|
|
|
+// Description: Default contructor
|
|
|
+//
|
|
|
+// INPUTS:
|
|
|
+//
|
|
|
+// RETURNS:
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel::CLabel()
|
|
|
+{
|
|
|
+ m_crText = GetSysColor(COLOR_WINDOWTEXT);
|
|
|
+
|
|
|
+ // 1.1
|
|
|
+ m_hBackBrush = NULL;
|
|
|
+
|
|
|
+
|
|
|
+ m_crHiColor = 0;
|
|
|
+ m_crLoColor = 0;
|
|
|
+
|
|
|
+ m_bTimer = FALSE;
|
|
|
+ m_bState = FALSE;
|
|
|
+ m_bTransparent = FALSE;
|
|
|
+ m_Link = LinkNone;
|
|
|
+ m_hCursor = NULL;
|
|
|
+ m_Type = None;
|
|
|
+ m_bFont3d = FALSE;
|
|
|
+ m_bNotifyParent = FALSE;
|
|
|
+ m_bToolTips = FALSE;
|
|
|
+ m_bRotation = FALSE;
|
|
|
+ m_fillmode = Normal;
|
|
|
+ m_cr3DHiliteColor = RGB(255,255,255);
|
|
|
+ m_strText = _T("");
|
|
|
+ m_hwndBrush = ::CreateSolidBrush(GetSysColor(COLOR_3DFACE));
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::~CLabel
|
|
|
+//
|
|
|
+// Description:
|
|
|
+//
|
|
|
+// INPUTS:
|
|
|
+//
|
|
|
+// RETURNS:
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+// NT ALMOND 15092000 1.5 Handle Check
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel::~CLabel()
|
|
|
+{
|
|
|
+ // Clean up
|
|
|
+ m_font.DeleteObject();
|
|
|
+ ::DeleteObject(m_hwndBrush);
|
|
|
+
|
|
|
+ // Stop Checking complaining
|
|
|
+ if (m_hBackBrush)
|
|
|
+ ::DeleteObject(m_hBackBrush);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void CLabel::UpdateSurface()
|
|
|
+{
|
|
|
+ CRect (rc);
|
|
|
+ GetWindowRect(rc);
|
|
|
+ RedrawWindow();
|
|
|
+
|
|
|
+ GetParent()->ScreenToClient(rc);
|
|
|
+ GetParent()->InvalidateRect(rc,TRUE);
|
|
|
+ GetParent()->UpdateWindow();
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::ReconstructFont
|
|
|
+//
|
|
|
+// Description: Helper function to build font after it was changed
|
|
|
+//
|
|
|
+// INPUTS:
|
|
|
+//
|
|
|
+// RETURNS:
|
|
|
+//
|
|
|
+// NOTES: PROTECTED
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+void CLabel::ReconstructFont()
|
|
|
+{
|
|
|
+ m_font.DeleteObject();
|
|
|
+ BOOL bCreated = m_font.CreateFontIndirect(&m_lf);
|
|
|
+
|
|
|
+ ASSERT(bCreated);
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::OnPaint
|
|
|
+//
|
|
|
+// Description: Handles all the drawing code for the label
|
|
|
+//
|
|
|
+// INPUTS:
|
|
|
+//
|
|
|
+// RETURNS:
|
|
|
+//
|
|
|
+// NOTES: Called by Windows... not by USER
|
|
|
+// Probably needs tiding up a some point.
|
|
|
+// Different states will require this code to be reworked.
|
|
|
+//
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 22/10/98 1.0 Origin
|
|
|
+// NT ALMOND 15092000 1.5 Handle Check
|
|
|
+// NT ALMOND 15092000 1.5 Alignment mods
|
|
|
+// NT ALMOND 15092000 1.5 Gradient Fill Mode
|
|
|
+// NT ALMOND 02072002 1.6 Fill SelectObject bugs
|
|
|
+// NT ALMOND 02072002 1.6 Added to expand tabs
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+
|
|
|
+void CLabel::OnPaint()
|
|
|
+{
|
|
|
+ CPaintDC dc(this); // device context for painting
|
|
|
+
|
|
|
+ DWORD dwFlags = 0;
|
|
|
+
|
|
|
+ CRect rc;
|
|
|
+ GetClientRect(rc);
|
|
|
+ if (m_strText.IsEmpty())
|
|
|
+ GetWindowText(m_strText);
|
|
|
+ CBitmap bmp;
|
|
|
+
|
|
|
+
|
|
|
+ ///////////////////////////////////////////////////////
|
|
|
+ //
|
|
|
+ // Set up for double buffering...
|
|
|
+ //
|
|
|
+ CDC* pDCMem;
|
|
|
+ CBitmap* pOldBitmap = NULL;
|
|
|
+
|
|
|
+ if (!m_bTransparent)
|
|
|
+ {
|
|
|
+ pDCMem = new CDC;
|
|
|
+ pDCMem->CreateCompatibleDC(&dc);
|
|
|
+ bmp.CreateCompatibleBitmap(&dc,rc.Width(),rc.Height());
|
|
|
+ pOldBitmap = pDCMem->SelectObject(&bmp);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ pDCMem = &dc;
|
|
|
+ }
|
|
|
+
|
|
|
+ UINT nMode = pDCMem->SetBkMode(TRANSPARENT);
|
|
|
+
|
|
|
+
|
|
|
+ COLORREF crText = pDCMem->SetTextColor(m_crText);
|
|
|
+ CFont *pOldFont = pDCMem->SelectObject(&m_font);
|
|
|
+
|
|
|
+
|
|
|
+ // Fill in backgound if not transparent
|
|
|
+ if (!m_bTransparent)
|
|
|
+ {
|
|
|
+ if (m_fillmode == Normal)
|
|
|
+ {
|
|
|
+ CBrush br;
|
|
|
+
|
|
|
+ if (m_hBackBrush != NULL)
|
|
|
+ br.Attach(m_hBackBrush);
|
|
|
+ else
|
|
|
+ br.Attach(m_hwndBrush);
|
|
|
+
|
|
|
+ pDCMem->FillRect(rc,&br);
|
|
|
+
|
|
|
+ br.Detach();
|
|
|
+ }
|
|
|
+ else // Gradient Fill
|
|
|
+ {
|
|
|
+ DrawGradientFill(pDCMem, &rc, m_crLoColor, m_crHiColor, 100);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // If the text is flashing turn the text color on
|
|
|
+ // then to the color of the window background.
|
|
|
+
|
|
|
+ LOGBRUSH lb;
|
|
|
+ ZeroMemory(&lb,sizeof(lb));
|
|
|
+
|
|
|
+ // Stop Checking complaining
|
|
|
+ if (m_hBackBrush)
|
|
|
+ ::GetObject(m_hBackBrush,sizeof(lb),&lb);
|
|
|
+
|
|
|
+
|
|
|
+ // Something to do with flashing
|
|
|
+ if (!m_bState && m_Type == Text)
|
|
|
+ {
|
|
|
+ //ZeroMemory(&lb,sizeof(lb));
|
|
|
+ lb.lbColor = RGB(255,0,255);
|
|
|
+ pDCMem->SetTextColor(lb.lbColor);
|
|
|
+ }
|
|
|
+
|
|
|
+ DWORD style = GetStyle();
|
|
|
+
|
|
|
+ switch (style & SS_TYPEMASK)
|
|
|
+ {
|
|
|
+ case SS_RIGHT:
|
|
|
+ dwFlags = DT_RIGHT | DT_WORDBREAK;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case SS_CENTER:
|
|
|
+ dwFlags = SS_CENTER | DT_WORDBREAK;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case SS_LEFTNOWORDWRAP:
|
|
|
+ dwFlags = DT_LEFT;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default: // treat other types as left
|
|
|
+ case SS_LEFT:
|
|
|
+ dwFlags = DT_LEFT | DT_WORDBREAK;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // Added to expand tabs...
|
|
|
+ if(m_strText.Find(_T('\t')) != -1)
|
|
|
+ dwFlags |= DT_EXPANDTABS;
|
|
|
+
|
|
|
+ // If the text centered make an assumtion that
|
|
|
+ // the will want to center verticly as well
|
|
|
+ if (style & SS_CENTERIMAGE)
|
|
|
+ {
|
|
|
+ dwFlags = DT_CENTER;
|
|
|
+
|
|
|
+ // Apply
|
|
|
+ if (m_strText.Find(_T("\r\n")) == -1)
|
|
|
+ {
|
|
|
+ dwFlags |= DT_VCENTER;
|
|
|
+
|
|
|
+ // And because DT_VCENTER only works with single lines
|
|
|
+ dwFlags |= DT_SINGLELINE;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //
|
|
|
+ // 3333 DDDDD
|
|
|
+ // 3 D D
|
|
|
+ // 33 D D E F X
|
|
|
+ // 3 D D
|
|
|
+ // 3333 DDDDD
|
|
|
+ //
|
|
|
+ //
|
|
|
+ if (m_bRotation)
|
|
|
+ {
|
|
|
+ int nAlign = pDCMem->SetTextAlign (TA_BASELINE);
|
|
|
+
|
|
|
+ CPoint pt;
|
|
|
+ GetViewportOrgEx (pDCMem->m_hDC,&pt) ;
|
|
|
+ SetViewportOrgEx (pDCMem->m_hDC,rc.Width() / 2, rc.Height() / 2, NULL) ;
|
|
|
+ pDCMem->TextOut(0, 0, m_strText);
|
|
|
+ SetViewportOrgEx (pDCMem->m_hDC,pt.x / 2, pt.y / 2, NULL) ;
|
|
|
+ pDCMem->SetTextAlign (nAlign);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ pDCMem->DrawText(m_strText, rc, dwFlags);
|
|
|
+ if (m_bFont3d)
|
|
|
+ {
|
|
|
+ pDCMem->SetTextColor(m_cr3DHiliteColor);
|
|
|
+
|
|
|
+ if (m_3dType == Raised)
|
|
|
+ rc.OffsetRect(-1,-1);
|
|
|
+ else
|
|
|
+ rc.OffsetRect(1,1);
|
|
|
+
|
|
|
+ pDCMem->DrawText(m_strText, rc, dwFlags);
|
|
|
+ m_3dType;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Restore DC's State
|
|
|
+ pDCMem->SetBkMode(nMode);
|
|
|
+ pDCMem->SelectObject(pOldFont);
|
|
|
+ pDCMem->SetTextColor(crText);
|
|
|
+
|
|
|
+ if (!m_bTransparent)
|
|
|
+ {
|
|
|
+ dc.BitBlt(0, 0, rc.Width(), rc.Height(), pDCMem, 0, 0, SRCCOPY);
|
|
|
+ // continue DC restore
|
|
|
+ pDCMem->SelectObject ( pOldBitmap ) ;
|
|
|
+ delete pDCMem;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::OnTimer
|
|
|
+//
|
|
|
+// Description: Used in conjunction with 'FLASH' functions
|
|
|
+//
|
|
|
+// INPUTS: Windows API
|
|
|
+//
|
|
|
+// RETURNS: Windows API
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+void CLabel::OnTimer(UINT nIDEvent)
|
|
|
+{
|
|
|
+
|
|
|
+ m_bState = !m_bState;
|
|
|
+
|
|
|
+ UpdateSurface();
|
|
|
+
|
|
|
+ CStatic::OnTimer(nIDEvent);
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::OnSetCursor
|
|
|
+//
|
|
|
+// Description: Used in conjunction with 'LINK' function
|
|
|
+//
|
|
|
+// INPUTS: Windows API
|
|
|
+//
|
|
|
+// RETURNS: Windows API
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+BOOL CLabel::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
|
|
|
+{
|
|
|
+
|
|
|
+ if (m_hCursor)
|
|
|
+ {
|
|
|
+ ::SetCursor(m_hCursor);
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ return CStatic::OnSetCursor(pWnd, nHitTest, message);
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::OnLButtonDown
|
|
|
+//
|
|
|
+// Description: Called when a link is click on
|
|
|
+//
|
|
|
+// INPUTS: Windows API
|
|
|
+//
|
|
|
+// RETURNS: Windows API
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+// NT ALMOND 02072002 1.6 Added Mail support
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+void CLabel::OnLButtonDown(UINT nFlags, CPoint point)
|
|
|
+{
|
|
|
+
|
|
|
+ if (!m_bNotifyParent) // Fix
|
|
|
+ {
|
|
|
+ CString strLink;
|
|
|
+
|
|
|
+ GetWindowText(strLink);
|
|
|
+ if (m_Link == HyperLink)
|
|
|
+ {
|
|
|
+ ShellExecute(NULL,_T("open"),m_sLink.IsEmpty() ? strLink : m_sLink,NULL,NULL,SW_SHOWNORMAL);
|
|
|
+ }
|
|
|
+ if (m_Link == MailLink)
|
|
|
+ {
|
|
|
+ strLink = _T("mailto:") + strLink;
|
|
|
+ ShellExecute( NULL, NULL, strLink, NULL, NULL, SW_SHOWNORMAL );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // To use notification in parent window
|
|
|
+ // Respond to a OnNotify in parent and disassemble the message
|
|
|
+ //
|
|
|
+ NMHDR nm;
|
|
|
+
|
|
|
+ nm.hwndFrom = GetSafeHwnd();
|
|
|
+ nm.idFrom = GetDlgCtrlID();
|
|
|
+ nm.code = NM_LINKCLICK;
|
|
|
+ GetParent()->SendMessage(WM_NOTIFY,nm.idFrom,(LPARAM) &nm);
|
|
|
+ }
|
|
|
+
|
|
|
+ CStatic::OnLButtonDown(nFlags, point);
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+// THE FUNCTIONS START HERE :----
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetText
|
|
|
+//
|
|
|
+// Description: Short cut to set window text - caption - label
|
|
|
+//
|
|
|
+// INPUTS: Text to use
|
|
|
+//
|
|
|
+// RETURNS: Reference to this
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26081998 1.0 Origin
|
|
|
+// NT ALMOND 02072002 1.6 Crash Fix
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetText(const CString& strText)
|
|
|
+{
|
|
|
+ if(IsWindow(this->GetSafeHwnd()))
|
|
|
+ {
|
|
|
+ //SetWindowText(strText);
|
|
|
+ m_strText = strText;
|
|
|
+ UpdateSurface();
|
|
|
+ }
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetTextColor
|
|
|
+//
|
|
|
+// Description: Sets the text color
|
|
|
+//
|
|
|
+// INPUTS: True or false
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 22/10/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetTextColor(COLORREF crText)
|
|
|
+{
|
|
|
+
|
|
|
+ m_crText = crText;
|
|
|
+
|
|
|
+ UpdateSurface();
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetFontBold
|
|
|
+//
|
|
|
+// Description: Sets the font ot bold
|
|
|
+//
|
|
|
+// INPUTS: True or false
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 22/10/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetFontBold(BOOL bBold)
|
|
|
+{
|
|
|
+
|
|
|
+ m_lf.lfWeight = bBold ? FW_BOLD : FW_NORMAL;
|
|
|
+ ReconstructFont();
|
|
|
+ UpdateSurface();
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetFontUnderline
|
|
|
+//
|
|
|
+// Description: Sets font underline attribue
|
|
|
+//
|
|
|
+// INPUTS: True of false
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetFontUnderline(BOOL bSet)
|
|
|
+{
|
|
|
+ m_lf.lfUnderline = bSet;
|
|
|
+ ReconstructFont();
|
|
|
+ UpdateSurface();
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetFontItalic
|
|
|
+//
|
|
|
+// Description: Sets font italic attribute
|
|
|
+//
|
|
|
+// INPUTS: True of false
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetFontItalic(BOOL bSet)
|
|
|
+{
|
|
|
+
|
|
|
+ m_lf.lfItalic = bSet;
|
|
|
+ ReconstructFont();
|
|
|
+ UpdateSurface();
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetSunken
|
|
|
+//
|
|
|
+// Description: Sets sunken effect on border
|
|
|
+//
|
|
|
+// INPUTS: True of false
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetSunken(BOOL bSet)
|
|
|
+{
|
|
|
+
|
|
|
+ if (!bSet)
|
|
|
+ ModifyStyleEx(WS_EX_STATICEDGE,0,SWP_DRAWFRAME);
|
|
|
+ else
|
|
|
+ ModifyStyleEx(0,WS_EX_STATICEDGE,SWP_DRAWFRAME);
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetBorder
|
|
|
+//
|
|
|
+// Description: Toggles the border on/off
|
|
|
+//
|
|
|
+// INPUTS: True of false
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetBorder(BOOL bSet)
|
|
|
+{
|
|
|
+
|
|
|
+ if (!bSet)
|
|
|
+ ModifyStyle(WS_BORDER,0,SWP_DRAWFRAME);
|
|
|
+ else
|
|
|
+ ModifyStyle(0,WS_BORDER,SWP_DRAWFRAME);
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetFontSize
|
|
|
+//
|
|
|
+// Description: Sets the font size
|
|
|
+//
|
|
|
+// INPUTS: True of false
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetFontSize(int nSize)
|
|
|
+{
|
|
|
+
|
|
|
+ CFont cf;
|
|
|
+ LOGFONT lf;
|
|
|
+
|
|
|
+ cf.CreatePointFont(nSize * 10, m_lf.lfFaceName);
|
|
|
+ cf.GetLogFont(&lf);
|
|
|
+
|
|
|
+ m_lf.lfHeight = lf.lfHeight;
|
|
|
+ m_lf.lfWidth = lf.lfWidth;
|
|
|
+
|
|
|
+ // nSize*=-1;
|
|
|
+ // m_lf.lfHeight = nSize;
|
|
|
+ ReconstructFont();
|
|
|
+ UpdateSurface();
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetBkColor
|
|
|
+//
|
|
|
+// Description: Sets background color
|
|
|
+//
|
|
|
+// INPUTS: Colorref of background color
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetBkColor(COLORREF crBkgnd, COLORREF crBkgndHigh , BackFillMode mode)
|
|
|
+{
|
|
|
+
|
|
|
+ m_crLoColor = crBkgnd;
|
|
|
+ m_crHiColor = crBkgndHigh;
|
|
|
+
|
|
|
+ m_fillmode = mode;
|
|
|
+
|
|
|
+ if (m_hBackBrush)
|
|
|
+ ::DeleteObject(m_hBackBrush);
|
|
|
+
|
|
|
+
|
|
|
+ if (m_fillmode == Normal)
|
|
|
+ m_hBackBrush = ::CreateSolidBrush(crBkgnd);
|
|
|
+
|
|
|
+ UpdateSurface();
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetFontName
|
|
|
+//
|
|
|
+// Description: Sets the fonts face name
|
|
|
+//
|
|
|
+// INPUTS: String containing font name
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+// NT ALMOND 15092000 1.5 Support internation windows
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetFontName(const CString& strFont, BYTE byCharSet /* Default = ANSI_CHARSET */)
|
|
|
+{
|
|
|
+
|
|
|
+ m_lf.lfCharSet = byCharSet;
|
|
|
+
|
|
|
+ _tcscpy_s(m_lf.lfFaceName,strFont);
|
|
|
+ ReconstructFont();
|
|
|
+ UpdateSurface();
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::FlashText
|
|
|
+//
|
|
|
+// Description: As the function states
|
|
|
+//
|
|
|
+// INPUTS: True or false
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::FlashText(BOOL bActivate)
|
|
|
+{
|
|
|
+
|
|
|
+ if (m_bTimer)
|
|
|
+ KillTimer(1);
|
|
|
+
|
|
|
+ if (bActivate)
|
|
|
+ {
|
|
|
+ m_bState = FALSE;
|
|
|
+
|
|
|
+ m_bTimer = TRUE;
|
|
|
+
|
|
|
+ SetTimer(1,500,NULL);
|
|
|
+
|
|
|
+ m_Type = Text;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ m_Type = None; // Fix
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::FlashBackground
|
|
|
+//
|
|
|
+// Description: As the function states
|
|
|
+//
|
|
|
+// INPUTS: True or false
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::FlashBackground(BOOL bActivate)
|
|
|
+{
|
|
|
+
|
|
|
+ if (m_bTimer)
|
|
|
+ KillTimer(1);
|
|
|
+
|
|
|
+ if (bActivate)
|
|
|
+ {
|
|
|
+ m_bState = FALSE;
|
|
|
+
|
|
|
+ m_bTimer = TRUE;
|
|
|
+ SetTimer(1,500,NULL);
|
|
|
+
|
|
|
+ m_Type = Background;
|
|
|
+ }
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetLink
|
|
|
+//
|
|
|
+// Description: Indicates the string is a link
|
|
|
+//
|
|
|
+// INPUTS: True or false
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+// NT ALMOND 26/08/99 1.2 Added flexbility of
|
|
|
+// Sending Click meessage to parent
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetLink(BOOL bLink,BOOL bNotifyParent)
|
|
|
+{
|
|
|
+
|
|
|
+ if (bLink)
|
|
|
+ m_Link = HyperLink;
|
|
|
+ else
|
|
|
+ m_Link = LinkNone;
|
|
|
+
|
|
|
+ m_bNotifyParent = bNotifyParent;
|
|
|
+
|
|
|
+ if (m_Link != LinkNone)
|
|
|
+ ModifyStyle(0,SS_NOTIFY);
|
|
|
+ else
|
|
|
+ ModifyStyle(SS_NOTIFY,0);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetLinkCursor
|
|
|
+//
|
|
|
+// Description: Sets the internet browers link
|
|
|
+//
|
|
|
+// INPUTS: Handle of cursor
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 26/08/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetLinkCursor(HCURSOR hCursor)
|
|
|
+{
|
|
|
+
|
|
|
+ m_hCursor = hCursor;
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetTransparent
|
|
|
+//
|
|
|
+// Description: Sets the Label window to be transpaent
|
|
|
+//
|
|
|
+// INPUTS: True or false
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 22/10/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetTransparent(BOOL bSet)
|
|
|
+{
|
|
|
+
|
|
|
+ m_bTransparent = bSet;
|
|
|
+ ModifyStyleEx(0,WS_EX_TRANSPARENT); // Fix for transparency
|
|
|
+ UpdateSurface();
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetFont3D
|
|
|
+//
|
|
|
+// Description: Sets the 3D attribute of the font.
|
|
|
+//
|
|
|
+// INPUTS: True or false, Raised or Sunken
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 22/10/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetFont3D(BOOL bSet,Type3D type)
|
|
|
+{
|
|
|
+
|
|
|
+ m_bFont3d = bSet;
|
|
|
+ m_3dType = type;
|
|
|
+ UpdateSurface();
|
|
|
+
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+void CLabel::OnSysColorChange()
|
|
|
+{
|
|
|
+
|
|
|
+ if (m_hwndBrush)
|
|
|
+ ::DeleteObject(m_hwndBrush);
|
|
|
+
|
|
|
+ m_hwndBrush = ::CreateSolidBrush(GetSysColor(COLOR_3DFACE));
|
|
|
+
|
|
|
+ UpdateSurface();
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetRotationAngle
|
|
|
+//
|
|
|
+// Description: Sets the rotation angle for the current font.
|
|
|
+//
|
|
|
+// INPUTS: Angle in Degress
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 22/10/98 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetRotationAngle(UINT nAngle,BOOL bRotation)
|
|
|
+{
|
|
|
+ // Arrrrh...
|
|
|
+ // Your looking in here why the font is rotating, aren't you?
|
|
|
+ // Well try setting the font name to 'Arial' or 'Times New Roman'
|
|
|
+ // Make the Angle 180 and set bRotation to true.
|
|
|
+ //
|
|
|
+ // Font rotation _ONLY_ works with TrueType fonts...
|
|
|
+ //
|
|
|
+ //
|
|
|
+ m_lf.lfEscapement = m_lf.lfOrientation = (nAngle * 10);
|
|
|
+ m_bRotation = bRotation;
|
|
|
+
|
|
|
+ ReconstructFont();
|
|
|
+
|
|
|
+ UpdateSurface();
|
|
|
+
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetText3DHiliteColor
|
|
|
+//
|
|
|
+// Description: Sets the 3D font hilite color
|
|
|
+//
|
|
|
+// INPUTS: Color
|
|
|
+//
|
|
|
+// RETURNS: Reference to 'this' object
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 17/07/00 1.0 Origin
|
|
|
+//
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetText3DHiliteColor(COLORREF cr3DHiliteColor)
|
|
|
+{
|
|
|
+ m_cr3DHiliteColor = cr3DHiliteColor;
|
|
|
+ UpdateSurface();
|
|
|
+
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::PreSubclassWindow
|
|
|
+//
|
|
|
+// Description: Assigns default dialog font
|
|
|
+//
|
|
|
+// INPUTS:
|
|
|
+//
|
|
|
+// RETURNS:
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 15092000 1.5 Origin
|
|
|
+// NT ALMOND 02072002 1.6 Fix crash when GetFont returns NULL
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+void CLabel::PreSubclassWindow()
|
|
|
+{
|
|
|
+
|
|
|
+ CStatic::PreSubclassWindow();
|
|
|
+
|
|
|
+ CFont* cf = GetFont();
|
|
|
+ if(cf !=NULL)
|
|
|
+ {
|
|
|
+ cf->GetObject(sizeof(m_lf),&m_lf);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ GetObject(GetStockObject(SYSTEM_FONT),sizeof(m_lf),&m_lf);
|
|
|
+ }
|
|
|
+
|
|
|
+ ReconstructFont();
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::PreCreateWindow
|
|
|
+//
|
|
|
+// Description:
|
|
|
+//
|
|
|
+// INPUTS:
|
|
|
+//
|
|
|
+// RETURNS:
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 15092000 1.5 Origin
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+BOOL CLabel::PreCreateWindow(CREATESTRUCT& cs)
|
|
|
+{
|
|
|
+ return CStatic::PreCreateWindow(cs);
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::DrawGradientFill
|
|
|
+//
|
|
|
+// Description: Internal help function to gradient fill background
|
|
|
+//
|
|
|
+// INPUTS:
|
|
|
+//
|
|
|
+// RETURNS:
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 15092000 1.5 Origin
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+void CLabel::DrawGradientFill(CDC* pDC, CRect* pRect, COLORREF crStart, COLORREF crEnd, int nSegments)
|
|
|
+{
|
|
|
+ // Get the starting RGB values and calculate the incremental
|
|
|
+ // changes to be applied.
|
|
|
+
|
|
|
+ COLORREF cr;
|
|
|
+ int nR = GetRValue(crStart);
|
|
|
+ int nG = GetGValue(crStart);
|
|
|
+ int nB = GetBValue(crStart);
|
|
|
+
|
|
|
+ int neB = GetBValue(crEnd);
|
|
|
+ int neG = GetGValue(crEnd);
|
|
|
+ int neR = GetRValue(crEnd);
|
|
|
+
|
|
|
+ if(nSegments > pRect->Width())
|
|
|
+ nSegments = pRect->Width();
|
|
|
+
|
|
|
+ int nDiffR = (neR - nR);
|
|
|
+ int nDiffG = (neG - nG);
|
|
|
+ int nDiffB = (neB - nB);
|
|
|
+
|
|
|
+ int ndR = 256 * (nDiffR) / (max(nSegments,1));
|
|
|
+ int ndG = 256 * (nDiffG) / (max(nSegments,1));
|
|
|
+ int ndB = 256 * (nDiffB) / (max(nSegments,1));
|
|
|
+
|
|
|
+ nR *= 256;
|
|
|
+ nG *= 256;
|
|
|
+ nB *= 256;
|
|
|
+
|
|
|
+ neR *= 256;
|
|
|
+ neG *= 256;
|
|
|
+ neB *= 256;
|
|
|
+
|
|
|
+ int nCX = pRect->Width() / max(nSegments,1), nLeft = pRect->left, nRight;
|
|
|
+ pDC->SelectStockObject(NULL_PEN);
|
|
|
+
|
|
|
+ for (int i = 0; i < nSegments; i++, nR += ndR, nG += ndG, nB += ndB)
|
|
|
+ {
|
|
|
+ // Use special code for the last segment to avoid any problems
|
|
|
+ // with integer division.
|
|
|
+
|
|
|
+ if (i == (nSegments - 1))
|
|
|
+ nRight = pRect->right;
|
|
|
+ else
|
|
|
+ nRight = nLeft + nCX;
|
|
|
+
|
|
|
+ cr = RGB(nR / 256, nG / 256, nB / 256);
|
|
|
+
|
|
|
+ {
|
|
|
+ CBrush br(cr);
|
|
|
+ CBrush* pbrOld = pDC->SelectObject(&br);
|
|
|
+ pDC->Rectangle(nLeft, pRect->top, nRight + 1, pRect->bottom);
|
|
|
+ pDC->SelectObject(pbrOld);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Reset the left side of the drawing rectangle.
|
|
|
+
|
|
|
+ nLeft = nRight;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetFont
|
|
|
+//
|
|
|
+// Description: Sets font with LOGFONT structure
|
|
|
+//
|
|
|
+// INPUTS:
|
|
|
+//
|
|
|
+// RETURNS:
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 02072002 1.6 Origin
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetFont(LOGFONT lf)
|
|
|
+{
|
|
|
+ CopyMemory(&m_lf, &lf, sizeof(m_lf));
|
|
|
+ ReconstructFont();
|
|
|
+ UpdateSurface();
|
|
|
+ return *this;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+BOOL CLabel::OnEraseBkgnd(CDC* pDC)
|
|
|
+{
|
|
|
+ // TODO: Add your message handler code here and/or call default
|
|
|
+
|
|
|
+ return TRUE;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetMailLink
|
|
|
+//
|
|
|
+// Description: Sets the label so it becomes Mail enabled
|
|
|
+//
|
|
|
+// INPUTS:
|
|
|
+//
|
|
|
+// RETURNS:
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 02072002 1.6 Origin
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetMailLink(BOOL bEnable, BOOL bNotifyParent)
|
|
|
+{
|
|
|
+ if (bEnable)
|
|
|
+ m_Link = MailLink;
|
|
|
+ else
|
|
|
+ m_Link = LinkNone;
|
|
|
+
|
|
|
+
|
|
|
+ m_bNotifyParent = bNotifyParent;
|
|
|
+
|
|
|
+ if (m_Link != LinkNone)
|
|
|
+ ModifyStyle(0,SS_NOTIFY);
|
|
|
+ else
|
|
|
+ ModifyStyle(SS_NOTIFY,0);
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// Function: CLabel::SetHyperLink
|
|
|
+//
|
|
|
+// Description: Sets the label so it becomes hyperlink enabled
|
|
|
+//
|
|
|
+// INPUTS:
|
|
|
+//
|
|
|
+// RETURNS:
|
|
|
+//
|
|
|
+// NOTES:
|
|
|
+//
|
|
|
+// MODIFICATIONS:
|
|
|
+//
|
|
|
+// Name Date Version Comments
|
|
|
+// NT ALMOND 02072002 1.6 Origin
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+CLabel& CLabel::SetHyperLink(const CString& sLink)
|
|
|
+{
|
|
|
+ m_sLink = sLink;
|
|
|
+
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+/*************************************************************
|
|
|
+*add at : 2014-08-11 by唐太闲
|
|
|
+*describe: 设置背景透明,返回空画刷
|
|
|
+*************************************************************/
|
|
|
+HBRUSH CLabel::CtlColor(CDC* pDC, UINT /*nCtlColor*/)
|
|
|
+{
|
|
|
+ // TODO: 在此更改 DC 的任何属性
|
|
|
+
|
|
|
+ // TODO: 如果不应调用父级的处理程序,则返回非 null 画笔
|
|
|
+ //return NULL;
|
|
|
+ pDC->SetBkMode(TRANSPARENT);
|
|
|
+ return (HBRUSH)GetStockObject(NULL_BRUSH);
|
|
|
+}
|