📄 aboutdlg.cpp
字号:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 预处理
#include "Main.h"
#include "AboutDlg.h"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 宏定义
#define IDC_CheckUpdate 1226 // 检查更新命令标识
#define VAL_AboutDlg_Width 400 // 对话框宽度
#define VAL_AboutDlg_Height 275 // 对话框高度
#define IDT_AboutDlg_Close 1534 // 关闭时钟标识
#define COLOR_AboutDlg_Link 0x00FF0000 // 超链接颜色
#define COLOR_AboutDlg_HotLink 0x000000FF // 鼠标热点超链接颜色
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CAboutDlg 类静态变量
CAboutDlg::DIALOGINFO CAboutDlg::m_diDialog =
{
{DS_CENTER | WS_POPUP | WS_BORDER | WS_VISIBLE, 0, 0, 0, 0,
(VAL_AboutDlg_Width * 2 / 3), (VAL_AboutDlg_Height * 2 / 3)}, // 对话框模板
};
CAboutDlg::LINEINFO CAboutDlg::m_liLines[] =
{
{{0, 1, 88, 74}, 0x00FF9966}, // 蓝线组
{{60, 116, VAL_AboutDlg_Width, 132}, 0x00FF9966}, // 蓝线组
{{60, 175, VAL_AboutDlg_Width, 176}, 0x00000000}, // 一根黑线
};
CAboutDlg::RECTINFO CAboutDlg::m_riRects[] =
{
{{0, 75, VAL_AboutDlg_Width, 111}, 0x00FF9966}, // 蓝色矩形
{{0, 111, VAL_AboutDlg_Width, 115}, 0x00CC3333}, // 深蓝色矩形
{{60, 47, 116, 103}, 0x00CC3333}, // 图标外框深蓝色矩形
{{64, 51, 112, 99}, 0x00FFFFFF}, // 图标外框白色矩形
{{68, 55, 86, 73}, RGB(0xEE, 0xEE, 0xEE + VER_Major % 16)}, // 图标背景淡灰色矩形
{{90, 55, 108, 73}, RGB(0xEE, 0xEE, 0xEE + VER_Minor % 16)}, // 图标背景淡灰色矩形
{{68, 79, 86, 95}, RGB(0xEE, 0xEE, 0xEE + VER_Release % 16)}, // 图标背景淡灰色矩形
{{90, 79, 108, 95}, RGB(0xEE, 0xEE, 0xEE + VER_Build % 16)}, // 图标背景淡灰色矩形
};
CAboutDlg::TEXTINFO CAboutDlg::m_tiTexts[] =
{
{60, 162, TEXT(""), 0x00000000}, // 状态信息
{60, 140, TEXT(""), 0x00BBBBBB}, // 版本信息
{230, 140, TEXT(""), 0x00BBBBBB}, // 编译信息
{60, 240, TEXT(""), 0x00000000}, // 描述信息
{60, 255, TEXT(""), 0x00000000}, // 版权信息
#ifdef _BETA
{270, 40, TEXT("BETA"), 0x00AAAAAA}, // 测试版本
#endif
};
CAboutDlg::FONTTEXTINFO CAboutDlg::m_ftiTexts[] =
{
{125, 32, STR_Company, 0x00FFAAAA, {14, 0, 0, 0, 400, 1,
0, 0, 0, 0, 0, ANTIALIASED_QUALITY, 0, TEXT("Arial")}}, // 公司名称
{125, 40, STR_AppName, 0x00000000, {36, 0, 0, 0, 800, 1,
0, 0, 0, 0, 0, ANTIALIASED_QUALITY, 0, TEXT("Arial")}}, // 程序名称
};
CAboutDlg::LINKINFO CAboutDlg::m_liLinks[] =
{
{{60, 185, 0, 185 + 13}, TEXT(""), TEXT(""), (PCTSTR) IDC_CheckUpdate}, // 检查更新
{{60, 200, 0, 200 + 13}, TEXT(""), TEXT(""), STR_WebUrl}, // 访问网站
{{60, 215, 0, 215 + 13}, TEXT(""), TEXT(""), STR_MailUrl}, // 写信给作者
};
HWND CAboutDlg::m_hWnd = NULL;
BOOL CAboutDlg::m_bSplash = FALSE;
INT CAboutDlg::m_iLinkIndex = -1;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 显示关于对话框
VOID CAboutDlg::Show(HWND hParent)
{
if (m_hWnd == NULL)
{
DialogBoxIndirect(g_hInst, (LPDLGTEMPLATE) &m_diDialog, hParent, (DLGPROC) AboutDlgProc);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 以闪屏方式显示关于对话框
VOID CAboutDlg::Splash(UINT uTimer, HWND hParent)
{
if (uTimer && (m_hWnd == NULL))
{
// 创建无模式对话框
CreateDialogIndirect(g_hInst, (LPDLGTEMPLATE) &m_diDialog, hParent, (DLGPROC) AboutDlgProc);
// 如果指定了自动关闭
if (uTimer != -1)
{
SetTimer(m_hWnd, IDT_AboutDlg_Close, uTimer * 1000, NULL);
}
// 设置当前窗口以闪屏方式显示的标记
m_bSplash = TRUE;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 关闭窗口关于对话框
VOID CAboutDlg::Close(UINT uTimer)
{
// 如果是立即关闭
if (uTimer)
{
SetTimer(m_hWnd, IDT_AboutDlg_Close, uTimer, NULL);
}
else
{
// 设置 BitLive 通知窗口
//CBitLive::SetNotify(CMainWnd::m_hWnd);
// 删除定时器
KillTimer(m_hWnd, IDT_AboutDlg_Close);
// 如果当前窗口以闪屏方式显示
if (m_bSplash)
{
DestroyWindow(m_hWnd);
m_bSplash = FALSE;
}
else
{
EndDialog(m_hWnd, 0);
}
m_hWnd = NULL;
m_tiTexts[0].tzText[0] = 0;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 设置状态信息
VOID CAboutDlg::SetStatusText(PCTSTR ptzText)
{
HDC hMem;
RECT rtRect;
// 状态信息矩形
rtRect.left = m_tiTexts[0].x;
rtRect.top = m_tiTexts[0].y;
rtRect.right = VAL_AboutDlg_Width;
rtRect.bottom = rtRect.top + _RectHeight(m_liLinks[0].rtRect);
// 获取状态信息
if (ptzText)
{
lstrcpy(m_tiTexts[0].tzText, ptzText);
}
else
{
m_tiTexts[0].tzText[0] = 0;
}
// 绘制状态信息
hMem = GetDC(m_hWnd);
SetTextColor(hMem, m_tiTexts[0].crColor);
FillRect(hMem, &rtRect, (HBRUSH) GetStockObject(WHITE_BRUSH));
SelectObject(hMem, (HFONT) GetStockObject(DEFAULT_GUI_FONT));
TextOut(hMem, m_tiTexts[0].x, m_tiTexts[0].y, m_tiTexts[0].tzText, lstrlen(m_tiTexts[0].tzText));
ReleaseDC(m_hWnd, hMem);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 关于对话框回调函数
INT_PTR CALLBACK CAboutDlg::AboutDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
INT i;
POINT ptPoint;
switch (uMsg)
{
case WM_INITDIALOG:
// 初始化变量
m_hWnd = hWnd;
m_iLinkIndex = NULL;
// 设置鼠标指针
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, 0);
SetCursor(LoadCursor(NULL, IDC_ARROW));
// 设置对话框风格
if (GetParent(m_hWnd) == NULL)
{
SetWindowLongPtr(m_hWnd, GWL_EXSTYLE, (GetWindowLongPtr(m_hWnd, GWL_EXSTYLE) | WS_EX_TOOLWINDOW));
}
SetWindowPos(m_hWnd, GetParent(m_hWnd) ? 0 : HWND_TOPMOST, 0, 0, VAL_AboutDlg_Width, VAL_AboutDlg_Height, SWP_NOMOVE);
// 获取语言相关字符串
wsprintf(m_tiTexts[1].tzText, STR_VersionStamp, STR_VersionStamp);
wsprintf(m_tiTexts[2].tzText, STR_BuildStamp, STR_BuildStamp);
lstrcpy(m_tiTexts[3].tzText, STR_AppDesc);
lstrcpy(m_tiTexts[4].tzText, STR_Copyright);
//lstrcpy(m_liLinks[0].tzTitle, LNG_CheckUpdate);
lstrcpy(m_liLinks[1].tzTitle, STR_Web);
lstrcpy(m_liLinks[2].tzTitle, STR_Mail);
//lstrcpy(m_liLinks[0].tzTip, LNG_CheckUpdateTip);
//lstrcpy(m_liLinks[1].tzTip, LNG_VisitWebTip);
//lstrcpy(m_liLinks[2].tzTip, LNG_WriteEmailTip);
break;
case WM_ERASEBKGND:
OnPaint((HDC) wParam);
return TRUE;
case WM_ACTIVATEAPP:
// 激活程序
GetCursorPos(&ptPoint);
MapWindowPoints(NULL, m_hWnd, &ptPoint, 1);
SendMessage(m_hWnd, WM_MOUSEMOVE, 0, MAKELONG(ptPoint.x, ptPoint.y));
break;
case WM_MOUSEMOVE:
// 如果鼠标所在位置的超链接改变
ptPoint.x = LOWORD(lParam);
ptPoint.y = HIWORD(lParam);
i = GetLinkIndex(ptPoint);
if (i != m_iLinkIndex)
{
m_iLinkIndex = i;
PaintLinks();
}
break;
case WM_LBUTTONDOWN:
// 如果在图标框内,拖动对话框
ptPoint.x = LOWORD(lParam);
ptPoint.y = HIWORD(lParam);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -