FLImaging 6.5.8.1
GUIMenuBar.h
1#pragma once
2#include "GUIDefinitions.h"
3#include <functional>
4
5namespace FLImaging
6{
7 namespace GUI
8 {
9 class CGUIMainFrameTabCtrl;
10 class CGUIMenuBarUserDefinedInfo;
11 class CGUIMenuBarMDITab;
12
13 typedef std::function<void(void*)> CMenuBarCallback;
14 #define MakeMenuBarCallback [=](void* pItem) -> void
15
16 class FL_EXPORT CGUIMenuBar : public CMFCMenuBar, public Base::CFLBase
17 {
18 public:
19 CGUIMenuBar();
20 virtual ~CGUIMenuBar();
21
22 public:
23 virtual void OnFillBackground(CDC* pDC);
24
25 virtual void SetMinWidth(int32_t i32Minwidth);
26 virtual int32_t GetMinWidth()const;
27
28 virtual void SetTitleRectMinWidth(int32_t i32Minwidth);
29 virtual int32_t GetTitleRectMinWidth()const;
30
31 virtual void SetLeftItemMinPosX(int32_t i32Min);
32 virtual int32_t GetLeftItemMinPosX()const;
33
34 virtual void SetButtonWidth(int32_t i32Width);
35 virtual int32_t GetButtonWidth()const;
36
37 virtual CRect GetTitleBarRect()const;
38 virtual void SetTitleBarRect(CRect rtTitleBar);
39 virtual int GetHitButton()const;
40
41 virtual CWnd* GetMovableParent();
42
43 virtual int HitTest(CPoint point) override;
44
45 virtual void SetHitArea(EGUIMenuBarHitArea eHitArea);
46 virtual EGUIMenuBarHitArea GetHitArea()const;
47 // GetHitArea()로 얻은 값이 EGUIMenuBarHitArea_UserDefinedInfo 인 경우에 사용합니다.
48 virtual CGUIMenuBarUserDefinedInfo* GetHitUserDefinedInfo(CPoint ptClient) const;
49 // GetHitArea()로 얻은 값이 EGUIMenuBarHitArea_MDITab 인 경우에 사용합니다.
50 virtual CGUIMenuBarMDITab* GetHitMDITab() const;
51
52 virtual void SetToolTipText(const Base::CFLString<wchar_t>& strToolTipText);
53
54 // Current Model Name
55 virtual void SetCurrentModelNameBkColor(COLORREF clrBk);
56 virtual COLORREF GetCurrentModelNameBkColor()const;
57
58 virtual void SetCurrentModelNameTextColor(COLORREF clrText);
59 virtual COLORREF GetCurrentModelNameTextColor()const;
60
61 virtual void SetCurrentModelNameRect(CRect rtTitleBar);
62 virtual CRect GetCurrentModelNameRect()const;
63
64 virtual void ShowCurrentModelName(bool bShow);
65 virtual bool IsCurrentModelNameVisible()const;
66
67 // Current User Id
68 virtual void SetCurrentUserIDBkColor(COLORREF clrBk);
69 virtual COLORREF GetCurrentUserIDBkColor()const;
70
71 virtual void SetCurrentUserIDTextColor(COLORREF clrText);
72 virtual COLORREF GetCurrentUserIDTextColor()const;
73
74 virtual void SetCurrentUserIDRect(CRect rtTitleBar);
75 virtual CRect GetCurrentUserIDRect()const;
76
77 virtual void ShowCurrentUserID(bool bShow);
78 virtual bool IsCurrentUserIDVisible()const;
79
80 // Current model 이름 사각형의 왼쪽 방향으로 하나씩 추가됩니다.
81 virtual void PushBackUserDefinedInfo(const Base::CFLString<wchar_t>& strInfo, COLORREF clrBackground = RGB(80, 80, 80), COLORREF clrText = RGB(255, 255, 255), bool bShow = true, EGUIAlignment eAlign = EGUIAlignment_CENTER_CENTER, EGUIStringTrimming eStringTrimming = EGUIStringTrimming_EllipsisCharacter);
82 virtual void PushBackUserDefinedInfo(const CGUIMenuBarUserDefinedInfo& refUDI);
83
84 virtual void PushFrontUserDefinedInfo(const Base::CFLString<wchar_t>& strInfo, COLORREF clrBackground = RGB(80, 80, 80), COLORREF clrText = RGB(255, 255, 255), bool bShow = true, EGUIAlignment eAlign = EGUIAlignment_CENTER_CENTER, EGUIStringTrimming eStringTrimming = EGUIStringTrimming_EllipsisCharacter);
85 virtual void PushFrontUserDefinedInfo(const CGUIMenuBarUserDefinedInfo& refUDI);
86
87 virtual int32_t GetUserDefinedInfoCount()const;
88 virtual CGUIMenuBarUserDefinedInfo* PopBackUserDefinedInfo();
89 virtual CGUIMenuBarUserDefinedInfo* GetBackUserDefinedInfo() const;
90 virtual CGUIMenuBarUserDefinedInfo* PopFrontUserDefinedInfo();
91 virtual CGUIMenuBarUserDefinedInfo* GetFrontUserDefinedInfo() const;
92
93 virtual CGUIMenuBarUserDefinedInfo* GetUserDefinedInfoAt(int32_t i32Index) const;
94 virtual int32_t GetUserDefinedInfoIndex(const CGUIMenuBarUserDefinedInfo* pUDI) const;
95
96 virtual const CResult SetUserDefinedInfoAt(int32_t i32Index, const Base::CFLString<wchar_t>& strInfo, COLORREF clrBackground = RGB(80, 80, 80), COLORREF clrText = RGB(255, 255, 255), bool bShow = true, EGUIAlignment eAlign = EGUIAlignment_CENTER_CENTER, EGUIStringTrimming eStringTrimming = EGUIStringTrimming_EllipsisCharacter);
97 virtual const CResult SetUserDefinedInfoAt(int32_t i32Index, const CGUIMenuBarUserDefinedInfo& refUDI);
98
99 virtual const CResult InsertUserDefinedInfoAt(int32_t i32Index, const Base::CFLString<wchar_t>& strInfo, COLORREF clrBackground = RGB(80, 80, 80), COLORREF clrText = RGB(255, 255, 255), bool bShow = true, EGUIAlignment eAlign = EGUIAlignment_CENTER_CENTER, EGUIStringTrimming eStringTrimming = EGUIStringTrimming_EllipsisCharacter);
100 virtual const CResult InsertUserDefinedInfoAt(int32_t i32Index, const CGUIMenuBarUserDefinedInfo& refUDI);
101
102 virtual const CResult RemoveUserDefinedInfoAt(int32_t i32Index);
103 virtual const CResult ClearUserDefinedInfo();
104
105 virtual void OnReceiveBroadcast(const Base::CBroadcastMessage* pMessage) override;
106
107 DeclareGetClassType();
108
109 protected:
110 // Color
111 Gdiplus::Color m_crBackground;
112 Gdiplus::Color m_crText;
113 COLORREF m_clrBackgroundCurrentModel;
114 COLORREF m_clrTextCurrentModel;
115 COLORREF m_clrBackgroundCurrentUserID;
116 COLORREF m_clrTextCurrentUserID;
117
118 bool m_bMoving;
119
120 Base::CFLString<wchar_t> m_strTitle;
121 bool m_bLButtonDown;
122 bool m_bLButtonDblClk;
123 bool m_bMouseDragMaximize;
124 CPoint m_ptDragStart;
125 CRect m_rtOrgWindow;
126 CRect m_rtClient;
127
128 int32_t m_i32ButtonWidth;
129 int32_t m_i32ButtonHeight;
130 int32_t m_i32MinWidth;
131 int32_t m_i32ItemWidthLeft;
132 int32_t m_i32LeftItemMinPosX;
133 int32_t m_i32TitleBarMinWidth;
134 int32_t m_i32ItemWidthRight;
135 int32_t m_i32ItemCountRight; // CLOSE, MAXIMIZE, MINIMIZE button
136 int32_t m_i32ItemCount;
137 int32_t m_i32LeftStartPos;
138
139 int32_t m_i32HitButton;
140 EGUIMenuBarHitArea m_eHitArea;
141
142 int32_t m_i32AnimationIdx;
143 int32_t m_i32AnimationIdxDirection;
144 unsigned char m_crTitleBk;
145 CImage* m_pLogoImage;
146 int32_t m_i32BmpWidth, m_i32BmpHeight;
147 CRect m_rtTitleBar;
148 CRect m_rtTitleBarPrev;
149 CRect m_rtClose, m_rtRestore, m_rtMinimize;
150 CRect m_rtInfoCurrentModelName;
151 CRect m_rtInfoCurrentUserID;
152
153 CWnd* m_pParent;
154 bool m_bInit;
155 bool m_bAboutToMaximize;
156
157 CPoint m_ptPrevMouse;
158 double m_f64MoveThreshold;
159 double m_f64MoveDistance;
160
161 void DoPaint(CDC* pDCPaint);
162 void DrawTitle(CDC* pDCPaint);
163 void UpdateAnimation();
164
165 CRect m_rtMainFrame;
166 std::vector<unsigned char> m_vctLogoBkClr;
167
168 CGUIMainFrameTabCtrl* m_pMainFrameTabCtrl = nullptr;
169 bool m_bTrackMouse = false;
170
171 CToolTipCtrl m_ToolTip;
172 Base::CFLString<wchar_t> m_strToolTipText;
173
174 bool m_bHitTimerInstalled = false;
175
176 public:
177 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
178 afx_msg BOOL OnEraseBkgnd(CDC* pDC);
179 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
180 afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
181 afx_msg void OnMouseMove(UINT nFlags, CPoint point);
182 afx_msg void OnMouseLeave();
183 afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
184 afx_msg void OnKillFocus(CWnd* pNewWnd);
185 afx_msg void OnSize(UINT nType, int cx, int cy);
186 afx_msg void OnMButtonUp(UINT nFlags, CPoint point);
187 afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
188 afx_msg void OnDestroy();
189 afx_msg void OnTimer(UINT_PTR nIDEvent);
190 DECLARE_MESSAGE_MAP()
191 virtual BOOL PreTranslateMessage(MSG* pMsg)override;
192
193 friend class CGUIMainFrame;
194 friend class CGUIMenuItemLogIn;
195};
196 }
197}
EGUIMenuBarHitArea
Menu bar 위에서 마우스가 위치한 영역입니다.
Definition GUIDefinitions.h:4341