aboutdlg.cpp
来自「《ATL深入解析》随书源码」· C++ 代码 · 共 659 行 · 第 1/2 页
CPP
659 行
}
case 6: // Intel Pentium Pro/II
LoadString (hinst,
IDS_PROCESSOR_ARCHITECTURE_INTEL_PENTIUM,
szFormat, DIM (szFormat)) ;
switch (HIBYTE(si.wProcessorRevision)) {
default:
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("Pentium Pro"),
HIBYTE (si.wProcessorRevision),
LOBYTE (si.wProcessorRevision)) ;
break ;
case 1:
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("Pentium Pro"),
HIBYTE (si.wProcessorRevision),
LOBYTE (si.wProcessorRevision)) ;
break ;
case 3:
case 5:
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("Pentium II"),
HIBYTE (si.wProcessorRevision),
LOBYTE (si.wProcessorRevision)) ;
break ;
}
}
break ;
case PROCESSOR_ARCHITECTURE_MIPS: // MIPS
switch (si.wProcessorLevel) { // 00xx - xx is 8-bit implementation #
LoadString (hinst, IDS_PROCESSOR_ARCHITECTURE_MIPS,
szFormat, DIM (szFormat)) ;
default:
bRecognized = FALSE ;
LoadString (hinst, IDS_PROCESSOR_LEVEL_MIPS_UNKNOWN,
szBuffer, DIM (szBuffer)) ;
break ;
case 0x0004: // MIPS R4000
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("R4000"),
LOBYTE (si.wProcessorRevision)) ;
break ;
}
break ;
case PROCESSOR_ARCHITECTURE_ALPHA: // Alpha
LoadString (hinst, IDS_PROCESSOR_ARCHITECTURE_ALPHA,
szFormat, DIM (szFormat)) ;
switch (si.wProcessorLevel) { // xxxx - 16-bit processor version #
default:
bRecognized = FALSE ;
LoadString (hinst, IDS_PROCESSOR_LEVEL_ALPHA_UNKNOWN,
szBuffer, DIM (szBuffer)) ;
break ;
case 21064: // Alpha 21064
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("21064"),
(TCHAR)(HIBYTE (si.wProcessorRevision) + (TCHAR) 'A'),
LOBYTE (si.wProcessorRevision)) ;
break ;
case 21066: // Alpha 21066
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("21066"),
(TCHAR)(HIBYTE (si.wProcessorRevision) + (TCHAR) 'A'),
LOBYTE (si.wProcessorRevision)) ;
break ;
case 21164: // Alpha 21164
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("21164"),
(TCHAR)(HIBYTE (si.wProcessorRevision) + (TCHAR) 'A'),
LOBYTE (si.wProcessorRevision)) ;
break ;
}
break ;
case PROCESSOR_ARCHITECTURE_PPC: // Power PC
LoadString (hinst, IDS_PROCESSOR_ARCHITECTURE_PPC,
szFormat, DIM (szFormat)) ;
switch (si.wProcessorLevel) { // xxxx - 16-bit processor version #
default:
bRecognized = FALSE ;
LoadString (hinst, IDS_PROCESSOR_LEVEL_PPC_UNKNOWN,
szBuffer, DIM (szBuffer)) ;
break ;
case 1: // Power PC 601
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("601"),
HIBYTE (si.wProcessorRevision),
LOBYTE (si.wProcessorRevision)) ;
break ;
case 3: // Power PC 603
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("603"),
HIBYTE (si.wProcessorRevision),
LOBYTE (si.wProcessorRevision)) ;
break ;
case 4: // Power PC 604
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("604"),
HIBYTE (si.wProcessorRevision),
LOBYTE (si.wProcessorRevision)) ;
break ;
case 6: // Power PC 603+
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("603+"),
HIBYTE (si.wProcessorRevision),
LOBYTE (si.wProcessorRevision)) ;
break ;
case 9: // Power PC 604+
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("604+"),
HIBYTE (si.wProcessorRevision),
LOBYTE (si.wProcessorRevision)) ;
break ;
case 20: // Power PC 620
FormatMessageFromString (
szFormat,
szBuffer, DIM (szBuffer),
TEXT ("620"),
HIBYTE (si.wProcessorRevision),
LOBYTE (si.wProcessorRevision)) ;
break ;
}
break;
case PROCESSOR_ARCHITECTURE_SHX: // Hitachi SHx
LoadString (hinst, IDS_PROCESSOR_ARCHITECTURE_SHX,
szFormat, DIM (szFormat)) ;
break;
case PROCESSOR_ARCHITECTURE_ARM: // StrongArm
LoadString (hinst, IDS_PROCESSOR_ARCHITECTURE_ARM,
szFormat, DIM (szFormat)) ;
break;
case PROCESSOR_ARCHITECTURE_IA64: // IA64
LoadString (hinst, IDS_PROCESSOR_ARCHITECTURE_IA64,
szFormat, DIM (szFormat)) ;
break;
case PROCESSOR_ARCHITECTURE_ALPHA64: // Alpha 64
LoadString (hinst, IDS_PROCESSOR_ARCHITECTURE_ALPHA64,
szFormat, DIM (szFormat)) ;
break ;
}
// If the processor type isn't yet recognized, check the, supposedly,
// "obsolete" dwProcessorType field of the SYSTEM_INFO structure for
// a reasonable value and use it.
if (!bRecognized) {
switch (si.dwProcessorType) {
case PROCESSOR_INTEL_386:
LoadString (hinst, IDS_PROCESSOR_NOREV_INTEL_386,
szBuffer, DIM (szBuffer)) ;
break ;
case PROCESSOR_INTEL_486:
LoadString (hinst, IDS_PROCESSOR_NOREV_INTEL_486,
szBuffer, DIM (szBuffer)) ;
break ;
case PROCESSOR_INTEL_PENTIUM:
LoadString (hinst, IDS_PROCESSOR_NOREV_INTEL_PENTIUM,
szBuffer, DIM (szBuffer)) ;
break ;
case PROCESSOR_MIPS_R4000:
LoadString (hinst, IDS_PROCESSOR_NOREV_MIPS_R4000,
szBuffer, DIM (szBuffer)) ;
break ;
case PROCESSOR_ALPHA_21064:
LoadString (hinst, IDS_PROCESSOR_NOREV_ALPHA_21064,
szBuffer, DIM (szBuffer)) ;
break ;
}
}
SetDlgItemText (hwnd, IDC_ABOUT_PROCESSORVERSION, szBuffer) ;
}
//
// DWORD FormatMessageFromString (LPCTSTR szFormat, LPTSTR szBuffer, DWORD nSize, ...)
//
// szFormat Format string containing message insertion markers
// szBuffer Output string buffer
// nSize Size of output string buffer
// ... Variable number of optional parameter
//
//
// PURPOSE:
// Convenient helper function for calling FormatMessage
//
// COMMENTS:
//
static DWORD
FormatMessageFromString (LPCTSTR szFormat, LPTSTR szBuffer, DWORD nSize, ...)
{
DWORD dwRet ;
va_list marker ;
va_start (marker, nSize) ; // Initialize variable arguments
dwRet = FormatMessage (FORMAT_MESSAGE_FROM_STRING,
szFormat, 0, 0,
szBuffer, nSize,
&marker) ;
va_end (marker) ; // Reset variable arguments
return dwRet ;
}
//
// void AboutDlg_OnCommand (HWND hwnd, int id, hwnd hwndCtl, UINT codeNotify)
//
// hwnd Window handle for the dialog box window
// id Specifies the identifier of the menu item, control, or accelerator.
// hwndCtl Handle of the control sending the message if the message
// is from a control, otherwise, this parameter is NULL.
// codeNotify Specifies the notification code if the message is from a control.
// This parameter is 1 when the message is from an accelerator.
// This parameter is 0 when the message is from a menu.
//
//
// PURPOSE:
// Handle the keyboard and control notifications.
// An OK button press, or Enter/Esc keypress
// all dismiss the About dialog box.
//
//
// COMMENTS:
//
static
void AboutDlg_OnCommand (HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch (id) {
case IDOK: // OK pushbutton/Enter keypress
case IDCANCEL: // Esc keypress
EndDialog (hwnd, TRUE) ; // Dismiss the about dialog box
break ;
default:
break ;
}
}
//
// NTTYPE GetNTVersion ()
//
// PURPOSE:
// Determine the specific variant of Windows NT on which
// we're running.
//
// COMMENTS:
// Windows NT 4.0 does not follow the documentation
// in the knowledgebase. Specifically, both versions set the
// appropriate registry key to "LANMANNT" rather than "SERVERNT".
//
static NTTYPE
GetNTVersion ()
{
TCHAR szValue [256] ;
DWORD dwType = 0, dwSize = sizeof (szValue) ;
HKEY hKey = NULL ;
LONG lStatus ;
static const TCHAR szProductOptions [] = TEXT("SYSTEM\\CurrentControlSet\\Control\\ProductOptions") ;
static const TCHAR szProductType [] = TEXT("ProductType") ;
static const TCHAR szWinNT [] = TEXT("WINNT") ; // Windows NT Workstation is running
static const TCHAR szServerNT [] = TEXT("SERVERNT") ; // Windows NT Server (3.5 or later) is running
static const TCHAR szAdvancedServerNT [] = TEXT("LANMANNT") ; // Windows NT Advanced Server (3.1) is running
lStatus = ::RegOpenKeyEx (HKEY_LOCAL_MACHINE,szProductOptions, 0, KEY_QUERY_VALUE, &hKey) ;
if (ERROR_SUCCESS != lStatus)
return typeDefault ; // Windows NT
lStatus = ::RegQueryValueEx (hKey, szProductType, NULL, &dwType, (LPBYTE) szValue, &dwSize) ;
::RegCloseKey (hKey) ;
if (ERROR_SUCCESS != lStatus)
return typeDefault ; // Windows NT
if (0 == lstrcmpi (szWinNT, szValue))
return typeWorkstation ; // Windows NT Workstation
else if (0 == lstrcmpi (szServerNT, szValue))
return typeServer ; // Windows NT Server
else if (0 == lstrcmpi (szAdvancedServerNT, szValue))
return typeServer ; // Windows NT Advanced Server (3.1)
return typeDefault ; // Windows NT
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?