FLImaging 7.3.19.2
GUIMenuBar.h
1#pragma once
2#include "DefinitionsGUI.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 virtual void DrawLogo(Gdiplus::Graphics& memG, const CRect& rcDst, COLORREF clrBg);
25
26 virtual void SetMinWidth(int32_t i32Minwidth);
27 virtual int32_t GetMinWidth()const;
28
29 virtual void SetTitleRectMinWidth(int32_t i32Minwidth);
30 virtual int32_t GetTitleRectMinWidth()const;
31
32 virtual void SetLeftItemMinPosX(int32_t i32Min);
33 virtual int32_t GetLeftItemMinPosX()const;
34
35 virtual void SetButtonWidth(int32_t i32Width);
36 virtual int32_t GetButtonWidth()const;
37
38 virtual CRect GetTitleBarRect()const;
39 virtual void SetTitleBarRect(CRect rtTitleBar);
40 virtual int GetHitButton()const;
41
42 virtual CWnd* GetMovableParent();
43
44 virtual int HitTest(CPoint point) override;
45
46 virtual void SetHitArea(EGUIMenuBarHitArea eHitArea);
47 virtual EGUIMenuBarHitArea GetHitArea()const;
48 // GetHitArea()로 얻은 값이 EGUIMenuBarHitArea_UserDefinedInfo 인 경우에 사용합니다.
49 virtual CGUIMenuBarUserDefinedInfo* GetHitUserDefinedInfo(CPoint ptClient) const;
50 // GetHitArea()로 얻은 값이 EGUIMenuBarHitArea_MDITab 인 경우에 사용합니다.
51 virtual CGUIMenuBarMDITab* GetHitMDITab() const;
52
53 virtual void SetToolTipText(const Base::CFLString<wchar_t>& strToolTipText);
54
55 // Current Model Name
56 virtual void SetCurrentModelNameBkColor(COLORREF clrBk);
57 virtual COLORREF GetCurrentModelNameBkColor()const;
58
59 virtual void SetCurrentModelNameTextColor(COLORREF clrText);
60 virtual COLORREF GetCurrentModelNameTextColor()const;
61
62 virtual void SetCurrentModelNameRect(CRect rtTitleBar);
63 virtual CRect GetCurrentModelNameRect()const;
64
65 virtual void ShowCurrentModelName(bool bShow);
66 virtual bool IsCurrentModelNameVisible()const;
67
68 // Current User Id
69 virtual void SetCurrentUserIDBkColor(COLORREF clrBk);
70 virtual COLORREF GetCurrentUserIDBkColor()const;
71
72 virtual void SetCurrentUserIDTextColor(COLORREF clrText);
73 virtual COLORREF GetCurrentUserIDTextColor()const;
74
75 virtual void SetCurrentUserIDRect(CRect rtTitleBar);
76 virtual CRect GetCurrentUserIDRect()const;
77
78 virtual void ShowCurrentUserID(bool bShow);
79 virtual bool IsCurrentUserIDVisible()const;
80
81 virtual void ShowLogo(bool bShow);
82 virtual bool IsLogoVisible()const;
83
84 void EnableSystemButtons(bool bMinimize, bool bMaximize, bool bClose);
85 void EnableMinimizeButton(bool bEnable);
86 void EnableMaximizeButton(bool bEnable);
87 void EnableCloseButton(bool bEnable);
88 bool IsMinimizeButtonEnabled() const;
89 bool IsMaximizeButtonEnabled() const;
90 bool IsCloseButtonEnabled() const;
91
92 // Current model 이름 사각형의 왼쪽 방향으로 하나씩 추가됩니다.
93 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);
94 virtual void PushBackUserDefinedInfo(const CGUIMenuBarUserDefinedInfo& refUDI);
95
96 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);
97 virtual void PushFrontUserDefinedInfo(const CGUIMenuBarUserDefinedInfo& refUDI);
98
99 virtual int32_t FindMenuButtonIndex(const Base::CFLString<wchar_t>& flsMenuName)const;
100 virtual int32_t GetUserDefinedInfoCount()const;
101 virtual CGUIMenuBarUserDefinedInfo* PopBackUserDefinedInfo();
102 virtual CGUIMenuBarUserDefinedInfo* GetBackUserDefinedInfo() const;
103 virtual CGUIMenuBarUserDefinedInfo* PopFrontUserDefinedInfo();
104 virtual CGUIMenuBarUserDefinedInfo* GetFrontUserDefinedInfo() const;
105
106 virtual CGUIMenuBarUserDefinedInfo* GetUserDefinedInfoAt(int32_t i32Index) const;
107 virtual int32_t GetUserDefinedInfoIndex(const CGUIMenuBarUserDefinedInfo* pUDI) const;
108
109 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);
110 virtual const CResult SetUserDefinedInfoAt(int32_t i32Index, const CGUIMenuBarUserDefinedInfo& refUDI);
111
112 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);
113 virtual const CResult InsertUserDefinedInfoAt(int32_t i32Index, const CGUIMenuBarUserDefinedInfo& refUDI);
114
115 virtual const CResult RemoveUserDefinedInfoAt(int32_t i32Index);
116 virtual const CResult ClearUserDefinedInfo();
117
118 virtual void OnReceiveBroadcast(const Base::CBroadcastMessage* pMessage) override;
119
120 virtual BOOL LoadState(LPCTSTR lpszProfileName = NULL, int nIndex = -1, UINT uiID = (UINT)-1) override;
121 virtual BOOL SaveState(LPCTSTR lpszProfileName = NULL, int nIndex = -1, UINT uiID = (UINT)-1) override;
122
123 DeclareGetClassType();
124
125 protected:
126 // Color
127 Gdiplus::Color m_crBackground;
128 Gdiplus::Color m_crText;
129 COLORREF m_clrBackgroundCurrentModel;
130 COLORREF m_clrTextCurrentModel;
131 COLORREF m_clrBackgroundCurrentUserID;
132 COLORREF m_clrTextCurrentUserID;
133
134 bool m_bMoving;
135
136 Base::CFLString<wchar_t> m_strTitle;
137 bool m_bLButtonDown;
138 bool m_bLButtonDblClk;
139 bool m_bMouseDragMaximize;
140 CPoint m_ptDragStart;
141 CRect m_rtOrgWindow;
142 CRect m_rtClient;
143
144 int32_t m_i32ButtonWidth;
145 int32_t m_i32ButtonHeight;
146 int32_t m_i32MinWidth;
147 int32_t m_i32ItemWidthLeft;
148 int32_t m_i32LeftItemMinPosX;
149 int32_t m_i32TitleBarMinWidth;
150 int32_t m_i32ItemWidthRight;
151 int32_t m_i32ItemCountRight; // CLOSE, MAXIMIZE, MINIMIZE button
152 int32_t m_i32ItemCount;
153 int32_t m_i32LeftStartPos;
154
155 int32_t m_i32HitButton;
156 EGUIMenuBarHitArea m_eHitArea;
157
158 int32_t m_i32AnimationIdx;
159 int32_t m_i32AnimationIdxDirection;
160 unsigned char m_crTitleBk;
161 Gdiplus::Bitmap* m_pLogoImage;
162 int32_t m_i32BmpWidth, m_i32BmpHeight;
163 CRect m_rtTitleBar;
164 CRect m_rtTitleBarPrev;
165 CRect m_rtClose, m_rtRestore, m_rtMinimize;
166 CRect m_rtInfoCurrentModelName;
167 CRect m_rtInfoCurrentUserID;
168
169 CWnd* m_pParent;
170 bool m_bInit;
171 bool m_bAboutToMaximize;
172
173 CPoint m_ptPrevMouse;
174 double m_f64MoveThreshold;
175 double m_f64MoveDistance;
176
177 CRect m_rtMainFrame;
178 std::vector<unsigned char> m_vctLogoBkClr;
179
180 CGUIMainFrameTabCtrl* m_pMainFrameTabCtrl;
181 bool m_bTrackMouse;
182
183 CToolTipCtrl m_ToolTip;
184 Base::CFLString<wchar_t> m_strToolTipText;
185
186 bool m_bHitTimerInstalled;
187 bool m_bShowLogo;
188 bool m_bEnableBtnMinimize;
189 bool m_bEnableBtnMaximize;
190 bool m_bEnableBtnClose;
191
192 protected:
193 void DoPaint(CDC* pDCPaint);
194 void DrawTitle(CDC* pDCPaint);
195 void UpdateAnimation();
196 void LoadLogoImage(const Base::CFLString<wchar_t>& strLogoPath);
197
198 public:
199 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
200 afx_msg BOOL OnEraseBkgnd(CDC* pDC);
201 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
202 afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
203 afx_msg void OnMouseMove(UINT nFlags, CPoint point);
204 afx_msg void OnMouseLeave();
205 afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
206 afx_msg void OnKillFocus(CWnd* pNewWnd);
207 afx_msg void OnSize(UINT nType, int cx, int cy);
208 afx_msg void OnMButtonUp(UINT nFlags, CPoint point);
209 afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
210 afx_msg void OnDestroy();
211 afx_msg void OnTimer(UINT_PTR nIDEvent);
212 DECLARE_MESSAGE_MAP()
213 virtual BOOL PreTranslateMessage(MSG* pMsg)override;
214
215 friend class CGUIMainFrame;
216 friend class CGUIMenuItemLogIn;
217};
218 }
219}
Definition D2DObject.h:12
EGUIMenuBarHitArea
Menu bar 위에서 마우스가 위치한 영역입니다.
Definition DefinitionsGUI.h:4893
@ RGB
Definition DefinitionsBase.h:2630