source: trunk/Utilities/DirectionControl/AboutDialog.h @ 937

Last change on this file since 937 was 293, checked in by roman, 8 years ago
File size: 5.1 KB
Line 
1////////////////////////////////////////////////////////////
2// Copyright (C) Roman Ryltsov, 2008-2011
3// Created by Roman Ryltsov roman@alax.info
4//
5// $Id: AboutDialog.h 527 2012-10-21 17:13:50Z roman $
6
7#pragma once
8
9#include <atlctrls.h>
10#include <atlctrlx.h>
11#include "rocontrols.h"
12
13#pragma comment(lib, "version.lib")
14
15////////////////////////////////////////////////////////////
16// CAboutDialog
17
18class CAboutDialog : 
19        public CDialogImpl<CAboutDialog>
20{
21public:
22        enum { IDD = IDD_ABOUT };
23
24BEGIN_MSG_MAP_EX(CAboutDialog)
25        MSG_WM_INITDIALOG(OnInitDialog)
26        MSG_WM_DESTROY(OnDestroy)
27        COMMAND_ID_HANDLER_EX(IDOK, OnCommand)
28        COMMAND_ID_HANDLER_EX(IDCANCEL, OnCommand)
29END_MSG_MAP()
30
31protected:
32        CFont m_TitleFont;
33        CFont m_DisclaimerFont;
34        CRoHyperStatic m_WebsiteHyperStatic;
35        CRoHyperStatic m_EmailHyperStatic;
36
37public:
38// CAboutDialog
39        static CFontHandle CreateTitleFont() throw()
40        {
41                CLogFont LogFont;
42                LogFont.lfHeight = -MulDiv(12, GetDeviceCaps(CClientDC(GetDesktopWindow()), LOGPIXELSY), 72);
43                LogFont.lfWeight = FW_BOLD;
44                LogFont.lfItalic = TRUE;
45                _tcsncpy_s(LogFont.lfFaceName, _countof(LogFont.lfFaceName), _T("Arial"), _TRUNCATE);
46                CFont Font;
47                _W(Font.CreateFontIndirect(&LogFont));
48                return Font.Detach();
49        }
50        static CFontHandle CreateDisclaimerFont() throw()
51        {
52                CLogFont LogFont;
53                LogFont.lfHeight = -MulDiv(7, GetDeviceCaps(CClientDC(GetDesktopWindow()), LOGPIXELSY), 72);
54                LogFont.lfWeight = FW_NORMAL;
55                _tcsncpy_s(LogFont.lfFaceName, _countof(LogFont.lfFaceName), _T("Lucida Console"), _TRUNCATE);
56                CFont Font;
57                _W(Font.CreateFontIndirect(&LogFont));
58                return Font.Detach();
59        }
60        CAboutDialog() throw()
61        {
62                _Z4(atlTraceRefcount, 4, _T("this 0x%p\n"), this);
63        }
64        ~CAboutDialog() throw()
65        {
66                _Z4(atlTraceRefcount, 4, _T("this 0x%p\n"), this);
67        }
68
69// Window Message Handler
70        LRESULT OnInitDialog(HWND, LPARAM)
71        {
72                CStatic(GetDlgItem(IDC_ABOUT_ICON)).SetIcon(AtlLoadIconImage(IDI_MODULE, LR_DEFAULTCOLOR, 48, 48));
73                #pragma region Title Font
74                m_TitleFont = CreateTitleFont();
75                CStatic(GetDlgItem(IDC_ABOUT_TITLE)).SetFont(m_TitleFont);
76                #pragma endregion
77                #pragma region Disclaimer Font
78                {
79                        m_DisclaimerFont = CreateDisclaimerFont();
80                        CStatic CopyrightWarningText = GetDlgItem(IDC_ABOUT_COPYRIGHTWARNING);
81                        CopyrightWarningText.SetFont(m_DisclaimerFont);
82                        {
83                                CString sText = AtlLoadString(IDC_ABOUT_COPYRIGHTWARNING);
84                                CopyrightWarningText.SetWindowText(sText);
85                                CRect CurrentPosition;
86                                _W(CopyrightWarningText.GetWindowRect(CurrentPosition));
87                                CRect Position = CurrentPosition;
88                                {
89                                        CClientDC Dc(CopyrightWarningText);
90                                        CGdiSelector FontSelector(Dc, m_DisclaimerFont);
91                                        _W(Dc.DrawText(sText, -1, Position, DT_TOP | DT_LEFT | DT_WORDBREAK | DT_CALCRECT));
92                                }
93                                Position.right = CurrentPosition.right;
94                                CRect WindowPosition;
95                                _W(GetWindowRect(WindowPosition));
96                                _W(SetWindowPos(NULL, 0, 0, WindowPosition.Width(), WindowPosition.Height() + (Position.Height() - CurrentPosition.Height()), SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER));
97                                static const LONG g_nSafetyHeight = 4;
98                                _W(CopyrightWarningText.SetWindowPos(NULL, 0, 0, Position.Width(), Position.Height() + g_nSafetyHeight, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER));
99                        }
100                }
101                #pragma endregion
102                #pragma region Version Text
103                CStatic ProductVersionStatic = GetDlgItem(IDC_ABOUT_PRODUCTVERSION), FileVersionStatic = GetDlgItem(IDC_ABOUT_FILEVERSION);
104                CString sProductVersionFormat, sFileVersionFormat;
105                ProductVersionStatic.GetWindowText(sProductVersionFormat);
106                FileVersionStatic.GetWindowText(sFileVersionFormat);
107                CPath sModulePath = _VersionInfoHelper::GetModulePath();
108                ProductVersionStatic.SetWindowText(_VersionInfoHelper::GetVersionString(_VersionInfoHelper::GetProductVersion(sModulePath), sProductVersionFormat));
109                FileVersionStatic.SetWindowText(_VersionInfoHelper::GetVersionString(_VersionInfoHelper::GetFileVersion(sModulePath), sFileVersionFormat));
110                #pragma endregion
111                #pragma region Hyperlinks
112                _W(m_WebsiteHyperStatic.SubclassWindow(GetDlgItem(IDC_ABOUT_WEBSITE)));
113                _W(m_EmailHyperStatic.SubclassWindow(GetDlgItem(IDC_ABOUT_EMAIL)));
114                #pragma endregion
115                #pragma region Caption
116                {
117                        #if _TRACE || defined(_WIN64)
118                                CString sCaption;
119                                _W(GetWindowText(sCaption));
120                                sCaption.Append(_T(" // "));
121                                #if _DEVELOPMENT
122                                        sCaption.Append(_T("Dev "));
123                                #endif // _DEVELOPMENT
124                                sCaption.Append(_VersionInfoHelper::GetVersionString(_VersionInfoHelper::GetFileVersion(_VersionInfoHelper::GetModulePath())));
125                                #if defined(_WIN64)
126                                        sCaption.Append(_T(" (x64)"));
127                                #endif // defined(_WIN64)
128                                _W(SetWindowText(sCaption));
129                        #endif // _TRACE || defined(_WIN64)
130                }
131                #pragma endregion
132                #pragma region Window Position and Focus
133                _W(CenterWindow(GetParent()));
134                GetDlgItem(IDOK).SetFocus();
135                #pragma endregion
136                return FALSE;
137        }
138        LRESULT OnDestroy() throw()
139        {
140                _W(m_TitleFont.DeleteObject());
141                _W(m_DisclaimerFont.DeleteObject());
142                return 0;
143        }
144        LRESULT OnCommand(UINT, INT nIdentifier, HWND) throw()
145        {
146                _W(EndDialog(nIdentifier));
147                return 0;
148        }
149};
Note: See TracBrowser for help on using the repository browser.