📄 about.c
字号:
#include <windows.h>#include "fconfig.h"#include "xerror.h"#include "ui_win32.h"#include "about.h"voidCenterWindow (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 LPTSTRGetStringRes (int id){ static TCHAR buffer[MAX_PATH]; buffer[0] = 0; LoadString (GetModuleHandle (NULL), id, buffer, MAX_PATH); return buffer;}static LRESULT CALLBACKAbout (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;}voidAboutBox (void){#ifdef DDRAW_DRIVER if (directX == 1) return;#endif DialogBox (hInstance, "AboutBox", hWnd, (DLGPROC) About);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -