#pragma once
#include <math.h>
#include <list>
enum
{
TOOL_RECTANGLE,
TOOL_CIRCLE,
TOOL_LINE,
TOOL_DELETE,
TOOL_SELECT,
};
class CCanvas
{
public:
typedef struct
{
int objectName;
CPoint point[2]; // Stores coordinate points
bool isSelected;
} OBJECT;
CCanvas(void);
~CCanvas(void);
void drawGrid(CDC *dc, HWND hwnd, int gridsizeX, int gridsizeY);
bool loadFile(char *fileName);
bool saveFile(char *fileName);
void clearAll();
void setSnapToGrid(bool setting, int gridsizeX, int gridsizeY);
void set(CPoint ptStart, CPoint ptEnd);
void set(int tool);
void selectAll();
int update(CDC *dc);
void store();
void setMessage(char message[128]);
// Define storage and its iterator
std::list<OBJECT *> m_object;
std::list<OBJECT *>::iterator m_iterator;
private:
void swapLong(LONG *a, LONG *b);
bool isAnObjectSelected(CPoint pt);
bool isTooSmall();
void drawHitMark(CDC *dc, int flag);
void moveSelectedObject();
void deselectObjects();
int deleteObject();
void initPoints();
void setResize();
void resizeObject();
bool m_isResizing;
bool m_isSelecting;
bool m_isSelectAll;
bool m_isMoving;
int m_cursorType;
int m_resizeDirection;
bool m_isSnapToGrid;
int m_gridsizeX;
int m_gridsizeY;
char m_message[128];
// Remember origin location if we are doing mouse drag
CPoint m_ptStart;
CPoint m_ptEnd;
CPoint m_ptEnd0;
// For drawing hit mark
CPoint m_centerL;
CPoint m_centerR;
CPoint m_centerT;
CPoint m_centerB;
CPoint m_topLCorner;
CPoint m_bottomLCorner;
CPoint m_topRCorner;
CPoint m_bottomRCorner;
};
#define LEFT_CENTER 7
#define RIGHT_CENTER 3
#define TOP_CENTER 1
#define BOTTOM_CENTER 5
#define TOP_LEFT_CORNER 0
#define BOTTOM_LEFT_CORNER 6
#define TOP_RIGHT_CORNER 2
#define BOTTOM_RIGHT_CORNER 4
#define NONE 100
/*
0------1------2
| |
| |
7 3
| |
| |
6------5------4
*/