📄 resorgaboutbox.cpp
字号:
sCaption.Format(sFmt, ::AfxGetAppName() );
SetWindowText(sCaption);
// Create the background brush
m_Brush.CreateSolidBrush(COLOUR_ABOUTBOX_BACKGROUND);
m_ctrlDisclaimer.SetBkColor(COLOUR_ABOUTBOX_BACKGROUND);
m_ctrlExpiry.SetBkColor(COLOUR_ABOUTBOX_BACKGROUND);
// Set the font for the app title and version
// TO DO: get the font name and size from the string table
CWnd* pWnd = GetDlgItem(IDC_RESORG_TITLE);
if (NULL != pWnd)
{
HDC hDC = ::GetDC(NULL);
int nFontSize = 14;
LONG nHeight = 0 - ::GetDeviceCaps(hDC, LOGPIXELSY) * nFontSize / 72;
::ReleaseDC(NULL, hDC);
m_fontTitle.SetFaceName( _T("Verdana") );
m_fontTitle.SetBold(TRUE);
m_fontTitle.SetHeight(nHeight);
pWnd->SetFont(&m_fontTitle);
}
pWnd = GetDlgItem(IDC_RESORG_VERSION);
if (pWnd != NULL)
{
HDC hDC = ::GetDC(NULL);
int nFontSize = 10;
LONG nHeight = 0 - ::GetDeviceCaps(hDC, LOGPIXELSY) * nFontSize / 72;
::ReleaseDC(NULL, hDC);
m_fontVersion.SetFaceName( _T("Verdana") );
m_fontVersion.SetBold(TRUE);
m_fontVersion.SetItalic(TRUE);
m_fontVersion.SetHeight(nHeight);
pWnd->SetFont(&m_fontVersion);
}
// Read the fields we need from the version resource
// If any can't be found, they will be blank
CNGModuleVersion ver;
ver.GetFileVersionInfo();
m_sTitle = ver.GetValue( _T("FileDescription") );
m_sFileVersion = _T("Version ") + ver.GetValue( _T("FileVersion") );
m_sCopyright = ver.GetValue( _T("LegalCopyright") );
// Initialise the URL links
if (!m_sWebsite.IsEmpty())
{
m_ctrlWebsite.SetURL(m_sWebsite);
}
if (!m_sMailTo.IsEmpty())
{
// Makeup URL including subject as app name/version
CString sSubject = m_sTitle + _T(" ") + m_sFileVersion;
CString sEmailURL = _T("mailto:") +
m_sMailTo +
_T("?Subject=") +
sSubject;
m_ctrlEmail.SetURL(sEmailURL);
}
CString sDisclaimer;
sDisclaimer.LoadString(IDS_RESORG_DISCLAIMER);
m_ctrlDisclaimer.SetWindowText(sDisclaimer);
#ifdef _RESORG_EXPIRY_DATE
CString sExpiryMsg;
if (::IsVersionExpired() )
{
sExpiryMsg.LoadString(IDP_RESORG_EXPIRED);
}
else
{
CTime timeExpires = GetVersionExpiryDate();
CString sExpiryTime = timeExpires.Format( _T("%A, %d %B, %Y") );
sExpiryMsg.Format(IDP_RESORG_EXPIRY,
sExpiryTime);
}
m_ctrlExpiry.SetWindowText(sExpiryMsg);
m_ctrlExpiry.ShowWindow(SW_RESTORE);
#endif
UpdateData(FALSE);
// Initialise the dialog expander
m_DlgExpander.Initialize( this,
FALSE,
IDC_RESORG_ABOUTBOX_EXPAND,
IDC_RESORG_ABOUTBOX_SHRINKMARK,
_T("<<") ) ;
// Store the positions of the OK and More/Less buttons
m_ctrlOkButton.GetWindowRect(m_rectOkButton);
ScreenToClient(m_rectOkButton);
m_ctrlExpandButton.GetWindowRect(m_rectExpandButton);
ScreenToClient(m_rectExpandButton);
if (m_ThemeHelper.IsThemeActive() )
{
m_ctrlOkButton.SetThemeHelper(&m_ThemeHelper);
m_ctrlExpandButton.SetThemeHelper(&m_ThemeHelper);
}
else
{
// Set button colours
m_ctrlOkButton.SetColor( CNGButton::BTNST_COLOR_FG_IN,
COLOUR_ABOUTBOX_OK_BTN_FGND);
m_ctrlOkButton.SetColor( CNGButton::BTNST_COLOR_FG_OUT,
COLOUR_ABOUTBOX_OK_BTN_FGND);
m_ctrlOkButton.SetColor( CNGButton::BTNST_COLOR_FG_FOCUS,
COLOUR_ABOUTBOX_OK_BTN_FGND);
m_ctrlOkButton.SetColor( CNGButton::BTNST_COLOR_BK_IN,
COLOUR_ABOUTBOX_OK_BTN_BKND);
m_ctrlOkButton.SetColor( CNGButton::BTNST_COLOR_BK_OUT,
COLOUR_ABOUTBOX_OK_BTN_BKND);
m_ctrlOkButton.SetColor( CNGButton::BTNST_COLOR_BK_FOCUS,
COLOUR_ABOUTBOX_OK_BTN_BKND);
m_ctrlExpandButton.SetColor(CNGButton::BTNST_COLOR_FG_IN,
COLOUR_ABOUTBOX_EXPAND_BTN_FGND);
m_ctrlExpandButton.SetColor(CNGButton::BTNST_COLOR_FG_OUT,
COLOUR_ABOUTBOX_EXPAND_BTN_FGND);
m_ctrlExpandButton.SetColor(CNGButton::BTNST_COLOR_FG_FOCUS,
COLOUR_ABOUTBOX_EXPAND_BTN_FGND);
m_ctrlExpandButton.SetColor(CNGButton::BTNST_COLOR_BK_IN,
COLOUR_ABOUTBOX_EXPAND_BTN_BKND);
m_ctrlExpandButton.SetColor(CNGButton::BTNST_COLOR_BK_OUT,
COLOUR_ABOUTBOX_EXPAND_BTN_BKND);
m_ctrlExpandButton.SetColor(CNGButton::BTNST_COLOR_BK_FOCUS,
COLOUR_ABOUTBOX_EXPAND_BTN_BKND);
m_ctrlOkButton.SetFlat(FALSE);
m_ctrlExpandButton.SetFlat(FALSE);
}
return TRUE; // Return TRUE unless you set the focus to a control
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgAboutBox message handlers
HBRUSH CResOrgAboutBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
// Call the base class first so the hyperlink controls will
// be painted properly
CResOrgAboutBox_BASE::OnCtlColor(pDC, pWnd, nCtlColor);
HBRUSH hbr = m_Brush;
UINT uID = pWnd->GetDlgCtrlID();
if (uID > 0)
{
// Set the background mode for text to transparent
// so the background will show through
pDC->SetBkMode(TRANSPARENT);
switch (uID)
{
case IDC_RESORG_TITLE:
case IDC_RESORG_PLATFORM:
case IDC_RESORG_VERSION:
pDC->SetTextColor(COLOUR_ABOUTBOX_TITLE);
break;
default:
break;
}
}
return hbr;
}
void CResOrgAboutBox::OnPaint(void)
{
CPaintDC dc(this); // device context for painting
// Select a hollow brush
CBrush* pOldBrush = (CBrush*)dc.SelectStockObject(HOLLOW_BRUSH);
// Create and select a thick, blue pen
CPen pen;
pen.CreatePen(PS_SOLID, 5, RGB(0, 0, 200));
CPen* pOldPen = (CPen*)dc.SelectObject(&pen);
// Get our client rectangle so we can to use it to
// draw a bounding rectangle around the splash screen
CRect rect;
GetClientRect(rect);
// Draw a hollow rectangle
dc.Rectangle(rect);
// Restore the original pen and brush
dc.SelectObject(pOldBrush);
dc.SelectObject(pOldPen);
// Do not call CResOrgSplashWnd_BASE::OnPaint() for painting messages
}
void CResOrgAboutBox::OnClickedExpand(void)
{
m_DlgExpander.OnExpandButton();
if (m_DlgExpander.IsExpanded())
{
// Move the OK and More/Less buttons
CRect rect;
CWnd* pWnd = GetDlgItem(IDC_RESORG_ABOUTBOX_IDOK_EXPANDED);
pWnd->GetWindowRect(rect);
ScreenToClient(rect);
m_ctrlOkButton.MoveWindow(rect);
pWnd = GetDlgItem(IDC_RESORG_ABOUTBOX_CONTRACT);
pWnd->GetWindowRect(rect);
ScreenToClient(rect);
m_ctrlExpandButton.MoveWindow(rect);
}
else
{
m_ctrlOkButton.MoveWindow(m_rectOkButton);
m_ctrlExpandButton.MoveWindow(m_rectExpandButton);
}
}
void CResOrgAboutBox::OnMouseMove(UINT nFlags, CPoint point)
{
if ( (!m_rectAuthorImage.IsRectEmpty() && m_rectAuthorImage.PtInRect(point) ) ||
(!m_rectCompanyLogo.IsRectEmpty() && m_rectCompanyLogo.PtInRect(point) ) )
{
// TODO: Add your message handler code here and/or call default
if (m_hLinkCursor == NULL) // No cursor handle - load our own
{
// Get the windows directory
CString strWndDir;
GetWindowsDirectory(strWndDir.GetBuffer(MAX_PATH), MAX_PATH);
strWndDir.ReleaseBuffer();
strWndDir += _T("\\winhlp32.exe");
// This retrieves cursor #106 from winhlp32.exe, which is a hand pointer
HMODULE hModule = LoadLibrary(strWndDir);
if (hModule)
{
HCURSOR hHandCursor = ::LoadCursor(hModule, MAKEINTRESOURCE(106));
if (NULL != hHandCursor)
{
m_hLinkCursor = CopyCursor(hHandCursor);
}
}
FreeLibrary(hModule);
}
if (NULL != m_hLinkCursor)
{
::SetCursor(m_hLinkCursor);
}
}
CResOrgAboutBox_BASE::OnMouseMove(nFlags, point);
}
void CResOrgAboutBox::OnLButtonDown(UINT nFlags, CPoint point)
{
if (!m_rectAuthorImage.IsRectEmpty() && m_rectAuthorImage.PtInRect(point) )
{
::ShellExecute( NULL, _T("open"), Options.GetAboutMeURL(), NULL, NULL, SW_SHOW);
}
else if (!m_rectCompanyLogo.IsRectEmpty() && m_rectCompanyLogo.PtInRect(point) )
{
::ShellExecute( NULL, _T("open"), _T("http://www.riverblade.co.uk"), NULL, NULL, SW_SHOW);
}
CResOrgAboutBox_BASE::OnLButtonDown(nFlags, point);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -