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