5 /////////////////////////////////////////////////////////////////////////////
\r
6 // CAboutDlg dialog used for App About
\r
8 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
\r
10 int major, minor, build, revision;
\r
11 major = minor = build = revision = 0;
\r
13 TCHAR szFileName[MAX_PATH] = {'\0'};
\r
14 GetModuleFileName(NULL, szFileName, sizeof(szFileName));
\r
17 DWORD dwLen = GetFileVersionInfoSize(szFileName, &dwHandle);
\r
19 std::vector<BYTE> data(dwLen);
\r
20 if (GetFileVersionInfo(szFileName, dwHandle, dwLen, &data[0])) {
\r
21 VS_FIXEDFILEINFO *pInfo;
\r
23 if (VerQueryValue(&data[0], _T("\\"), reinterpret_cast<LPVOID *>(&pInfo), &uLen)) {
\r
24 major = pInfo->dwProductVersionMS >> 16;
\r
25 minor = pInfo->dwProductVersionMS & 0xffff;
\r
26 build = pInfo->dwProductVersionLS >> 16;
\r
27 revision = pInfo->dwProductVersionLS & 0xffff;
\r
31 m_versionInfo.Format(_T("%s Version %d.%d"), CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)), major, minor);
\r
34 s.Format(_T(".%d"), build);
\r
37 s.Format(_T(".%d"), revision);
\r
43 void CAboutDlg::DoDataExchange(CDataExchange *pDX)
\r
45 CDialog::DoDataExchange(pDX);
\r
46 //{{AFX_DATA_MAP(CAboutDlg)
\r
47 DDX_Control(pDX, IDC_URL, m_cURL);
\r
48 DDX_Text(pDX, IDC_VERSION_INFORMATION, m_versionInfo);
\r
52 BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
\r
53 //{{AFX_MSG_MAP(CAboutDlg)
\r
55 ON_BN_CLICKED(IDC_URL, OnUrl)
\r
61 /////////////////////////////////////////////////////////////////////////////
\r
62 // CAboutDlg message handlers
\r
65 void CAboutDlg::OnOK()
\r
70 void CAboutDlg::OnClose()
\r
75 void CAboutDlg::OnUrl()
\r
78 m_cURL.GetWindowText(szURL);
\r
80 ShellExecute(m_hWnd, NULL, szURL, NULL, NULL, SW_SHOWNORMAL);
\r
83 HBRUSH CAboutDlg::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
\r
85 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
\r
87 COLORREF crBlue = RGB(0, 0, 0xff);
\r
89 if (pWnd == &m_cURL) {
\r
90 pDC->SetTextColor(crBlue);
\r
96 BOOL CAboutDlg::OnSetCursor(CWnd *pWnd, UINT nHitTest, UINT message)
\r
99 m_cURL.GetWindowRect(rect);
\r
102 ::GetCursorPos(&p);
\r
104 if (rect.PtInRect(p)) {
\r
105 HCURSOR hCursor = (HCURSOR)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_HAND_CURSOR),
\r
106 IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
\r
107 SetCursor(hCursor);
\r
111 return CDialog::OnSetCursor(pWnd, nHitTest, message);
\r