Windows-Server-2003/shell/osshell/accesory/mspaint/settings.cpp

267 lines
8.4 KiB
C++

#include "stdafx.h"
#include "pbrush.h"
#include "settings.h"
#include <atlbase.h>
#ifdef _DEBUG
#undef THIS_FILE
static CHAR BASED_CODE THIS_FILE[] = __FILE__;
#endif
#include "memtrace.h"
extern BOOL NEAR g_bDriverCanStretch;
extern BOOL NEAR g_bShowAllFiles;
/***************************************************************************/
static TCHAR NEAR mszView[] = TEXT("View");
static TCHAR NEAR mszNoStretching[] = TEXT("NoStretching");
static TCHAR NEAR mszShowAllFiles[] = TEXT("ShowAllFiles");
static TCHAR NEAR mszShowThumbnail[] = TEXT("ShowThumbnail");
static TCHAR NEAR mszShowText[] = TEXT("ShowTextTool");
static TCHAR NEAR mszSnapToGrid[] = TEXT("SnapToGrid");
static TCHAR NEAR mszGridExtent[] = TEXT("GridExtent");
static TCHAR NEAR mszBMPWidth[] = TEXT("BMPWidth");
static TCHAR NEAR mszBMPHeight[] = TEXT("BMPHeight");
static TCHAR NEAR mszThumbXPos[] = TEXT("ThumbXPos");
static TCHAR NEAR mszThumbYPos[] = TEXT("ThumbYPos");
static TCHAR NEAR mszThumbWidth[] = TEXT("ThumbWidth");
static TCHAR NEAR mszThumbHeight[] = TEXT("ThumbHeight");
static TCHAR NEAR mszCurrentUnits[] = TEXT("UnitSetting");
static TCHAR NEAR mszText[] = TEXT("Text");
static TCHAR NEAR mszFaceName[] = TEXT("TypeFaceName");
static TCHAR NEAR mszPointSize[] = TEXT("PointSize");
static TCHAR NEAR mszCharSet[] = TEXT("CharSet");
static TCHAR NEAR mszBold[] = TEXT("Bold");
static TCHAR NEAR mszUnderline[] = TEXT("Underline");
static TCHAR NEAR mszItalic[] = TEXT("Italic");
static TCHAR NEAR mszVertEdit[] = TEXT("VerticalEdit");
static TCHAR NEAR mszPositionX[] = TEXT("PositionX");
static TCHAR NEAR mszPositionY[] = TEXT("PositionY");
static TCHAR NEAR mszTextPen[] = TEXT("TextPen");
static TCHAR NEAR mszColors[] = TEXT("Colors");
static TCHAR NEAR mszNumberOfColors[] = TEXT("NumberOfColors");
static TCHAR NEAR mszSoftware[] = TEXT("Software");
static TCHAR NEAR mszWindowPlacement[] = TEXT("WindowPlacement");
/***************************************************************************/
void OpenAppKey(LPCTSTR pszKeyName, HKEY *phk)
{
*phk = NULL;
CRegKey rkSoftware;
if (rkSoftware.Create(HKEY_CURRENT_USER, mszSoftware) != ERROR_SUCCESS)
{
return;
}
CString cszSubKey;
if (!cszSubKey.LoadString(IDS_REGISTRY_PATH))
{
return;
}
CRegKey rkSubKey;
if (rkSubKey.Create(rkSoftware, cszSubKey) != ERROR_SUCCESS)
{
return;
}
//
// use the app's profile name instead of the
// localizable app name
//
CRegKey rkAppKey;
if (rkAppKey.Create(rkSubKey, theApp.m_pszProfileName) != ERROR_SUCCESS)
{
return;
}
if (RegOpenKey(rkAppKey, pszKeyName, phk) != ERROR_SUCCESS)
{
return;
}
}
void CPBApp::LoadProfileSettings()
{
CWinApp::LoadStdProfileSettings( );
BOOL bNoStretch = (BOOL)GetProfileInt( mszView, mszNoStretching, FALSE );
g_bDriverCanStretch = ! bNoStretch;
m_bShowThumbnail = (BOOL)GetProfileInt( mszView, mszShowThumbnail , FALSE );
g_bShowAllFiles = (BOOL)GetProfileInt( mszView, mszShowAllFiles, FALSE );
int iX = GetProfileInt( mszView, mszBMPWidth , 0 );
int iY = GetProfileInt( mszView, mszBMPHeight, 0 );
if (! iX || ! iY)
{
iX = 0;
iY = 0;
}
m_sizeBitmap = CSize( iX, iY );
HKEY hkView;
OpenAppKey(mszView, &hkView);
if (hkView)
{
DWORD dwType = REG_BINARY;
DWORD dwSize = sizeof(m_wpPlacement);;
if (RegQueryValueEx(hkView, mszWindowPlacement, 0, &dwType, (LPBYTE)&m_wpPlacement,
&dwSize)!= ERROR_SUCCESS || dwType!=REG_BINARY || dwSize!=sizeof(m_wpPlacement))
{
memset((LPVOID)&m_wpPlacement, 0, sizeof(m_wpPlacement));
}
RegCloseKey(hkView);
}
int iW;
int iH;
CPoint ptPos;
CSize size;
iX = GetProfileInt( mszView, mszThumbXPos , 0 );
iY = GetProfileInt( mszView, mszThumbYPos , 0 );
iW = GetProfileInt( mszView, mszThumbWidth , 0 );
iH = GetProfileInt( mszView, mszThumbHeight, 0 );
if (iX && iY && iW && iH)
{
size = CSize( iW, iH );
ptPos = CheckWindowPosition( CPoint( iX, iY ), size );
m_rectFloatThumbnail = CRect( ptPos, size );
}
m_iCurrentUnits = GetProfileInt( mszView, mszCurrentUnits, 0 );
m_bShowTextToolbar = (BOOL)GetProfileInt ( mszText, mszShowText , TRUE );
m_iPointSize = GetProfileInt ( mszText, mszPointSize, 0 );
m_iBoldText = GetProfileInt ( mszText, mszBold , 0 );
m_iUnderlineText = GetProfileInt ( mszText, mszUnderline, 0 );
m_iItalicText = GetProfileInt ( mszText, mszItalic , 0 );
m_iVertEditText = GetProfileInt ( mszText, mszVertEdit, -1 );
m_iPosTextX = GetProfileInt ( mszText, mszPositionX, 0 );
m_iPosTextY = GetProfileInt ( mszText, mszPositionY, 0 );
m_strTypeFaceName = GetProfileString( mszText, mszFaceName , NULL);
m_iCharSet = GetProfileInt ( mszText, mszCharSet , -1 );
if (m_iCharSet == -1)
{
CHARSETINFO csi;
if (!TranslateCharsetInfo((DWORD*)UIntToPtr(GetACP()), &csi, TCI_SRCCODEPAGE))
csi.ciCharset=ANSI_CHARSET;
m_iCharSet = csi.ciCharset;
}
m_iPenText = GetProfileInt ( mszText, mszTextPen , 0 );
m_iSnapToGrid = GetProfileInt( mszView, mszSnapToGrid, 0 );
m_iGridExtent = GetProfileInt( mszView, mszGridExtent, 1 );
m_pColors = new COLORREF[16];
if (m_pColors != NULL)
{
TCHAR szNumber[8];
int iColors = GetProfileInt( mszColors, mszNumberOfColors, 0 );
for (int i = 0; i < iColors; i++)
{
_Itoa( i, szNumber, 10 );
m_pColors[i] = (COLORREF)GetProfileInt( mszColors, szNumber, 0 );
}
m_iColors = i;
}
}
/***************************************************************************/
void CPBApp::SaveProfileSettings()
{
HKEY hkView;
OpenAppKey(mszView, &hkView);
if (hkView)
{
RegSetValueEx(hkView, mszWindowPlacement, 0, REG_BINARY, (LPBYTE)&m_wpPlacement,
sizeof(m_wpPlacement));
RegCloseKey(hkView);
}
WriteProfileInt( mszView, mszShowThumbnail , m_bShowThumbnail );
WriteProfileInt( mszView, mszBMPWidth , m_sizeBitmap.cx );
WriteProfileInt( mszView, mszBMPHeight , m_sizeBitmap.cy );
WriteProfileInt( mszView, mszThumbXPos , m_rectFloatThumbnail.left );
WriteProfileInt( mszView, mszThumbYPos , m_rectFloatThumbnail.top );
WriteProfileInt( mszView, mszThumbWidth , m_rectFloatThumbnail.Width() );
WriteProfileInt( mszView, mszThumbHeight , m_rectFloatThumbnail.Height() );
WriteProfileInt( mszView, mszCurrentUnits , m_iCurrentUnits );
WriteProfileInt( mszView, mszNoStretching , ! g_bDriverCanStretch );
WriteProfileInt( mszText, mszShowText , m_bShowTextToolbar );
WriteProfileInt( mszText, mszPointSize , m_iPointSize );
WriteProfileInt( mszText, mszPositionX , m_iPosTextX );
WriteProfileInt( mszText, mszPositionY , m_iPosTextY );
WriteProfileInt( mszText, mszBold , m_iBoldText );
WriteProfileInt( mszText, mszUnderline , m_iUnderlineText );
WriteProfileInt( mszText, mszItalic , m_iItalicText );
WriteProfileInt( mszText, mszVertEdit , m_iVertEditText );
WriteProfileInt( mszText, mszTextPen , m_iPenText );
WriteProfileString( mszText, mszFaceName, m_strTypeFaceName );
WriteProfileInt( mszText, mszCharSet , m_iCharSet );
WriteProfileInt( mszView, mszSnapToGrid, m_iSnapToGrid);
WriteProfileInt( mszView, mszGridExtent, m_iGridExtent);
if (m_pColors != NULL)
{
TCHAR szNumber[8];
int iColor;
WriteProfileInt( mszColors, mszNumberOfColors, m_iColors );
for (int i = 0; i < m_iColors; i++)
{
iColor = (int)(m_pColors[i] & (COLORREF)0x00FFFFFF);
_Itoa( i, szNumber, 10 );
WriteProfileInt( mszColors, szNumber, iColor );
}
delete [] m_pColors;
}
}
/***************************************************************************/