AboutDlg.cpp
资源名称:DetourQQ.rar [点击查看]
上传用户:qc13828
上传日期:2007-06-21
资源大小:63k
文件大小:13k
源码类别:
ICQ弱点检测代码
开发平台:
Visual C++
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 预处理
- #include "Define.h"
- #include <Windows.h>
- #include "AboutDlg.h"
- #include "Resource.h"
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 宏定义
- #define IDC_Help 1234 // 帮助命令标识
- #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, STR_Description, 0x00000000}, // 描述信息
- {60, 255, STR_Copyright, 0x00000000}, // 版权信息
- {125, 95, STR_Support, 0x00FFFFFF}, // 支持信息
- #ifdef _BETA
- {270, 40, TEXT("BETA"), 0x00AAAAAA}, // 测试版本
- #endif // _BETA
- };
- CAboutDlg::FONTTEXTINFO CAboutDlg::m_ftiTexts[] =
- {
- {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}, STR_ViewHelp, STR_ViewHelpTip, (PCTSTR) IDC_Help}, // 查看帮助
- {{60, 200, 0, 200 + 13}, STR_VisitWeb, STR_VisitWebTip, STR_WebUrl}, // 访问网站
- {{60, 215, 0, 215 + 13}, STR_WriteEmail, STR_WriteEmailTip, STR_EmailUrl}, // 写信给作者
- };
- 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(GetModuleHandle(NULL), (LPDLGTEMPLATE) &m_diDialog, hParent, (DLGPROC) AboutDlgProc);
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 以 Splash 方式显示关于对话框
- VOID CAboutDlg::Splash(HWND hParent, UINT uTimer)
- {
- if (m_hWnd == NULL)
- {
- // 创建无模式对话框
- CreateDialogIndirect(GetModuleHandle(NULL), (LPDLGTEMPLATE) &m_diDialog, hParent, (DLGPROC) AboutDlgProc);
- // 如果指定了自动关闭
- if (uTimer)
- {
- SetTimer(m_hWnd, IDT_AboutDlg_Close, uTimer, NULL);
- }
- // 设置当前窗口以 Splash 方式显示的标记
- m_bSplash = TRUE;
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 关闭窗口关于对话框
- VOID CAboutDlg::Close(UINT uTimer)
- {
- // 如果是立即关闭
- if (uTimer)
- {
- SetTimer(m_hWnd, IDT_AboutDlg_Close, uTimer, NULL);
- }
- else
- {
- // 删除定时器
- KillTimer(m_hWnd, IDT_AboutDlg_Close);
- // 如果当前窗口以 Splash 方式显示
- 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::SetStatus(PCTSTR ptzText)
- {
- HDC hDC;
- 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;
- }
- // 绘制状态信息
- hDC = GetDC(m_hWnd);
- SetTextColor(hDC, m_tiTexts[0].crColor);
- FillRect(hDC, &rtRect, (HBRUSH) GetStockObject(WHITE_BRUSH));
- SelectObject(hDC, (HFONT) GetStockObject(DEFAULT_GUI_FONT));
- TextOut(hDC, m_tiTexts[0].x, m_tiTexts[0].y, m_tiTexts[0].tzText, lstrlen(m_tiTexts[0].tzText));
- ReleaseDC(m_hWnd, hDC);
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 关于对话框回调函数
- INT_PTR CALLBACK CAboutDlg::AboutDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- INT i;
- HDC hDC;
- POINT ptPoint;
- switch (uMsg)
- {
- case WM_INITDIALOG:
- // 初始化变量
- m_hWnd = hWnd;
- m_iLinkIndex = NULL;
- // 设置鼠标指针
- SetClassLong(m_hWnd, GCL_HCURSOR, 0);
- SetCursor(LoadCursor(NULL, IDC_ARROW));
- // 设置对话框风格
- if (GetParent(m_hWnd) == NULL)
- {
- SetWindowLong(m_hWnd, GWL_EXSTYLE, (GetWindowLong(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_Version);
- wsprintf(m_tiTexts[2].tzText, STR_BuildStamp, STR_BuilDateTime);
- /* lstrcpy(m_tiTexts[3].tzText, STR_Description);
- lstrcpy(m_tiTexts[4].tzText, STR_Copyright);
- lstrcpy(m_liLinks[0].tzTitle, STR_ViewHelp);
- lstrcpy(m_liLinks[1].tzTitle, STR_VisitWeb);
- lstrcpy(m_liLinks[2].tzTitle, STR_WriteEmail);
- lstrcpy(m_liLinks[0].tzTip, STR_ViewHelpTip);
- lstrcpy(m_liLinks[1].tzTip, STR_VisitWebTip);
- lstrcpy(m_liLinks[2].tzTip, STR_WriteEmailTip);*/
- break;
- case WM_CTLCOLORDLG:
- case WM_CTLCOLORSTATIC:
- return (INT_PTR) GetStockObject(WHITE_BRUSH);
- case WM_PAINT:
- OnPaint();
- break;
- 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;
- hDC = GetDC(m_hWnd);
- PaintLinks(hDC);
- ReleaseDC(m_hWnd, hDC);
- }
- break;
- case WM_LBUTTONDOWN:
- // 如果在图标框内,拖动对话框
- ptPoint.x = LOWORD(lParam);
- ptPoint.y = HIWORD(lParam);
- if (PtInRect(&m_riRects[2].rtRect, ptPoint))
- {
- ReleaseCapture();
- PostMessage(m_hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
- }
- break;
- case WM_ENTERSIZEMOVE:
- SetCursor(LoadCursor(NULL, IDC_SIZEALL));
- break;
- case WM_EXITSIZEMOVE:
- SetCursor(LoadCursor(NULL, IDC_ARROW));
- break;
- case WM_LBUTTONUP:
- // 如果鼠标在超链接内
- if (m_iLinkIndex != -1)
- {
- // 如果 HIWORD(ptzUrl) 为 0,表示命令,否则表示超链接
- if (HIWORD(m_liLinks[m_iLinkIndex].ptzUrl))
- {
- ShellExecute(NULL, NULL, m_liLinks[m_iLinkIndex].ptzUrl, NULL, NULL, SW_NORMAL);
- }
- else
- {
- PostMessage(m_hWnd, WM_COMMAND, (WPARAM) m_liLinks[m_iLinkIndex].ptzUrl, 0);
- }
- }
- else
- {
- // 关闭对话框
- Close();
- }
- break;
- case WM_COMMAND:
- // 处理命令消息
- switch (LOWORD(wParam))
- {
- case IDC_Help:
- // 查看帮助
- MessageBox(hWnd, TEXT("晕!这么简单的东东也需要帮助?"), STR_AppName, MB_ICONINFORMATION);
- break;
- case IDOK:
- case IDCANCEL:
- // 关闭对话框
- Close();
- break;
- }
- break;
- case WM_TIMER:
- case WM_RBUTTONUP:
- // 关闭对话框
- Close();
- break;
- }
- return 0;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 绘制对话框
- VOID CAboutDlg::OnPaint()
- {
- INT i;
- INT j;
- HDC hDC;
- HPEN hPen;
- HBRUSH hBrush;
- POINT ptPoint;
- PAINTSTRUCT psPaint;
- // 开始绘制
- hDC = BeginPaint(m_hWnd, &psPaint);
- // 绘制水平线组
- for (i = 0; i < _NumberOf(m_liLines); i++)
- {
- hPen = (HPEN) SelectObject(hDC, CreatePen(PS_SOLID, 0, m_liLines[i].crColor));
- for(j = m_liLines[i].rtRect.top; j < m_liLines[i].rtRect.bottom; j += 2)
- {
- MoveToEx(hDC, m_liLines[i].rtRect.left, j, NULL);
- LineTo(hDC, m_liLines[i].rtRect.right, j);
- }
- DeleteObject(SelectObject(hDC, hPen));
- }
- // 绘制矩形区域
- for (i = 0; i < _NumberOf(m_riRects); i++)
- {
- hBrush = CreateSolidBrush(m_riRects[i].crColor);
- FillRect(hDC, &m_riRects[i].rtRect, hBrush);
- DeleteObject(hBrush);
- }
- // 绘制图标
- DrawIcon(hDC,
- m_riRects[2].rtRect.left + (_RectWidth(m_riRects[2].rtRect) - 32) / 2,
- m_riRects[2].rtRect.top + (_RectHeight(m_riRects[2].rtRect) - 32) / 2,
- LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_Main)));
- // 绘制超链接
- GetCursorPos(&ptPoint);
- MapWindowPoints(NULL, m_hWnd, &ptPoint, 1);
- m_iLinkIndex = GetLinkIndex(ptPoint);
- PaintLinks(hDC);
- // 使用对话框默认字体、透明背景绘制文本
- SetBkMode(hDC, TRANSPARENT);
- SelectObject(hDC, (HFONT) GetStockObject(DEFAULT_GUI_FONT));
- for (i = 0; i < _NumberOf(m_tiTexts); i++)
- {
- SetTextColor(hDC, m_tiTexts[i].crColor);
- TextOut(hDC, m_tiTexts[i].x, m_tiTexts[i].y, m_tiTexts[i].tzText, lstrlen(m_tiTexts[i].tzText));
- }
- // 绘制指定字体的文本
- for (i = 0; i < _NumberOf(m_ftiTexts); i++)
- {
- HFONT hFont = (HFONT) SelectObject(hDC, CreateFontIndirect(&m_ftiTexts[i].lfFont));
- SetTextColor(hDC, m_ftiTexts[i].crColor);
- TextOut(hDC, m_ftiTexts[i].x, m_ftiTexts[i].y, m_ftiTexts[i].ptzText, lstrlen(m_ftiTexts[i].ptzText));
- DeleteObject(SelectObject(hDC, hFont));
- }
- // 结束绘制
- EndPaint(m_hWnd, &psPaint);
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 获取指定点的超链接
- INT CAboutDlg::GetLinkIndex(POINT ptPoint)
- {
- for (INT i = 0; i < _NumberOf(m_liLinks); i++)
- {
- if (PtInRect(&m_liLinks[i].rtRect, ptPoint))
- {
- return i;
- }
- }
- return -1;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 绘制超链接
- VOID CAboutDlg::PaintLinks(HDC hDC)
- {
- HFONT hFont;
- LOGFONT lfFont;
- PTSTR ptzCursor;
- GetObject((HFONT) GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONT), &lfFont);
- for (INT i = 0; i < _NumberOf(m_liLinks); i++)
- {
- lfFont.lfUnderline = (i == m_iLinkIndex);
- hFont = (HFONT) SelectObject(hDC, CreateFontIndirect(&lfFont));
- SetTextColor(hDC, lfFont.lfUnderline ? COLOR_AboutDlg_HotLink : COLOR_AboutDlg_Link);
- // 计算矩形框,绘制文本
- m_liLinks[i].rtRect.bottom = m_liLinks[i].rtRect.top +
- DrawText(hDC, m_liLinks[i].tzTitle, -1, &m_liLinks[i].rtRect,
- DT_NOPREFIX | DT_SINGLELINE | DT_VCENTER | DT_CALCRECT);
- DrawText(hDC, m_liLinks[i].tzTitle, -1, &m_liLinks[i].rtRect, DT_NOPREFIX | DT_SINGLELINE | DT_VCENTER);
- DeleteObject(SelectObject(hDC, hFont));
- }
- if ((m_iLinkIndex == -1))
- {
- SetStatus();
- ptzCursor = IDC_ARROW;
- }
- else
- {
- SetStatus(m_liLinks[m_iLinkIndex].tzTip);
- ptzCursor = IDC_HAND;
- }
- SetCursor(LoadCursor(NULL, ptzCursor));
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////