mirror of
https://github.com/kevinbentley/Descent3.git
synced 2025-01-22 19:55:23 +00:00
31b63bb79f
Generated using script: for file in \$(find ./legacy -type f | \grep -E "\.cpp|\.h") do mv $file temp.xxx cp gplheader $file cat temp.xxx >> $file done
290 lines
4.9 KiB
C++
290 lines
4.9 KiB
C++
/*
|
|
* Descent 3
|
|
* Copyright (C) 2024 Parallax Software
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
// Label.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "Resource.h"
|
|
#include "Label.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CLabel
|
|
|
|
CLabel::CLabel()
|
|
{
|
|
m_crText = GetSysColor(COLOR_WINDOWTEXT);
|
|
m_hBrush = ::CreateSolidBrush(GetSysColor(COLOR_3DFACE));
|
|
|
|
::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(m_lf),&m_lf);
|
|
|
|
m_font.CreateFontIndirect(&m_lf);
|
|
m_bTimer = FALSE;
|
|
m_bState = FALSE;
|
|
m_bLink = TRUE;
|
|
m_hCursor = NULL;
|
|
m_Type = None;
|
|
|
|
m_hwndBrush = ::CreateSolidBrush(GetSysColor(COLOR_3DFACE));
|
|
}
|
|
|
|
|
|
CLabel::~CLabel()
|
|
{
|
|
m_font.DeleteObject();
|
|
::DeleteObject(m_hBrush);
|
|
}
|
|
|
|
CLabel& CLabel::SetText(const CString& strText)
|
|
{
|
|
SetWindowText(strText);
|
|
return *this;
|
|
}
|
|
|
|
CLabel& CLabel::SetTextColor(COLORREF crText)
|
|
{
|
|
m_crText = crText;
|
|
RedrawWindow();
|
|
return *this;
|
|
}
|
|
|
|
CLabel& CLabel::SetFontBold(BOOL bBold)
|
|
{
|
|
m_lf.lfWeight = bBold ? FW_BOLD : FW_NORMAL;
|
|
ReconstructFont();
|
|
RedrawWindow();
|
|
return *this;
|
|
}
|
|
|
|
CLabel& CLabel::SetFontUnderline(BOOL bSet)
|
|
{
|
|
m_lf.lfUnderline = bSet;
|
|
ReconstructFont();
|
|
RedrawWindow();
|
|
return *this;
|
|
}
|
|
|
|
CLabel& CLabel::SetFontItalic(BOOL bSet)
|
|
{
|
|
m_lf.lfItalic = bSet;
|
|
ReconstructFont();
|
|
RedrawWindow();
|
|
return *this;
|
|
}
|
|
|
|
CLabel& CLabel::SetSunken(BOOL bSet)
|
|
{
|
|
if (!bSet)
|
|
ModifyStyleEx(WS_EX_STATICEDGE,0,SWP_DRAWFRAME);
|
|
else
|
|
ModifyStyleEx(0,WS_EX_STATICEDGE,SWP_DRAWFRAME);
|
|
|
|
return *this;
|
|
}
|
|
|
|
CLabel& CLabel::SetBorder(BOOL bSet)
|
|
{
|
|
if (!bSet)
|
|
ModifyStyle(WS_BORDER,0,SWP_DRAWFRAME);
|
|
else
|
|
ModifyStyle(0,WS_BORDER,SWP_DRAWFRAME);
|
|
|
|
return *this;
|
|
}
|
|
|
|
CLabel& CLabel::SetFontSize(int nSize)
|
|
{
|
|
nSize*=-1;
|
|
m_lf.lfHeight = nSize;
|
|
ReconstructFont();
|
|
RedrawWindow();
|
|
return *this;
|
|
}
|
|
|
|
|
|
CLabel& CLabel::SetBkColor(COLORREF crBkgnd)
|
|
{
|
|
if (m_hBrush)
|
|
::DeleteObject(m_hBrush);
|
|
|
|
m_hBrush = ::CreateSolidBrush(crBkgnd);
|
|
return *this;
|
|
}
|
|
|
|
CLabel& CLabel::SetFontName(const CString& strFont)
|
|
{
|
|
strcpy(m_lf.lfFaceName,strFont);
|
|
ReconstructFont();
|
|
RedrawWindow();
|
|
return *this;
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CLabel, CStatic)
|
|
//{{AFX_MSG_MAP(CLabel)
|
|
ON_WM_CTLCOLOR_REFLECT()
|
|
ON_WM_TIMER()
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_WM_SETCURSOR()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CLabel message handlers
|
|
|
|
HBRUSH CLabel::CtlColor(CDC* pDC, UINT nCtlColor)
|
|
{
|
|
// TODO: Change any attributes of the DC here
|
|
|
|
// TODO: Return a non-NULL brush if the parent's handler should not be called
|
|
|
|
if (CTLCOLOR_STATIC == nCtlColor)
|
|
{
|
|
pDC->SelectObject(&m_font);
|
|
pDC->SetTextColor(m_crText);
|
|
pDC->SetBkMode(TRANSPARENT);
|
|
}
|
|
|
|
|
|
if (m_Type == Background)
|
|
{
|
|
if (!m_bState)
|
|
return m_hwndBrush;
|
|
}
|
|
|
|
return m_hBrush;
|
|
}
|
|
|
|
void CLabel::ReconstructFont()
|
|
{
|
|
m_font.DeleteObject();
|
|
BOOL bCreated = m_font.CreateFontIndirect(&m_lf);
|
|
|
|
ASSERT(bCreated);
|
|
}
|
|
|
|
|
|
CLabel& CLabel::FlashText(BOOL bActivate)
|
|
{
|
|
if (m_bTimer)
|
|
{
|
|
SetWindowText(m_strText);
|
|
KillTimer(1);
|
|
}
|
|
|
|
if (bActivate)
|
|
{
|
|
GetWindowText(m_strText);
|
|
m_bState = FALSE;
|
|
|
|
m_bTimer = TRUE;
|
|
SetTimer(1,500,NULL);
|
|
m_Type = Text;
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
void CLabel::OnTimer(UINT nIDEvent)
|
|
{
|
|
m_bState = !m_bState;
|
|
|
|
switch (m_Type)
|
|
{
|
|
case Text:
|
|
if (m_bState)
|
|
SetWindowText("");
|
|
else
|
|
SetWindowText(m_strText);
|
|
break;
|
|
|
|
case Background:
|
|
InvalidateRect(NULL,FALSE);
|
|
UpdateWindow();
|
|
break;
|
|
}
|
|
|
|
CStatic::OnTimer(nIDEvent);
|
|
}
|
|
|
|
CLabel& CLabel::SetLink(BOOL bLink)
|
|
{
|
|
m_bLink = bLink;
|
|
|
|
if (bLink)
|
|
ModifyStyle(0,SS_NOTIFY);
|
|
else
|
|
ModifyStyle(SS_NOTIFY,0);
|
|
|
|
return *this;
|
|
}
|
|
|
|
void CLabel::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
CString strLink;
|
|
|
|
GetWindowText(strLink);
|
|
ShellExecute(NULL,"open",strLink,NULL,NULL,SW_SHOWNORMAL);
|
|
|
|
CStatic::OnLButtonDown(nFlags, point);
|
|
}
|
|
|
|
BOOL CLabel::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
|
|
{
|
|
if (m_hCursor)
|
|
{
|
|
::SetCursor(m_hCursor);
|
|
return TRUE;
|
|
}
|
|
|
|
return CStatic::OnSetCursor(pWnd, nHitTest, message);
|
|
}
|
|
|
|
CLabel& CLabel::SetLinkCursor(HCURSOR hCursor)
|
|
{
|
|
m_hCursor = hCursor;
|
|
return *this;
|
|
}
|
|
|