351 lines
8.4 KiB
C++
351 lines
8.4 KiB
C++
// pbrush.h : main header file for the PBRUSH application
|
|
//
|
|
|
|
#ifndef __AFXWIN_H__
|
|
#error include TEXT('stdafx.h') before including this file for PCH
|
|
#endif
|
|
|
|
#include "resource.h" // main symbols
|
|
|
|
#include "loadimag.h"
|
|
|
|
#ifdef PNG_SUPPORT
|
|
#undef PNG_SUPPORT
|
|
#endif
|
|
// Bits for CTheApp::m_wEmergencyFlags
|
|
//
|
|
#define memoryEmergency 0x0001 // in a low free memory state
|
|
#define gdiEmergency 0x0002 // some GDI create failed
|
|
#define userEmergency 0x0004 // a CreateWindow failed
|
|
#define warnEmergency 0x0008 // still need to warn the user
|
|
#define failedEmergency 0x0010 // last operation actually failed
|
|
|
|
// This is the minimum delay between warning messages so the user doesn't
|
|
// get bombed by repetitious message boxes. The value is in milli-seconds.
|
|
|
|
#define ticksBetweenWarnings (1000L * 60)
|
|
|
|
#define nSysBrushes 25
|
|
#define nOurBrushes 4
|
|
|
|
#if 0
|
|
// Pulling self-registration out. This is to be done once during setup only
|
|
|
|
class CPBTemplateServer : public COleTemplateServer
|
|
{
|
|
public:
|
|
|
|
void UpdateRegistry(OLE_APPTYPE nAppType,
|
|
LPCTSTR* rglpszRegister = NULL, LPCTSTR* rglpszOverwrite = NULL);
|
|
} ;
|
|
|
|
#endif
|
|
|
|
/***************************************************************************/
|
|
// CPBApp:
|
|
// See pbrush.cpp for the implementation of this class
|
|
//
|
|
|
|
class CPBApp : public CWinApp
|
|
{
|
|
public:
|
|
|
|
|
|
CPBApp();
|
|
~CPBApp();
|
|
//
|
|
// OnFileNew made public for scanning support
|
|
//
|
|
afx_msg void OnFileNew();
|
|
// Overrides
|
|
virtual BOOL InitInstance();
|
|
virtual int ExitInstance();
|
|
|
|
virtual void WinHelp( DWORD dwData, UINT nCmd = HELP_CONTEXT ); // general
|
|
virtual BOOL OnIdle(LONG);
|
|
|
|
// error handling routines
|
|
inline BOOL InEmergencyState() const { return m_wEmergencyFlags != 0; }
|
|
|
|
void SetMemoryEmergency(BOOL bFailed = TRUE);
|
|
void SetGdiEmergency (BOOL bFailed = TRUE);
|
|
void SetUserEmergency (BOOL bFailed = TRUE);
|
|
|
|
BOOL CheckForEmergency() { return (m_wEmergencyFlags? TRUE: FALSE); }
|
|
void WarnUserOfEmergency();
|
|
|
|
void SetFileError( UINT uOperationint, int nCause, LPCTSTR lpszFile = NULL );
|
|
void FileErrorMessageBox( void );
|
|
|
|
CString GetLastFile() {return m_sLastFile;}
|
|
|
|
void TryToFreeMemory();
|
|
|
|
void ParseCommandLine();
|
|
|
|
// Patch to set the devmode and devname after pagesetup
|
|
void SetDeviceHandles(HANDLE hDevNames, HANDLE hDevMode);
|
|
|
|
// setup routines
|
|
void LoadProfileSettings();
|
|
void SaveProfileSettings();
|
|
void GetSystemSettings( CDC* pdc );
|
|
|
|
// Methods
|
|
CPoint CheckWindowPosition( CPoint ptPosition, CSize& sizeWindow );
|
|
|
|
CDocument* OpenDocumentFile( LPCTSTR lpszFileName );
|
|
|
|
BOOL DoPromptFileName( CString& fileName, UINT nIDSTitle, DWORD lFlags,
|
|
BOOL bOpenFileDialog, int& iColors, BOOL bOnlyBmp );
|
|
|
|
#if 0
|
|
// Pulling self-registration out. This is to be done once during setup only
|
|
void RegisterShell(CSingleDocTemplate *pDocTemplate);
|
|
#endif
|
|
|
|
// Implementation
|
|
COleTemplateServer m_server; // Server object for document creation
|
|
|
|
// This is the minimum amount of free memory we like to have
|
|
DWORD m_dwLowMemoryBytes;
|
|
UINT m_nLowGdiPercent;
|
|
UINT m_nLowUserPercent;
|
|
|
|
WORD m_wEmergencyFlags;
|
|
|
|
// General user settings
|
|
BOOL m_bShowStatusbar;
|
|
|
|
#ifdef CUSTOMFLOAT
|
|
BOOL m_bShowToolbar;
|
|
BOOL m_bShowColorbar;
|
|
#endif
|
|
|
|
BOOL m_bShowThumbnail;
|
|
BOOL m_bShowTextToolbar;
|
|
BOOL m_bShowIconToolbar;
|
|
BOOL m_bShowGrid;
|
|
|
|
#ifdef CUSTOMFLOAT
|
|
BOOL m_bToolsDocked;
|
|
BOOL m_bColorsDocked;
|
|
#endif //CUSTOMFLOAT
|
|
|
|
|
|
BOOL m_bEmbedded;
|
|
BOOL m_bLinked;
|
|
BOOL m_bHidden;
|
|
BOOL m_bActiveApp;
|
|
BOOL m_bPenSystem;
|
|
BOOL m_bMonoDevice;
|
|
BOOL m_bPaletted;
|
|
|
|
BOOL m_bPrintOnly;
|
|
CString m_strDocName;
|
|
CString m_strPrinterName;
|
|
CString m_strDriverName;
|
|
CString m_strPortName;
|
|
|
|
BOOL m_bWiaCallback;
|
|
CString m_strWiaDeviceId;
|
|
CString m_strWiaEventId;
|
|
|
|
#ifdef PCX_SUPPORT
|
|
BOOL m_bPCXfile;
|
|
#endif
|
|
|
|
int m_iCurrentUnits;
|
|
|
|
// custom colors defined by the user
|
|
COLORREF* m_pColors;
|
|
int m_iColors;
|
|
|
|
// copy of the system wide palette
|
|
CPalette* m_pPalette;
|
|
|
|
CFont m_fntStatus;
|
|
|
|
int m_nEmbeddedType;
|
|
|
|
HWND m_hwndInPlaceApp;
|
|
|
|
class CInPlaceFrame* m_pwndInPlaceFrame;
|
|
|
|
#ifdef CUSTOMFLOAT
|
|
CRect m_rectFloatTools;
|
|
CRect m_rectFloatColors;
|
|
#endif
|
|
|
|
CRect m_rectFloatThumbnail;
|
|
|
|
CRect m_rectMargins;
|
|
|
|
BOOL m_bCenterHorizontally;
|
|
BOOL m_bCenterVertically;
|
|
BOOL m_bScaleFitTo;
|
|
int m_nAdjustToPercent;
|
|
int m_nFitToPagesWide;
|
|
int m_nFitToPagesTall;
|
|
|
|
WINDOWPLACEMENT m_wpPlacement;
|
|
|
|
CSize m_sizeBitmap;
|
|
|
|
int m_iPointSize;
|
|
int m_iPosTextX;
|
|
int m_iPosTextY;
|
|
int m_iBoldText;
|
|
int m_iUnderlineText;
|
|
int m_iItalicText;
|
|
|
|
int m_iVertEditText;
|
|
|
|
int m_iPenText;
|
|
CString m_strTypeFaceName;
|
|
int m_iCharSet;
|
|
|
|
int m_iSnapToGrid;
|
|
int m_iGridExtent;
|
|
|
|
// general system metrics. updated on system notification
|
|
struct
|
|
{
|
|
int iWidthinPels;
|
|
int iHeightinPels;
|
|
int iWidthinMM;
|
|
int iHeightinMM;
|
|
int iWidthinINCH;
|
|
int iHeightinINCH;
|
|
int ixPelsPerDM;
|
|
int iyPelsPerDM;
|
|
int ixPelsPerMM;
|
|
int iyPelsPerMM;
|
|
int ixPelsPerINCH;
|
|
int iyPelsPerINCH;
|
|
int iBitsPixel;
|
|
int iPlanes;
|
|
} ScreenDeviceInfo;
|
|
|
|
int m_cxFrame;
|
|
int m_cyFrame;
|
|
int m_cxBorder;
|
|
int m_cyBorder;
|
|
int m_cyCaption;
|
|
|
|
CBrush* m_pbrSysColors[nSysBrushes + nOurBrushes];
|
|
CString m_sCurFile;
|
|
int m_nFilters;
|
|
GUID *m_guidFltType; // export filter types available
|
|
GUID m_guidFltTypeUsed;
|
|
int m_nFilterInIdx;
|
|
int m_nFilterOutIdx;
|
|
DWORD GetFilterIndex (REFGUID guidFltType);
|
|
void FixExtension (CString& fileName, int iflFltType);
|
|
|
|
CGdiplusInit GdiplusInit;
|
|
|
|
#ifdef _DEBUG
|
|
BOOL m_bLogUndo;
|
|
#endif
|
|
|
|
private:
|
|
|
|
int m_nFileErrorCause; // from CFileException::m_cause
|
|
WORD m_wEmergencyFlagss;
|
|
DWORD m_tickLastWarning;
|
|
CString m_strEmergencyNoMem;
|
|
CString m_strEmergencyLowMem;
|
|
CString m_sLastFile;
|
|
UINT m_uOperation;
|
|
|
|
afx_msg void OnFileOpen();
|
|
|
|
|
|
//{{AFX_MSG(CPBApp)
|
|
afx_msg void OnAppAbout();
|
|
// NOTE - the ClassWizard will add and remove member functions here.
|
|
// DO NOT EDIT what you see in these blocks of generated code !
|
|
//}}AFX_MSG
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
};
|
|
|
|
extern CPBApp theApp;
|
|
|
|
#define IsInPlace() (theApp.m_pwndInPlaceFrame != NULL)
|
|
|
|
//#define SZ_MAPISENDDOC TEXT("MAPISendDocuments")
|
|
//#define MAPIDLL TEXT("MAPI32.DLL")
|
|
|
|
typedef ULONG (FAR PASCAL *LPFNMAPISENDDOCUMENTS)(ULONG, LPTSTR, LPTSTR, LPTSTR, ULONG);
|
|
|
|
void CancelToolMode(BOOL bSelectionCommand);
|
|
|
|
#if 0
|
|
|
|
// removing CRegKey - clashes with ATL class
|
|
|
|
class CRegKey
|
|
{
|
|
public:
|
|
CRegKey(HKEY hkParent, LPCTSTR pszSubKey) { if (RegCreateKey(hkParent, pszSubKey, &m_hk)!=ERROR_SUCCESS) m_hk=NULL; }
|
|
~CRegKey() { if (m_hk) RegCloseKey(m_hk); }
|
|
operator HKEY() const { return(m_hk); }
|
|
|
|
private:
|
|
HKEY m_hk;
|
|
};
|
|
|
|
#endif
|
|
|
|
extern const CLSID BASED_CODE CLSID_Paint;
|
|
extern const CLSID BASED_CODE CLSID_PaintBrush;
|
|
|
|
#define ARRAYSIZE(_x) sizeof(_x)/sizeof(_x[0])
|
|
|
|
// make atoi work if building unicode
|
|
//
|
|
#ifdef UNICODE
|
|
#define Atoi _wtoi
|
|
#define _Itoa _itow
|
|
#define Itoa _itow
|
|
#else
|
|
#define Atoi atoi
|
|
#define _Itoa _itoa
|
|
#define Itoa itoa
|
|
#endif
|
|
|
|
|
|
// macro-ize ansi/unicode conversions
|
|
#define AtoW(x, y) MultiByteToWideChar (CP_ACP, 0, (x), -1, (y), (lstrlenA ((x))+1))
|
|
#define WtoA(x,y) WideCharToMultiByte(CP_ACP, 0, (x), -1, (y), (lstrlenW((x))+1), NULL,NULL)
|
|
|
|
|
|
#ifdef USE_MIRRORING
|
|
|
|
//// REGetLayout - Get layout of DC
|
|
//
|
|
// Returns layout flags from an NT5/W98 or later DC, or zero
|
|
// on legacy platforms.
|
|
|
|
#ifndef WS_EX_LAYOUTRTL
|
|
#define WS_EX_LAYOUTRTL 0x00400000L
|
|
#endif
|
|
#ifndef WS_EX_NOINHERITLAYOUT
|
|
#define WS_EX_NOINHERITLAYOUT 0x00100000L
|
|
#endif
|
|
#ifndef LAYOUT_RTL
|
|
#define LAYOUT_RTL 0x01
|
|
#endif
|
|
|
|
DWORD WINAPI PBGetLayoutInit(HDC hdc);
|
|
DWORD WINAPI PBSetLayoutInit(HDC hdc, DWORD dwLayout);
|
|
extern DWORD (WINAPI *PBSetLayout) (HDC hdc, DWORD dwLayout);
|
|
extern DWORD (WINAPI *PBGetLayout) (HDC hdc);
|
|
|
|
#endif
|
|
|
|
|
|
/***************************************************************************/
|