Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/ui/ui-drv/win32/about.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/ui-drv/win32/about.c')
-rw-r--r--src/ui/ui-drv/win32/about.c239
1 files changed, 239 insertions, 0 deletions
diff --git a/src/ui/ui-drv/win32/about.c b/src/ui/ui-drv/win32/about.c
new file mode 100644
index 0000000..22b040d
--- /dev/null
+++ b/src/ui/ui-drv/win32/about.c
@@ -0,0 +1,239 @@
+#include <windows.h>
+#include "fconfig.h"
+#include "xerror.h"
+#include "ui_win32.h"
+#include "about.h"
+void CenterWindow(HWND hwndChild, HWND hwndParent)
+{
+ RECT rChild, rParent, rWorkArea;
+ int wChild, hChild, wParent, hParent;
+ int xNew, yNew;
+ BOOL bResult;
+
+ GetWindowRect(hwndChild, &rChild);
+ wChild = rChild.right - rChild.left;
+ hChild = rChild.bottom - rChild.top;
+
+ GetWindowRect(hwndParent, &rParent);
+ wParent = rParent.right - rParent.left;
+ hParent = rParent.bottom - rParent.top;
+
+ bResult = SystemParametersInfo(SPI_GETWORKAREA, // system parameter to query or set
+ sizeof(RECT), &rWorkArea, 0);
+ if (!bResult) {
+ rWorkArea.left = rWorkArea.top = 0;
+ rWorkArea.right = GetSystemMetrics(SM_CXSCREEN);
+ rWorkArea.bottom = GetSystemMetrics(SM_CYSCREEN);
+ }
+
+ xNew = rParent.left + ((wParent - wChild) / 2);
+ if (xNew < rWorkArea.left) {
+ xNew = rWorkArea.left;
+ } else if ((xNew + wChild) > rWorkArea.right) {
+ xNew = rWorkArea.right - wChild;
+ }
+
+ yNew = rParent.top + ((hParent - hChild) / 2);
+ if (yNew < rWorkArea.top) {
+ yNew = rWorkArea.top;
+ } else if ((yNew + hChild) > rWorkArea.bottom) {
+ yNew = rWorkArea.bottom - hChild;
+ }
+
+ SetWindowPos(hwndChild, NULL, xNew, yNew, 0, 0,
+ SWP_NOSIZE | SWP_NOZORDER);
+ return;
+}
+
+
+static LPTSTR GetStringRes(int id)
+{
+ static TCHAR buffer[MAX_PATH];
+
+ buffer[0] = 0;
+ LoadString(GetModuleHandle(NULL), id, buffer, MAX_PATH);
+ return buffer;
+}
+
+static LRESULT CALLBACK
+About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ static HFONT hfontDlg; // Font for dialog text
+ static HFONT hFinePrint; // Font for 'fine print' in dialog
+ DWORD dwVerInfoSize; // Size of version information block
+ LPSTR lpVersion; // String pointer to 'version' text
+ DWORD dwVerHnd = 0; // An 'ignored' parameter, always '0'
+ UINT uVersionLen;
+ WORD wRootLen;
+ BOOL bRetCode;
+ int i;
+ char szFullPath[256];
+ char szResult[256];
+ char szGetName[256];
+ DWORD dwVersion;
+ char szVersion[40];
+ DWORD dwResult;
+
+ switch (message) {
+ case WM_INITDIALOG:
+ ShowWindow(hDlg, SW_HIDE);
+
+ if (PRIMARYLANGID(GetUserDefaultLangID()) == LANG_JAPANESE) {
+ hfontDlg =
+ CreateFont(14, 0, 0, 0, 0, 0, 0, 0, SHIFTJIS_CHARSET, 0, 0,
+ 0, VARIABLE_PITCH | FF_DONTCARE, "");
+ hFinePrint =
+ CreateFont(11, 0, 0, 0, 0, 0, 0, 0, SHIFTJIS_CHARSET, 0, 0,
+ 0, VARIABLE_PITCH | FF_DONTCARE, "");
+ } else {
+ hfontDlg = CreateFont(14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ VARIABLE_PITCH | FF_SWISS, "");
+ hFinePrint = CreateFont(11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ VARIABLE_PITCH | FF_SWISS, "");
+ }
+
+ CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER));
+ GetModuleFileName(hInstance, szFullPath, sizeof(szFullPath));
+#if 0
+ // Now lets dive in and pull out the version information:
+ dwVerInfoSize = GetFileVersionInfoSize(szFullPath, &dwVerHnd);
+ if (dwVerInfoSize) {
+ LPSTR lpstrVffInfo;
+ HANDLE hMem;
+ hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
+ lpstrVffInfo = GlobalLock(hMem);
+ GetFileVersionInfo(szFullPath, dwVerHnd, dwVerInfoSize,
+ lpstrVffInfo);
+ // The below 'hex' value looks a little confusing, but
+ // essentially what it is, is the hexidecimal representation
+ // of a couple different values that represent the language
+ // and character set that we are wanting string values for.
+ // 040904E4 is a very common one, because it means:
+ // US English, Windows MultiLingual characterset
+ // Or to pull it all apart:
+ // 04------ = SUBLANG_ENGLISH_USA
+ // --09---- = LANG_ENGLISH
+ // --11---- = LANG_JAPANESE
+ // ----04E4 = 1252 = Codepage for Windows:Multilingual
+
+ lstrcpy(szGetName, GetStringRes(IDS_VER_INFO_LANG));
+
+ wRootLen = (WORD) lstrlen(szGetName); // Save this position
+
+ // Set the title of the dialog:
+ lstrcat(szGetName, "ProductName");
+ bRetCode = VerQueryValue((LPVOID) lpstrVffInfo,
+ (LPSTR) szGetName,
+ (LPVOID) & lpVersion,
+ (UINT *) & uVersionLen);
+
+ // Notice order of version and string...
+ if (PRIMARYLANGID(GetUserDefaultLangID()) == LANG_JAPANESE) {
+ lstrcpy(szResult, lpVersion);
+ lstrcat(szResult, " のバージョン情報");
+ } else {
+ lstrcpy(szResult, "About ");
+ lstrcat(szResult, lpVersion);
+ }
+
+ // -----------------------------------------------------
+
+ SetWindowText(hDlg, szResult);
+
+ // Walk through the dialog items that we want to replace:
+ for (i = DLG_VERFIRST; i <= DLG_VERLAST; i++) {
+ GetDlgItemText(hDlg, i, szResult, sizeof(szResult));
+ szGetName[wRootLen] = (char) 0;
+ lstrcat(szGetName, szResult);
+ uVersionLen = 0;
+ lpVersion = NULL;
+ x_message("lpstrVffInfo %s", lpstrVffInfo);
+ bRetCode = VerQueryValue((LPVOID) lpstrVffInfo,
+ (LPSTR) szGetName,
+ (LPVOID) & lpVersion,
+ (UINT *) & uVersionLen);
+
+ if (bRetCode && uVersionLen && lpVersion) {
+ // Replace dialog item text with version info
+ lstrcpy(szResult, lpVersion);
+ SetDlgItemText(hDlg, i, szResult);
+ } else {
+ dwResult = GetLastError();
+
+ wsprintf(szResult, GetStringRes(IDS_VERSION_ERROR),
+ dwResult);
+ SetDlgItemText(hDlg, i, szResult);
+ }
+ SendMessage(GetDlgItem(hDlg, i), WM_SETFONT,
+ /* (ULONG_PTR) */
+ (unsigned long *) ((i == DLG_VERLAST) ?
+ hFinePrint : hfontDlg),
+ TRUE);
+ } // for (i = DLG_VERFIRST; i <= DLG_VERLAST; i++)
+
+
+ GlobalUnlock(hMem);
+ GlobalFree(hMem);
+ } else {
+ // No version information available.
+ } // if (dwVerInfoSize)
+#endif
+ for (i = DLG_VERFIRST; i <= IDC_LICENSE; i++) {
+ SendMessage(GetDlgItem(hDlg, i), WM_SETFONT,
+ /* (ULONG_PTR) */
+ (unsigned long *) ((i == DLG_VERLAST) ? hFinePrint
+ : hfontDlg), TRUE);
+ } // for (i = DLG_VERFIRST; i <= DLG_VERLAST; i++)
+
+ SendMessage(GetDlgItem(hDlg, IDC_LABEL), WM_SETFONT,
+ (WPARAM) hfontDlg, (LPARAM) TRUE);
+
+ // We are using GetVersion rather then GetVersionEx
+ // because earlier versions of Windows NT and Win32s
+ // didn't include GetVersionEx:
+ dwVersion = GetVersion();
+
+ if (dwVersion < 0x80000000) {
+ // Windows NT
+ wsprintf(szVersion, "Microsoft Windows NT %u.%u (Build: %u)",
+ (DWORD) (LOBYTE(LOWORD(dwVersion))),
+ (DWORD) (HIBYTE(LOWORD(dwVersion))),
+ (DWORD) (HIWORD(dwVersion)));
+ } else if (LOBYTE(LOWORD(dwVersion)) < 4) {
+ // Win32s
+ wsprintf(szVersion, "Microsoft Win32s %u.%u (Build: %u)",
+ (DWORD) (LOBYTE(LOWORD(dwVersion))),
+ (DWORD) (HIBYTE(LOWORD(dwVersion))),
+ (DWORD) (HIWORD(dwVersion) & ~0x8000));
+ } else {
+ // Windows 95
+ wsprintf(szVersion, "Microsoft Windows 95 %u.%u",
+ (DWORD) (LOBYTE(LOWORD(dwVersion))),
+ (DWORD) (HIBYTE(LOWORD(dwVersion))));
+ }
+
+ SetWindowText(GetDlgItem(hDlg, IDC_OSVERSION), szVersion);
+ ShowWindow(hDlg, SW_SHOW);
+ return (TRUE);
+
+ case WM_COMMAND:
+ if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
+ EndDialog(hDlg, TRUE);
+ DeleteObject(hfontDlg);
+ DeleteObject(hFinePrint);
+ return (TRUE);
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+void AboutBox(void)
+{
+#ifdef DDRAW_DRIVER
+ if (directX == 1)
+ return;
+#endif
+ DialogBox(hInstance, "AboutBox", hWnd, (DLGPROC) About);
+}