UTILITY.CPP
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:12k
源码类别:
Windows编程
开发平台:
Visual C++
- /**************************************************************************
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
- ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
- PARTICULAR PURPOSE.
- Copyright 1997 Microsoft Corporation. All Rights Reserved.
- **************************************************************************/
- /**************************************************************************
- File: Utility.cpp
- Description:
- **************************************************************************/
- /**************************************************************************
- #include statements
- **************************************************************************/
- #include "Utility.h"
- #include "ShlFldr.h"
- #include "resource.h"
- /**************************************************************************
- private function prototypes
- **************************************************************************/
- /**************************************************************************
- global variables
- **************************************************************************/
- extern HIMAGELIST g_himlLarge;
- extern HIMAGELIST g_himlSmall;
- #define MAIN_KEY_STRING (TEXT("Software\RegView"))
- #define VALUE_STRING (TEXT("Display Settings"))
- #define INITIAL_COLUMN_SIZE 100
- /**************************************************************************
- GetKeyName()
- **************************************************************************/
- DWORD GetKeyName( HKEY hKeyRoot,
- LPCTSTR pszSubKey,
- DWORD dwIndex,
- LPTSTR pszOut,
- DWORD dwSize)
- {
- HKEY hKey;
- LONG lResult;
- FILETIME ft;
- if(!pszOut)
- return 0;
- if(!pszSubKey)
- pszSubKey = TEXT("");
- //open the specified key
- lResult = RegOpenKeyEx( hKeyRoot,
- pszSubKey,
- 0,
- KEY_ENUMERATE_SUB_KEYS,
- &hKey);
- if(ERROR_SUCCESS != lResult)
- return 0;
- //try to get the specified subkey
- lResult = RegEnumKeyEx( hKey,
- dwIndex,
- pszOut,
- &dwSize,
- NULL,
- NULL,
- NULL,
- &ft);
- RegCloseKey(hKey);
- if(ERROR_SUCCESS == lResult)
- return dwSize;
- return 0;
- }
- /**************************************************************************
- GetValueName()
- **************************************************************************/
- BOOL GetValueName( HKEY hKeyRoot,
- LPCTSTR pszSubKey,
- DWORD dwIndex,
- LPTSTR pszOut,
- DWORD dwSize)
- {
- HKEY hKey;
- LONG lResult;
- DWORD dwType;
- if(!pszOut)
- return 0;
- if(!pszSubKey)
- pszSubKey = TEXT("");
- //open the specified key
- lResult = RegOpenKeyEx( hKeyRoot,
- pszSubKey,
- 0,
- KEY_QUERY_VALUE,
- &hKey);
- if(ERROR_SUCCESS != lResult)
- return 0;
- //try to get the specified subkey
- lResult = RegEnumValue( hKey,
- dwIndex,
- pszOut,
- &dwSize,
- NULL,
- &dwType,
- NULL,
- NULL);
- RegCloseKey(hKey);
- return BOOL(ERROR_SUCCESS == lResult);
- if(ERROR_SUCCESS == lResult)
- return dwSize;
- return 0;
- }
- /**************************************************************************
- GetRootKeyText()
- **************************************************************************/
- DWORD GetRootKeyText(HKEY hKeyRoot, LPTSTR lpszOut, DWORD dwOutSize)
- {
- *lpszOut = 0;
- if(hKeyRoot == HKEY_CLASSES_ROOT)
- {
- lstrcpyn(lpszOut, TEXT("HKEY_CLASSES_ROOT"), dwOutSize);
- }
- else if(hKeyRoot == HKEY_CURRENT_USER)
- {
- lstrcpyn(lpszOut, TEXT("HKEY_CURRENT_USER"), dwOutSize);
- }
- else if(hKeyRoot == HKEY_LOCAL_MACHINE)
- {
- lstrcpyn(lpszOut, TEXT("HKEY_LOCAL_MACHINE"), dwOutSize);
- }
- else if(hKeyRoot == HKEY_USERS)
- {
- lstrcpyn(lpszOut, TEXT("HKEY_USERS"), dwOutSize);
- }
- else if(hKeyRoot == HKEY_PERFORMANCE_DATA)
- {
- lstrcpyn(lpszOut, TEXT("HKEY_PERFORMANCE_DATA"), dwOutSize);
- }
- else if(hKeyRoot == HKEY_CURRENT_CONFIG)
- {
- lstrcpyn(lpszOut, TEXT("HKEY_CURRENT_CONFIG"), dwOutSize);
- }
- else if(hKeyRoot == HKEY_DYN_DATA)
- {
- lstrcpyn(lpszOut, TEXT("HKEY_DYN_DATA"), dwOutSize);
- }
- return lstrlen(lpszOut) + 1;
- }
- /**************************************************************************
- RootKeyExists()
- **************************************************************************/
- BOOL RootKeyExists(HKEY hKeyRoot)
- {
- LONG lResult;
- HKEY hKey;
- //open the specified key
- lResult = RegOpenKeyEx( hKeyRoot,
- NULL,
- 0,
- KEY_ENUMERATE_SUB_KEYS,
- &hKey);
- if(ERROR_SUCCESS != lResult)
- return FALSE;
- RegCloseKey(hKey);
- return TRUE;
- }
- /**************************************************************************
- SaveGlobalSettings()
- **************************************************************************/
- BOOL SaveGlobalSettings(void)
- {
- HKEY hKey;
- LONG lResult;
- DWORD dwDisp;
- lResult = RegCreateKeyEx( HKEY_CURRENT_USER,
- MAIN_KEY_STRING,
- 0,
- NULL,
- REG_OPTION_NON_VOLATILE,
- KEY_ALL_ACCESS,
- NULL,
- &hKey,
- &dwDisp);
- if(lResult != ERROR_SUCCESS)
- return FALSE;
- //create an array to put our data in
- DWORD dwArray[4];
- dwArray[0] = g_nColumn1;
- dwArray[1] = g_nColumn2;
- dwArray[2] = g_bViewKeys;
- dwArray[3] = g_bShowIDW;
- //save the last printer selected
- lResult = RegSetValueEx( hKey,
- VALUE_STRING,
- 0,
- REG_BINARY,
- (LPBYTE)dwArray,
- sizeof(dwArray));
- RegCloseKey(hKey);
- if(lResult != ERROR_SUCCESS)
- return FALSE;
- return TRUE;
- }
- /**************************************************************************
- GetGlobalSettings()
- **************************************************************************/
- BOOL GetGlobalSettings(void)
- {
- HKEY hKey;
- LONG lResult;
- //set up the default data
- g_nColumn1 = INITIAL_COLUMN_SIZE;
- g_nColumn2 = INITIAL_COLUMN_SIZE;
- g_bViewKeys = TRUE;
- g_bShowIDW = FALSE;
- lResult = RegOpenKeyEx( HKEY_CURRENT_USER,
- MAIN_KEY_STRING,
- 0,
- KEY_ALL_ACCESS,
- &hKey);
- if(lResult != ERROR_SUCCESS)
- return FALSE;
- //create an array to put our data in
- DWORD dwArray[4];
- DWORD dwType;
- DWORD dwSize = sizeof(dwArray);
- //save the last printer selected
- lResult = RegQueryValueEx( hKey,
- VALUE_STRING,
- NULL,
- &dwType,
- (LPBYTE)dwArray,
- &dwSize);
- RegCloseKey(hKey);
- if(lResult != ERROR_SUCCESS)
- return FALSE;
- g_nColumn1 = dwArray[0];
- g_nColumn2 = dwArray[1];
- g_bViewKeys = dwArray[2];
- g_bShowIDW = dwArray[3];
- return TRUE;
- }
- /**************************************************************************
- CompareItems()
- **************************************************************************/
- int CALLBACK CompareItems(LPARAM lParam1, LPARAM lParam2, LPARAM lpData)
- {
- CShellFolder *pFolder = (CShellFolder*)lpData;
- if(!pFolder)
- return 0;
- return (int)pFolder->CompareIDs(0, (LPITEMIDLIST)lParam1, (LPITEMIDLIST)lParam2);
- }
- /**************************************************************************
- CreateImageLists()
- **************************************************************************/
- VOID CreateImageLists(VOID)
- {
- int cx;
- int cy;
- cx = GetSystemMetrics(SM_CXSMICON);
- cy = GetSystemMetrics(SM_CYSMICON);
- cx = 16;
- cy = 16;
- if(g_himlSmall)
- ImageList_Destroy(g_himlSmall);
- //set the small image list
- g_himlSmall = ImageList_Create(cx, cy, ILC_COLORDDB | ILC_MASK, 4, 0);
- if(g_himlSmall)
- {
- HICON hIcon;
- hIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_BINARY), IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR);
- ImageList_AddIcon(g_himlSmall, hIcon);
- hIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_STRING), IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR);
- ImageList_AddIcon(g_himlSmall, hIcon);
- hIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_FOLDER), IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR);
- ImageList_AddIcon(g_himlSmall, hIcon);
- hIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_FOLDEROPEN), IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR);
- ImageList_AddIcon(g_himlSmall, hIcon);
- }
- if(g_himlLarge)
- ImageList_Destroy(g_himlLarge);
- cx = GetSystemMetrics(SM_CXICON);
- cy = GetSystemMetrics(SM_CYICON);
- cx = 32;
- cy = 32;
- //set the large image list
- g_himlLarge = ImageList_Create(cx, cy, ILC_COLORDDB | ILC_MASK, 4, 0);
- if(g_himlSmall)
- {
- HICON hIcon;
- hIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_BINARY), IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR);
- ImageList_AddIcon(g_himlLarge, hIcon);
- hIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_STRING), IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR);
- ImageList_AddIcon(g_himlLarge, hIcon);
- hIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_FOLDER), IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR);
- ImageList_AddIcon(g_himlLarge, hIcon);
- hIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_FOLDEROPEN), IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR);
- ImageList_AddIcon(g_himlLarge, hIcon);
- }
- }
- /**************************************************************************
- DestroyImageLists()
- **************************************************************************/
- VOID DestroyImageLists(VOID)
- {
- if(g_himlSmall)
- ImageList_Destroy(g_himlSmall);
- if(g_himlLarge)
- ImageList_Destroy(g_himlLarge);
- }
- /**************************************************************************
- WideCharToLocal()
- **************************************************************************/
- int WideCharToLocal(LPTSTR pLocal, LPWSTR pWide, DWORD dwChars)
- {
- *pLocal = 0;
- #ifdef UNICODE
- lstrcpyn(pLocal, pWide, dwChars);
- #else
- WideCharToMultiByte( CP_ACP,
- 0,
- pWide,
- -1,
- pLocal,
- dwChars,
- NULL,
- NULL);
- #endif
- return lstrlen(pLocal);
- }
- /**************************************************************************
- LocalToWideChar()
- **************************************************************************/
- int LocalToWideChar(LPWSTR pWide, LPTSTR pLocal, DWORD dwChars)
- {
- *pWide = 0;
- #ifdef UNICODE
- lstrcpyn(pWide, pLocal, dwChars);
- #else
- MultiByteToWideChar( CP_ACP,
- 0,
- pLocal,
- -1,
- pWide,
- dwChars);
- #endif
- return lstrlenW(pWide);
- }