Home | History | Annotate | Download | only in win
      1 // Copyright (c) 2012 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 UI_GFX_WIN_SINGLETON_HWND_H_
      6 #define UI_GFX_WIN_SINGLETON_HWND_H_
      7 
      8 #include <windows.h>
      9 #include <vector>
     10 
     11 #include "base/basictypes.h"
     12 #include "base/callback_forward.h"
     13 #include "base/observer_list.h"
     14 #include "ui/gfx/win/window_impl.h"
     15 
     16 template<typename T> struct DefaultSingletonTraits;
     17 
     18 namespace gfx {
     19 
     20 // Singleton message-only HWND that allows interested clients to receive WM_*
     21 // notifications.
     22 class GFX_EXPORT SingletonHwnd : public WindowImpl {
     23  public:
     24   static SingletonHwnd* GetInstance();
     25 
     26   // Observer interface for receiving Windows WM_* notifications.
     27   class Observer {
     28    public:
     29     virtual void OnWndProc(HWND hwnd,
     30                            UINT message,
     31                            WPARAM wparam,
     32                            LPARAM lparam) = 0;
     33   };
     34 
     35   // Add/remove observer to receive WM_* notifications.
     36   void AddObserver(Observer* observer);
     37   void RemoveObserver(Observer* observer);
     38 
     39   // Windows callback for WM_* notifications.
     40   virtual BOOL ProcessWindowMessage(HWND window,
     41                                     UINT message,
     42                                     WPARAM wparam,
     43                                     LPARAM lparam,
     44                                     LRESULT& result,
     45                                     DWORD msg_map_id) OVERRIDE;
     46 
     47  private:
     48   friend struct DefaultSingletonTraits<SingletonHwnd>;
     49 
     50   SingletonHwnd();
     51   ~SingletonHwnd();
     52 
     53   // List of registered observers.
     54   ObserverList<Observer> observer_list_;
     55 
     56   DISALLOW_COPY_AND_ASSIGN(SingletonHwnd);
     57 };
     58 
     59 }  // namespace gfx
     60 
     61 #endif  // UI_GFX_WIN_SINGLETON_HWND_H_
     62