Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

250 lines
6.3 KiB

//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1993 **
//*********************************************************************
#include "admincfg.h"
UINT nFileShortcutItems=0;
/*******************************************************************
NAME: RestoreStateFromRegistry
SYNOPSIS: Reads from registry and restores window
placement
********************************************************************/
BOOL RestoreStateFromRegistry(HWND hWnd)
{
HKEY hKeyMain;
DWORD dwType,dwSize;
UINT nIndex;
CHAR szFilename[MAX_PATH+1];
CHAR szValueName[24];
DWORD dwAlloc = MEDIUMBUF;
DWORD dwUsed = 0;
if (dwCmdLineFlags & CLF_DIALOGMODE)
return TRUE; // nothing to do
if (RegCreateKey(HKEY_CURRENT_USER,szAPPREGKEY,&hKeyMain) !=
ERROR_SUCCESS) return FALSE;
// get template names (if not already specified on command line)
if (!(dwCmdLineFlags & CLF_USETEMPLATENAME))
{
nIndex = 0;
wsprintf(szValueName, szTemplate, nIndex);
dwSize = sizeof(szFilename);
while (RegQueryValueEx(hKeyMain,szValueName,NULL,&dwType,
(CHAR *) &szFilename,&dwSize) == ERROR_SUCCESS)
{
if (!(pbufTemplates=ResizeBuffer(pbufTemplates,hBufTemplates,dwUsed+dwSize+4,&dwBufTemplates)))
return ERROR_NOT_ENOUGH_MEMORY;
lstrcpy(pbufTemplates+dwUsed,szFilename);
dwUsed += dwSize;
nIndex++;
wsprintf(szValueName, szTemplate, nIndex);
dwSize = sizeof(szFilename);
}
if (nIndex == 0)
{
dwUsed = GetDefaultTemplateFilename(hWnd,pbufTemplates,dwBufTemplates);
}
// doubly null-terminate the buffer... safe to do this because we
// tacked on the extra "+4" in the ResizeBuffer calls above
*(pbufTemplates+dwUsed) = '\0';
dwUsed ++;
}
// get view information
dwSize = sizeof(ViewInfo);
if (RegQueryValueEx(hKeyMain,LoadSz(IDS_VIEW,szSmallBuf,
sizeof(szSmallBuf)),NULL,&dwType,
(CHAR *) &ViewInfo,&dwSize) != ERROR_SUCCESS) {
ViewInfo.fStatusBar = ViewInfo.fToolbar = TRUE;
ViewInfo.dwView = VT_LARGEICONS;
}
RegCloseKey(hKeyMain);
return TRUE;
}
/*******************************************************************
NAME: SaveStateToRegistry
SYNOPSIS: Saves window placement, etc.
********************************************************************/
BOOL SaveStateToRegistry(HWND hWnd)
{
HKEY hKeyMain;
WINDOWPLACEMENT wp;
UINT i;
CHAR szValueName[24];
DWORD dwFileLen;
CHAR *p;
if (dwCmdLineFlags & CLF_DIALOGMODE)
return TRUE; // nothing to do
if (RegCreateKey(HKEY_CURRENT_USER,szAPPREGKEY,&hKeyMain) !=
ERROR_SUCCESS) return FALSE;
// save windowplacement
wp.length = sizeof(wp);
if (GetWindowPlacement(hWnd,&wp)) {
RegSetValueEx(hKeyMain,LoadSz(IDS_WP,szSmallBuf,
sizeof(szSmallBuf)),0,REG_BINARY,(CHAR *) &wp,
sizeof(WINDOWPLACEMENT));
}
// save list of template files
p = pbufTemplates;
i = 0;
while (*p)
{
wsprintf(szValueName, szTemplate, i);
dwFileLen = lstrlen(p)+1;
RegSetValueEx(hKeyMain,szValueName,0,REG_SZ,p,dwFileLen);
p += dwFileLen;
i++;
}
// make sure there aren't more template file already listed in the registry.
wsprintf(szValueName, szTemplate, i);
RegDeleteValue(hKeyMain,szValueName);
// save view infomation
RegSetValueEx(hKeyMain,LoadSz(IDS_VIEW,szSmallBuf,sizeof(szSmallBuf)),
0,REG_BINARY,(CHAR *)&ViewInfo,sizeof(ViewInfo));
RegCloseKey(hKeyMain);
return TRUE;
}
VOID LoadFileMenuShortcuts(HMENU hMenu)
{
HKEY hKey;
UINT nIndex,nMenuID = IDM_FILEHISTORY,uPos = GetMenuItemCount(hMenu);
CHAR szValueName[24],szFileName[MAX_PATH+1];
DWORD dwSize;
MENUITEMINFO mii;
if (RegOpenKey(HKEY_CURRENT_USER,szAPPREGKEY,&hKey) !=
ERROR_SUCCESS) return;
memset(&mii,0,sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
mii.fType = MFT_STRING;
mii.dwTypeData = szFileName;
mii.fState = MFS_ENABLED;
for (nIndex = 0; nIndex<FILEHISTORY_COUNT;nIndex ++) {
wsprintf(szValueName,szLastFile,nIndex);
dwSize = sizeof(szFileName);
if (RegQueryValueEx(hKey,szValueName,NULL,NULL,szFileName,
&dwSize) == ERROR_SUCCESS) {
if (!nFileShortcutItems) {
// if this is the first file shortcut, insert a separator
// bar first
MENUITEMINFO miiTmp;
memset(&miiTmp,0,sizeof(miiTmp));
miiTmp.cbSize = sizeof(miiTmp);
miiTmp.fMask = MIIM_TYPE;
miiTmp.fType = MFT_SEPARATOR;
InsertMenuItem(hMenu,uPos,TRUE,&miiTmp);
uPos++;
}
mii.wID = nMenuID;
mii.cch = lstrlen(szFileName);
// insert the file shortcut menu item
InsertMenuItem(hMenu,uPos,TRUE,&mii);
uPos++;
nMenuID ++;
nFileShortcutItems++;
}
}
RegCloseKey(hKey);
}
VOID SaveFileMenuShortcuts(HMENU hMenu)
{
HKEY hKey;
UINT nIndex,nMenuID = IDM_FILEHISTORY,nLen;
CHAR szValueName[24],szFilename[MAX_PATH+1];
MENUITEMINFO mii;
if (RegCreateKey(HKEY_CURRENT_USER,szAPPREGKEY,&hKey) !=
ERROR_SUCCESS) return;
memset(&mii,0,sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE;
mii.dwTypeData = szFilename;
// get the file shortcuts from menu and save them to registry
for (nIndex = 0;nIndex<FILEHISTORY_COUNT;nIndex++) {
mii.cch = sizeof(szFilename);
if (GetMenuItemInfo(hMenu,nMenuID,FALSE,&mii) &&
(nLen=lstrlen(szFilename))) {
wsprintf(szValueName,szLastFile,nIndex);
RegSetValueEx(hKey,szValueName,0,REG_SZ,szFilename,
nLen+1);
}
nMenuID++;
}
RegCloseKey(hKey);
}
/*******************************************************************
NAME: RestoreWindowPlacement
SYNOPSIS: Restores window placement from registry, calls
SetWindowPlacement()
********************************************************************/
BOOL RestoreWindowPlacement( HWND hWnd,int nCmdShow)
{
WINDOWPLACEMENT wp;
DWORD dwType,dwSize = sizeof(WINDOWPLACEMENT);
HKEY hKeyMain;
BOOL fRestored=FALSE;
if (RegCreateKey(HKEY_CURRENT_USER,szAPPREGKEY,&hKeyMain) ==
ERROR_SUCCESS) {
// get info out of registry
if (RegQueryValueEx(hKeyMain,LoadSz(IDS_WP,szSmallBuf,
sizeof(szSmallBuf)),NULL,&dwType,
(CHAR *) &wp,&dwSize) == ERROR_SUCCESS) {
wp.showCmd = nCmdShow;
SetWindowPlacement(hWnd,&wp);
fRestored = TRUE;
}
RegCloseKey(hKeyMain);
}
if (!fRestored)
ShowWindow(hWnd,nCmdShow);
return TRUE;
}