class TestConfigureInterface // abstract class { public: // pop-up dialog to configure brush virtual BOOL ChangeSettings(HWND hwnd) = 0; // re-initialize the brush to a default value virtual VOID Initialize() = 0; }; class TestDialogInterface { public: // WM_INITDIALOG virtual VOID InitDialog(HWND hwnd) = 0; // IDC_OK only virtual BOOL SaveValues(HWND hwnd) = 0; // WM_ else... virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) = 0; }; class TestTransform : public TestConfigureInterface, public TestDialogInterface { public: TestTransform() { static MatrixOrder matrixPrependSave = PrependOrder; matrixPrepend = &matrixPrependSave; matrix = NULL; } ~TestTransform() { delete matrix; } // Configuration interface methods virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize(); virtual VOID Initialize(Matrix** matrix); // Dialog maintenance methods virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); protected: VOID EnableDialogButtons(HWND hwnd, BOOL enable); VOID UpdateTransformPicture(HWND hwnd, INT idc, Matrix* matrix); private: Matrix** origMatrix; Matrix* matrix; MatrixOrder* matrixPrepend; }; class TestMatrixOperation : public TestConfigureInterface, public TestDialogInterface { public: TestMatrixOperation() { x = y = 0.0f; count = 0; } ~TestMatrixOperation() { } // Configuration interface methods virtual BOOL ChangeSettings(HWND hwnd); virtual VOID Initialize(); virtual VOID Initialize(TCHAR* dialogTitle, TCHAR* subTitle, TCHAR* descStr, INT count); // Dialog maintenance methods virtual VOID InitDialog(HWND hwnd); virtual BOOL SaveValues(HWND hwnd); virtual BOOL ProcessDialog(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); REAL GetX() { return x; }; REAL GetY() { return y; }; private: TCHAR* dialogTitle; TCHAR* subTitle; TCHAR* descStr; INT count; REAL x, y; }; // !! hacky stack based on DynArray types... template class Stack : public DynArray { public: typedef DynArray TArray; VOID Push(T& t) { Add(t); } T& Pop() { INT count = GetCount(); if (count) { T& t = Last(); AdjustCount(-1); return t; } else { ASSERT(FALSE); return GetPosition(0); // !! hackish... } } T& GetPosition(INT pos) { return GetDataBuffer()[pos]; } }; class TestShape; typedef Stack ShapeStack; // menu positions in window menu bar const INT MenuFilePosition = 0; const INT MenuShapePosition = 1; const INT MenuBrushPosition = 2; const INT MenuPenPosition = 3; const INT MenuOtherPosition = 4; #define SetMenuCheckPos(w,x,y,z) SetMenuCheck(w,x,y,z,FALSE) #define SetMenuCheckCmd(w,x,y,z) SetMenuCheck(w,x,y,z,TRUE) extern VOID SetMenuCheck(HWND hwnd, INT menuPos, UINT idm, BOOL checked, BOOL byCmd); extern Brush* blackBrush; extern Brush* backBrush; extern Pen* blackPen; extern Color* blackColor; #define MAX_LOADSTRING 100 extern VOID NotImplementedBox(); extern VOID WarningBox(TCHAR* string); extern HINSTANCE hInst; extern TCHAR szTitle[MAX_LOADSTRING]; extern TCHAR szWindowClass[MAX_LOADSTRING]; extern VOID WarningBeep(); extern VOID SetDialogLong(HWND hwnd, UINT idc, UINT value, BOOL enable = TRUE); extern UINT GetDialogLong(HWND hwnd, UINT idc); extern VOID SetDialogReal(HWND hwnd, UINT idc, REAL value); extern REAL GetDialogReal(HWND hwnd, UINT idc); extern VOID SetDialogText(HWND hwnd, UINT idc, LPTSTR text, BOOL enable = TRUE); extern VOID GetDialogText(HWND hwnd, UINT idc, LPTSTR text, INT maxSize); extern VOID SetDialogCombo(HWND hwnd, UINT idc, const TCHAR* strings[], INT count, INT cursel); extern INT GetDialogCombo(HWND hwnd, UINT idc); extern VOID SetDialogCheck(HWND hwnd, UINT idc, BOOL checked); extern BOOL GetDialogCheck(HWND hwnd, UINT idc); extern VOID SetDialogRealList(HWND hwnd, UINT idc, REAL* blend, INT count); extern VOID GetDialogRealList(HWND hwnd, UINT idc, REAL** blend, INT *count); extern VOID EnableDialogControl(HWND hwnd, INT idc, BOOL enable); extern VOID UpdateColorPicture(HWND hwnd, INT idc, ARGB argb); extern VOID UpdateRGBColor(HWND hwnd, INT idcPic, ARGB& argb); // Foward declarations of functions included in this code module: ATOM MyRegisterClass(HINSTANCE hInstance); HWND InitInstance(HINSTANCE, int, LPVOID); LRESULT CALLBACK WndTestDrawProc(HWND, UINT, WPARAM, LPARAM); extern INT_PTR CALLBACK AllDialogBox( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); enum FormatType { CPPFile, JavaFile, VMLFile }; extern const TCHAR* tabStr; const INT numFormats = 3; extern const TCHAR* formatList[numFormats]; extern const FormatType formatValue[numFormats]; const INT numShapes = 9; extern const TCHAR* shapeList[numShapes]; extern const INT shapeValue[numShapes]; extern const INT inverseShapeValue[numShapes]; const INT numBrushes = 7; extern const TCHAR* brushList[numBrushes]; extern const INT brushValue[numBrushes]; extern const INT inverseBrushValue[numBrushes]; const int numCaps = 6; extern const TCHAR* capList[numCaps]; extern const TCHAR* capStr[numCaps]; extern const LineCap capValue[numCaps]; const int numDashCaps = 3; extern const TCHAR* dashCapList[numDashCaps]; extern const TCHAR* dashCapStr[numDashCaps]; extern const DashCap dashCapValue[numDashCaps]; const INT numJoin = 3; extern const TCHAR* joinList[numJoin]; extern const TCHAR* joinStr[numJoin]; extern const LineJoin joinValue[numJoin]; const INT numDash = 5; extern const TCHAR* dashList[numDash]; extern const TCHAR* dashStr[numDash]; extern const DashStyle dashValue[numDash]; const INT numWrap = 6; extern const TCHAR* wrapList[numWrap]; extern const TCHAR* wrapStr[numWrap]; extern const WrapMode wrapValue[numWrap]; const INT numHatch = 6; extern const TCHAR* hatchList[numHatch]; extern const TCHAR* hatchStr[numHatch]; extern const HatchStyle hatchValue[numHatch]; // Shapes: // Line(s), Arc(s), Bezier(s), Rect(s), Ellipse(s), Pie(s), Polygon(s), // Curve(s), Path(s), ClosedCurve(s) enum ShapeTypes { LineType = 0, ArcType = 1, BezierType = 2, RectType = 3, EllipseType = 4, PieType = 5, PolygonType = 6, CurveType = 7, ClosedCurveType = 8 }; const INT pointRadius = 4; typedef DynArray PointArray; typedef DynArray ARGBArray;