Logo Search packages:      
Sourcecode: xaos version File versions  Download package

about.c

#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);
}

Generated by  Doxygen 1.6.0   Back to index