// WM_NCLBUTTONUP handler BOOL cef_dark_window::HandleNcLeftButtonUp(UINT uHitTest, LPPOINT point) { NonClientButtonStateData oldData(mNonClientData); mNonClientData.Reset(); UpdateNonClientButtons(); switch (oldData.mActiveButton) { case HTCLOSE: if (oldData.mButtonOver) { SendMessage (WM_SYSCOMMAND, SC_CLOSE, (LPARAM)POINTTOPOINTS(*point)); TrackNonClientMouseEvents(false); } return TRUE; case HTMAXBUTTON: if (oldData.mButtonOver) { if (IsZoomed()) SendMessage (WM_SYSCOMMAND, SC_RESTORE, (LPARAM)POINTTOPOINTS(*point)); else SendMessage (WM_SYSCOMMAND, SC_MAXIMIZE, (LPARAM)POINTTOPOINTS(*point)); TrackNonClientMouseEvents(false); } return TRUE; case HTMINBUTTON: if (oldData.mButtonOver) { SendMessage (WM_SYSCOMMAND, SC_MINIMIZE, (LPARAM)POINTTOPOINTS(*point)); TrackNonClientMouseEvents(false); } return TRUE; } return FALSE; }
// WM_NCCREATE handler BOOL cef_dark_window::HandleNcDestroy() { TrackNonClientMouseEvents(false); delete mSysCloseButton; delete mSysRestoreButton; delete mSysMinimizeButton; delete mSysMaximizeButton; delete mHoverSysCloseButton; delete mHoverSysRestoreButton; delete mHoverSysMinimizeButton; delete mHoverSysMaximizeButton; delete mPressedSysCloseButton; delete mPressedSysRestoreButton; delete mPressedSysMinimizeButton; delete mPressedSysMaximizeButton; ::DeleteObject(mBackgroundBrush); ::DeleteObject(mCaptionFont); ::DeleteObject(mMenuFont); ::DeleteObject(mHighlightBrush); ::DeleteObject(mHoverBrush); ::DeleteObject(mFrameOutlinePen); return cef_window::HandleNcDestroy(); }
// WM_NCMOUSEMOVE handler BOOL cef_dark_window::HandleNcMouseMove(UINT uHitTest) { bool needUpdate = false; if (mNonClientData.mActiveButton != uHitTest) { needUpdate = true; if (mNonClientData.mButtonDown) { // If the mouse button was down, we just want // to indicate that we're no longer over the system button mNonClientData.mButtonOver = false; } else { switch (uHitTest) { case HTCLOSE: case HTMAXBUTTON: case HTMINBUTTON: // Otherwise, we're just mousing over stuff // so we need to show the visual feedback mNonClientData.mButtonOver = true; mNonClientData.mActiveButton = uHitTest; TrackNonClientMouseEvents(); break; default: // User isn't hovering over anything that // we care about so just reset and redraw mNonClientData.Reset(); UpdateNonClientButtons (); // let the DefaultWindowProc handle this return FALSE; } } } else { // Check to see if the user moved the mouse back over // the button that they originally click and held and // redraw the button in the correct state if they did if (mNonClientData.mButtonDown && !mNonClientData.mButtonOver) { mNonClientData.mButtonOver = true; needUpdate = true; } } if (needUpdate) { UpdateNonClientButtons (); } return TRUE; }
// WM_NCMOUSEMOVE handler BOOL cef_dark_aero_window::HandleNcMouseMove(UINT uHitTest, LPPOINT pt) { if (cef_dark_window::HandleNcMouseMove(uHitTest)) { if (mMenuActiveIndex == -1) { HiliteMenuItemAt(NULL); } return TRUE; } if (mMenuActiveIndex == -1) { if (uHitTest == HTMENU) { HiliteMenuItemAt(pt); TrackNonClientMouseEvents(); } else { HiliteMenuItemAt(NULL); } } return FALSE; }
// WM_NCLBUTTONDOWN handler BOOL cef_dark_window::HandleNcLeftButtonDown(UINT uHitTest) { switch (uHitTest) { case HTCLOSE: case HTMAXBUTTON: case HTMINBUTTON: // we only care about these guys mNonClientData.mActiveButton = uHitTest; mNonClientData.mButtonOver = true; mNonClientData.mButtonDown = true; UpdateNonClientButtons(); TrackNonClientMouseEvents(); return TRUE; default: mNonClientData.Reset(); UpdateNonClientButtons(); return FALSE; } }