| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #pragma once |
| | | #include <functional> |
| | | |
| | | |
| | | #ifndef EQSGRAPHWND_TAG |
| | | |
| | | #ifdef _WIN32 |
| | | |
| | | #define EQSGRAPHWND_CLASSA "EqsGraphWnd" |
| | | #define EQSGRAPHWND_CLASSW L"EqsGraphWnd" |
| | | |
| | | #ifdef UNICODE |
| | | #define EQSGRAPHWND_CLASS EQSGRAPHWND_CLASSW |
| | | #else |
| | | #define EQSGRAPHWND_CLASS EQSGRAPHWND_CLASSA |
| | | #endif |
| | | |
| | | #else |
| | | #define EQSGRAPHWND_CLASS "EqsGraphWnd" |
| | | #endif |
| | | |
| | | |
| | | #define EQSGRAPHWND_TAG _T("EQSGRAPHWND_TAG") |
| | | |
| | | #define EQSGRAPHWND_FIRST (0U-2890U) |
| | | #define EQSGRAPHWND_LAST (0U-2850U) |
| | | #define EQSGRAPHWND_ (EQSGRAPHWND_FIRST - 1) |
| | | |
| | | |
| | | #ifndef MIN |
| | | #define MIN(X,Y) (((X)>(Y))?(Y):(X)) |
| | | #endif |
| | | |
| | | #ifndef MAX |
| | | #define MAX(X,Y) (((X)>(Y))?(X):(Y)) |
| | | #endif |
| | | |
| | | typedef struct tagEQSGRAPHWND_NMHDR |
| | | { |
| | | NMHDR nmhdr; |
| | | DWORD dwData; |
| | | DWORD dwData1; |
| | | DWORD dwData2; |
| | | } EQSGRAPHWND_NMHDR; |
| | | |
| | | typedef struct tagEQITEM |
| | | { |
| | | unsigned int id; |
| | | RECT rect; |
| | | char text[64]; |
| | | BOOL bHighlight; |
| | | int nShowType; |
| | | DWORD_PTR pData; |
| | | DWORD_PTR pInPins; |
| | | DWORD_PTR pOutPins; |
| | | int nFlashFlag; |
| | | } EQITEM; |
| | | |
| | | typedef struct tagPIN |
| | | { |
| | | int nIndex; |
| | | int nType; |
| | | char text[64]; |
| | | BOOL bHighlight; |
| | | EQITEM* pItem; |
| | | tagPIN *pConnectedPin; |
| | | POINT ptConnectedLine[6]; |
| | | int nLinePtCount; |
| | | DWORD_PTR pData; |
| | | } PIN; |
| | | |
| | | #define ITEM_NORMAL 0 |
| | | #define ITEM_SMALL 1 |
| | | #define ITEM_LARGE 2 |
| | | |
| | | #endif |
| | | |
| | | typedef std::function<bool(PIN *pPin1, PIN *pPin2)> ONCONNECTPIN; |
| | | typedef std::function<bool(PIN *pPin)> ONDISCONNECTPIN; |
| | | typedef std::function<bool(EQITEM* pItem)> ONDELETEEQITEM; |
| | | typedef std::function<void(EQITEM* pItem, int x, int y)> ONEQITEMPOSCHANGED; |
| | | |
| | | typedef struct _EqsGraphListener |
| | | { |
| | | ONCONNECTPIN onConnectPin; |
| | | ONCONNECTPIN onCheckConnectPin; |
| | | ONDISCONNECTPIN onDisconnectPin; |
| | | ONDELETEEQITEM onDeleteEqItem; |
| | | ONEQITEMPOSCHANGED onEqItemPosChanged; |
| | | ONDELETEEQITEM onDblckEqItem; |
| | | ONDELETEEQITEM onRclickEqItem; |
| | | } EqsGraphListener; |
| | | |
| | | class CEqsGraphWnd |
| | | { |
| | | typedef struct tagRECTF |
| | | { |
| | | float left; |
| | | float top; |
| | | float right; |
| | | float bottom; |
| | | } RECTF; |
| | | |
| | | public: |
| | | CEqsGraphWnd(); |
| | | ~CEqsGraphWnd(); |
| | | |
| | | public: |
| | | static BOOL RegisterWndClass(); |
| | | static CEqsGraphWnd* FromHandle(HWND hWnd); |
| | | void SetFrameColor(COLORREF color); |
| | | void SetBkgndColor(COLORREF color); |
| | | |
| | | public: |
| | | void EnableScroll(BOOL bEnable); |
| | | void EnableMultiSelect(); |
| | | void SetItemRound(int nRound); |
| | | void SetDefaultItemBackgroundColor(COLORREF crNormal, COLORREF crSel); |
| | | void SetDefaultItemFrameColor(COLORREF crNormal, COLORREF crSel); |
| | | void SetDefaultItemTextColor(COLORREF crNormal, COLORREF crSel); |
| | | void SetOnListener(EqsGraphListener& listener); |
| | | BOOL SetCurSel(int nSel); |
| | | BOOL SetCurSel(CString strItemName); |
| | | BOOL SetCurSel(DWORD_PTR pData); |
| | | EQITEM * AddItem(int id, CString strText, DWORD_PTR dwData, int nType = ITEM_NORMAL); |
| | | void RemoveItem(EQITEM* pItem); |
| | | PIN * AddPin(EQITEM* pItem, int nType, CString strName, DWORD_PTR dwData); |
| | | int DeleteItem(EQITEM* pItem); |
| | | void DeleteAllItems(); |
| | | void SetItemSelectState(int nIndex, BOOL bSelect); |
| | | void SetCurrentItem(EQITEM* pItem); |
| | | BOOL GetItemRect(EQITEM* pItem, LPRECT lpRect); |
| | | BOOL GetItemWarperRect(EQITEM* pItem, LPRECT lpRect); |
| | | BOOL GetInPinRect(EQITEM* pItem, int nPinIndex, LPRECT lpRect); |
| | | BOOL GetOutPinRect(EQITEM* pItem, int nPinIndex, LPRECT lpRect); |
| | | BOOL GetPinPoint(PIN *pPin, LPPOINT lpPoint); |
| | | EQITEM* GetItem(DWORD_PTR dwData); |
| | | PIN * GetPin(DWORD_PTR dwItemData, DWORD_PTR dwPinData); |
| | | int ConnectPin(DWORD_PTR dwItem1Data, DWORD_PTR dwPin1Data, DWORD_PTR dwItem2Data, DWORD_PTR dwPin2Data); |
| | | void SetItemText(EQITEM* pItem, CString strText); |
| | | void SetItemType(EQITEM* pItem, int type); |
| | | void SetItemPos(EQITEM* pItem, int x, int y); |
| | | void FlashItem(EQITEM* pItem); |
| | | void AnimationItem(EQITEM*pItem); |
| | | |
| | | private: |
| | | void Init(); |
| | | void InitFont(); |
| | | void Notify(int nCode, int dwData, int dwData1 = 0, int dwData2 = 0); |
| | | void Release(); |
| | | void ReleaseItem(EQITEM* pItem); |
| | | void ReleaseAllItems(); |
| | | void CalculateScollbar(); |
| | | void CalculateMapPos(); |
| | | void CalculateMagneticLine(EQITEM* pItem, LPRECT lprcItemRect, int &hoz, int &ver); |
| | | int HighTest(POINT pt, OUT EQITEM*& pItem, OUT PIN *& pPin); |
| | | int GetPinState(PIN *pPin); |
| | | void ClearConnectedLinePoint(EQITEM*& pItem); |
| | | void DrawMagneticLine(LPRECT lprcClient, int nHozLine1, int nHozLine2, int nVerLine1, int nVerLine2); |
| | | void DrawArrow(Gdiplus::Graphics *pGraphics, Gdiplus::Brush* pBrush, Gdiplus::Pen *pPen, |
| | | int x, int y, int nArrowLen); |
| | | void DrawDropItemRectangle(LPRECT lpRect1, LPRECT lpRect2); |
| | | void DrawPinConnectedLine(Gdiplus::Graphics *pGraphics, Gdiplus::Brush *pBrush, Gdiplus::Pen *pPen, LPPOINT lpPt1, LPPOINT lpPt2, |
| | | LPRECT lpRect1, LPRECT lpRect2, PIN *pOwnerPin); |
| | | void DrawPinWillConnectLine(COLORREF color, LPPOINT lpPt1, LPPOINT lpPt2); |
| | | double PointToSegDist(double x, double y, double x1, double y1, double x2, double y2); |
| | | static CEqsGraphWnd* Hook(HWND hWnd); |
| | | static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); |
| | | static LRESULT OnNcCreate(HWND hWnd, WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnDestroy(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnTimer(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnNcPaint(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnPaint(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnMouseMove(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnLButtonDown(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnRButtonDown(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnLButtonDblclk(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnMouseWheel(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnMouseHWheel(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnKeyDown(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnSize(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnVScroll(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnHScroll(WPARAM wParam, LPARAM lParam); |
| | | LRESULT OnNitify(WPARAM wParam, LPARAM lParam); |
| | | |
| | | private: |
| | | EQITEM* m_pCurItem; |
| | | int m_nFlashCount; |
| | | EQITEM* m_pFlashItem; |
| | | EQITEM* m_pAnimationItem; |
| | | PIN * m_pCurPin; |
| | | PIN * m_pSelLineOutPin; // éä¸çè¿çº¿ç两个pinä¸çout pin |
| | | |
| | | private: |
| | | HWND m_hWnd; |
| | | COLORREF m_crBkgnd; |
| | | COLORREF m_crFrame; |
| | | HFONT m_hFontTitle; |
| | | |
| | | private: |
| | | BOOL m_bUseGdiPlus; // 使ç¨GDI+ç»å¾ï¼ |
| | | COLORREF m_crItemBackground[2]; // itemçé¢è²ï¼normalï¼ active |
| | | COLORREF m_crItemFrame[2]; // itemçè¾¹æ¡ï¼normalï¼ active |
| | | COLORREF m_crItemNameText[2]; |
| | | COLORREF m_crItemIdText[2]; |
| | | COLORREF m_crPinBkgnd[3]; // pinçé¢è²ï¼normal, active, enable connect |
| | | int m_nCurSel; |
| | | EqsGraphListener m_listener; |
| | | CPtrArray m_arItem; |
| | | BOOL m_bMultiSelect; |
| | | int m_nItemRound; |
| | | |
| | | private: |
| | | int m_nStageCx; // ç»å¸å¤§å° |
| | | int m_nStageCy; |
| | | int m_nOffsetX; |
| | | int m_nOffsetY; |
| | | |
| | | // å¨ç» |
| | | RECTF m_rcAnimation; |
| | | RECTF m_rcAninationStep; |
| | | int m_nAninationStep; |
| | | int m_nAninationDuration; // ms |
| | | |
| | | // åä½ |
| | | HFONT m_hFontName; |
| | | HFONT m_hFontId; |
| | | |
| | | private: |
| | | HWND m_hWndMapPos; |
| | | BOOL m_bEnableScroll; |
| | | int m_nMagneticLinHoz; |
| | | int m_nMagneticLinVer; |
| | | }; |
| | | |