C++程序  |  51行  |  1.87 KB

// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_FRAME_INFOBARS_INFOBAR_CONTENT_H_
#define CHROME_FRAME_INFOBARS_INFOBAR_CONTENT_H_

#include <windows.h>

// Provides an interface between content to be displayed in an infobar and the
// infobar facility. Pass an instance of your implementation to
// InfobarManager::Show, which will result in a call to InstallInFrame to
// initialize the InfobarContent.
//
// The instance will be deleted by the infobar facility when it is no longer
// being displayed (or immediately, in the case of a failure to display).
class InfobarContent {
 public:
  // Provides access to the content's parent window and allows the
  // InfobarContent to close itself, such as in response to user interaction.
  class Frame {
   public:
    virtual ~Frame() {}

    // Returns the window in which the content should display itself.
    virtual HWND GetFrameWindow() = 0;

    // Initiates closing of the infobar.
    virtual void CloseInfobar() = 0;
  };  // class Frame

  virtual ~InfobarContent() {}

  // Prepares the content to display in the provided frame.
  //
  // The frame pointer remains valid until the InfobarContent instance is
  // deleted.
  virtual bool InstallInFrame(Frame* frame) = 0;

  // Provides the content with the dimensions available to it for display.
  // Dimensions are relative to the origin of the frame window.
  virtual void SetDimensions(const RECT& dimensions) = 0;

  // Finds the desired value for one dimension given a fixed value for the other
  // dimension. The fixed dimension parameter is non-zero whereas the requested
  // dimension parameter will be zero.
  virtual size_t GetDesiredSize(size_t width, size_t height) = 0;
};  // class InfobarContent

#endif  // CHROME_FRAME_INFOBARS_INFOBAR_CONTENT_H_