@@ -22,7 +22,7 @@ CTitleBarHelper::CTitleBarHelper()
22
22
, m_rightMargin(35 .f * 3 )
23
23
, m_bMouseTracking(false )
24
24
, m_nTrackingButton(-1 )
25
- , m_nHitTest(HTNOWHERE )
25
+ , m_nPressedButton(- 1 )
26
26
, m_icon(nullptr )
27
27
, m_icon_gray(nullptr )
28
28
{
@@ -120,6 +120,8 @@ void CTitleBarHelper::DrawButtons(CDC& dc, COLORREF textColor, COLORREF backColo
120
120
};
121
121
COLORREF buttonColor = (brightness < 128 ) ? adjustColor (backColor, +delta) : adjustColor (backColor, -delta);
122
122
colorref = (i == 2 ) ? RGB (0xE9 , 0x48 , 0x56 ) : buttonColor;
123
+ if (m_nPressedButton != -1 )
124
+ colorref = adjustColor (colorref, (brightness < 128 ) ? +delta : -delta);
123
125
}
124
126
else
125
127
colorref = backColor;
@@ -257,6 +259,7 @@ void CTitleBarHelper::OnNcMouseLeave()
257
259
m_pWnd->InvalidateRect (&rcPart, false );
258
260
}
259
261
m_nTrackingButton = -1 ;
262
+ m_nPressedButton = -1 ;
260
263
}
261
264
262
265
void CTitleBarHelper::OnNcLButtonDblClk (UINT nHitTest, CPoint point)
@@ -267,21 +270,36 @@ void CTitleBarHelper::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
267
270
AfxGetMainWnd ()->PostMessage (WM_CLOSE);
268
271
}
269
272
273
+ static int HitTestToButtonIndex (UINT nHitTest)
274
+ {
275
+ if (nHitTest == HTMINBUTTON)
276
+ return 0 ;
277
+ else if (nHitTest == HTMAXBUTTON)
278
+ return 1 ;
279
+ else if (nHitTest == HTCLOSE)
280
+ return 2 ;
281
+ return -1 ;
282
+ }
283
+
270
284
void CTitleBarHelper::OnNcLButtonDown (UINT nHitTest, CPoint point)
271
285
{
272
286
if (nHitTest != HTMINBUTTON && nHitTest != HTMAXBUTTON && nHitTest != HTCLOSE && nHitTest != HTSYSMENU)
273
287
AfxGetMainWnd ()->SendMessage (WM_NCLBUTTONDOWN, nHitTest, MAKELPARAM (point.x , point.y ));
274
288
else if (nHitTest == HTSYSMENU)
275
289
ShowSysMenu (CPoint{ point.x + 1 , point.y });
276
290
else if (nHitTest == HTMINBUTTON || nHitTest == HTMAXBUTTON || nHitTest == HTCLOSE)
277
- m_nHitTest = nHitTest;
291
+ {
292
+ m_nPressedButton = HitTestToButtonIndex (nHitTest);
293
+ CRect rcPart = GetButtonRect (m_nPressedButton);
294
+ m_pWnd->InvalidateRect (&rcPart, false );
295
+ }
278
296
}
279
297
280
298
void CTitleBarHelper::OnNcLButtonUp (UINT nHitTest, CPoint point)
281
299
{
282
300
if (nHitTest != HTMINBUTTON && nHitTest != HTMAXBUTTON && nHitTest != HTCLOSE && nHitTest != HTSYSMENU)
283
301
AfxGetMainWnd ()->SendMessage (WM_NCLBUTTONUP, nHitTest, MAKELPARAM (point.x , point.y ));
284
- else if (m_nHitTest != HTNOWHERE && m_nHitTest == nHitTest)
302
+ else if (m_nPressedButton != - 1 && m_nPressedButton == HitTestToButtonIndex ( nHitTest) )
285
303
{
286
304
if (nHitTest == HTMINBUTTON)
287
305
AfxGetMainWnd ()->SendMessage (WM_SYSCOMMAND, SC_MINIMIZE, 0 );
@@ -290,7 +308,7 @@ void CTitleBarHelper::OnNcLButtonUp(UINT nHitTest, CPoint point)
290
308
else if (nHitTest == HTCLOSE)
291
309
AfxGetMainWnd ()->SendMessage (WM_SYSCOMMAND, SC_CLOSE, 0 );
292
310
}
293
- m_nHitTest = HTNOWHERE ;
311
+ m_nPressedButton = - 1 ;
294
312
}
295
313
296
314
void CTitleBarHelper::OnNcRButtonDown (UINT nHitTest, CPoint point)
0 commit comments