Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 1005 of file shell32_main.cpp.
{ static DWORD cxLogoBmp; static DWORD cyLogoBmp; static HBITMAP hLogoBmp; static HWND hWndAuthors; switch(msg) { case WM_INITDIALOG: { ABOUT_INFO *info = (ABOUT_INFO *)lParam; if (info) { const WCHAR szRegKey[] = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"; HKEY hRegKey; MEMORYSTATUSEX MemStat; WCHAR szAppTitle[512]; WCHAR szAppTitleTemplate[512]; WCHAR szAuthorsText[20]; // Preload the ROS bitmap hLogoBmp = (HBITMAP)LoadImage(shell32_hInstance, MAKEINTRESOURCE(IDB_SHELL_ABOUT_LOGO_24BPP), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); if(hLogoBmp) { BITMAP bmpLogo; GetObject( hLogoBmp, sizeof(BITMAP), &bmpLogo ); cxLogoBmp = bmpLogo.bmWidth; cyLogoBmp = bmpLogo.bmHeight; } // Set App-specific stuff (icon, app name, szOtherStuff string) SendDlgItemMessageW(hWnd, IDC_ABOUT_ICON, STM_SETICON, (WPARAM)info->hIcon, 0); GetWindowTextW( hWnd, szAppTitleTemplate, sizeof(szAppTitleTemplate) / sizeof(WCHAR) ); swprintf( szAppTitle, szAppTitleTemplate, info->szApp ); SetWindowTextW( hWnd, szAppTitle ); SetDlgItemTextW( hWnd, IDC_ABOUT_APPNAME, info->szApp ); SetDlgItemTextW( hWnd, IDC_ABOUT_OTHERSTUFF, info->szOtherStuff ); // Set the registered user and organization name if(RegOpenKeyExW( HKEY_LOCAL_MACHINE, szRegKey, 0, KEY_QUERY_VALUE, &hRegKey ) == ERROR_SUCCESS) { SetRegTextData( hWnd, hRegKey, L"RegisteredOwner", IDC_ABOUT_REG_USERNAME ); SetRegTextData( hWnd, hRegKey, L"RegisteredOrganization", IDC_ABOUT_REG_ORGNAME ); RegCloseKey( hRegKey ); } // Set the value for the installed physical memory MemStat.dwLength = sizeof(MemStat); if( GlobalMemoryStatusEx(&MemStat) ) { WCHAR szBuf[12]; if (MemStat.ullTotalPhys > 1024 * 1024 * 1024) { double dTotalPhys; WCHAR szDecimalSeparator[4]; WCHAR szUnits[3]; // We're dealing with GBs or more MemStat.ullTotalPhys /= 1024 * 1024; if (MemStat.ullTotalPhys > 1024 * 1024) { // We're dealing with TBs or more MemStat.ullTotalPhys /= 1024; if (MemStat.ullTotalPhys > 1024 * 1024) { // We're dealing with PBs or more MemStat.ullTotalPhys /= 1024; dTotalPhys = (double)MemStat.ullTotalPhys / 1024; wcscpy( szUnits, L"PB" ); } else { dTotalPhys = (double)MemStat.ullTotalPhys / 1024; wcscpy( szUnits, L"TB" ); } } else { dTotalPhys = (double)MemStat.ullTotalPhys / 1024; wcscpy( szUnits, L"GB" ); } // We need the decimal point of the current locale to display the RAM size correctly if (GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, szDecimalSeparator, sizeof(szDecimalSeparator) / sizeof(WCHAR)) > 0) { UCHAR uDecimals; UINT uIntegral; uIntegral = (UINT)dTotalPhys; uDecimals = (UCHAR)((UINT)(dTotalPhys * 100) - uIntegral * 100); // Display the RAM size with 2 decimals swprintf(szBuf, L"%u%s%02u %s", uIntegral, szDecimalSeparator, uDecimals, szUnits); } } else { // We're dealing with MBs, don't show any decimals swprintf( szBuf, L"%u MB", (UINT)MemStat.ullTotalPhys / 1024 / 1024 ); } SetDlgItemTextW( hWnd, IDC_ABOUT_PHYSMEM, szBuf); } // Add the Authors dialog hWndAuthors = CreateDialogW( shell32_hInstance, MAKEINTRESOURCEW(IDD_ABOUT_AUTHORS), hWnd, AboutAuthorsDlgProc ); LoadStringW( shell32_hInstance, IDS_SHELL_ABOUT_AUTHORS, szAuthorsText, sizeof(szAuthorsText) / sizeof(WCHAR) ); SetDlgItemTextW( hWnd, IDC_ABOUT_AUTHORS, szAuthorsText ); } return TRUE; } case WM_PAINT: { if(hLogoBmp) { PAINTSTRUCT ps; HDC hdc; HDC hdcMem; hdc = BeginPaint(hWnd, &ps); hdcMem = CreateCompatibleDC(hdc); if(hdcMem) { SelectObject(hdcMem, hLogoBmp); BitBlt(hdc, 0, 0, cxLogoBmp, cyLogoBmp, hdcMem, 0, 0, SRCCOPY); DeleteDC(hdcMem); } EndPaint(hWnd, &ps); } }; break; case WM_COMMAND: { switch(wParam) { case IDOK: case IDCANCEL: EndDialog(hWnd, TRUE); return TRUE; case IDC_ABOUT_AUTHORS: { static BOOL bShowingAuthors = FALSE; WCHAR szAuthorsText[20]; if(bShowingAuthors) { LoadStringW( shell32_hInstance, IDS_SHELL_ABOUT_AUTHORS, szAuthorsText, sizeof(szAuthorsText) / sizeof(WCHAR) ); ShowWindow( hWndAuthors, SW_HIDE ); } else { LoadStringW( shell32_hInstance, IDS_SHELL_ABOUT_BACK, szAuthorsText, sizeof(szAuthorsText) / sizeof(WCHAR) ); ShowWindow( hWndAuthors, SW_SHOW ); } SetDlgItemTextW( hWnd, IDC_ABOUT_AUTHORS, szAuthorsText ); bShowingAuthors = !bShowingAuthors; return TRUE; } } }; break; case WM_CLOSE: EndDialog(hWnd, TRUE); break; } return FALSE; }