1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_FRAME_INFOBARS_INTERNAL_DISPLACED_WINDOW_MANAGER_H_ 6 #define CHROME_FRAME_INFOBARS_INTERNAL_DISPLACED_WINDOW_MANAGER_H_ 7 8 #include <atlbase.h> 9 #include <atlcrack.h> 10 #include <atlwin.h> 11 12 #include "base/basictypes.h" 13 #include "chrome_frame/infobars/internal/subclassing_window_with_delegate.h" 14 15 // DisplacedWindowManager observes the HWND passed to Initialize and: 16 // 1) Intercepts NCCALCSIZE events allowing the client to modify the window's 17 // requested dimensions. 18 // 2) Allows the client to request a recalculation of the window's dimensions 19 // (resulting in a deferred callback as in [1]). 20 // 3) Is destroyed only when the window is destroyed. 21 class DisplacedWindowManager 22 : public SubclassingWindowWithDelegate<DisplacedWindowManager> { 23 public: 24 DisplacedWindowManager(); 25 26 // Triggers an immediate re-evaluation of the dimensions of the displaced 27 // window. Delegate::AdjustDisplacedWindowDimensions will be called with the 28 // natural dimensions of the displaced window. 29 void UpdateLayout(); 30 31 BEGIN_MSG_MAP_EX(DisplacedWindowManager) 32 MSG_WM_NCCALCSIZE(OnNcCalcSize) 33 CHAIN_MSG_MAP(SubclassingWindowWithDelegate<DisplacedWindowManager>) 34 END_MSG_MAP() 35 36 private: 37 // The size of the displaced window is being calculated. Allow 38 // InfobarWindows to reserve a part of the space for themselves, if they are 39 // visible. 40 LRESULT OnNcCalcSize(BOOL calc_valid_rects, LPARAM lparam); 41 42 DISALLOW_COPY_AND_ASSIGN(DisplacedWindowManager); 43 }; // class DisplacedWindowManager 44 45 #endif // CHROME_FRAME_INFOBARS_INTERNAL_DISPLACED_WINDOW_MANAGER_H_ 46