1// Copyright 2013 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 BASE_WIN_MESSAGE_WINDOW_H_ 6#define BASE_WIN_MESSAGE_WINDOW_H_ 7 8#include <windows.h> 9 10#include "base/base_export.h" 11#include "base/basictypes.h" 12#include "base/callback.h" 13#include "base/compiler_specific.h" 14#include "base/strings/string16.h" 15#include "base/threading/non_thread_safe.h" 16 17namespace base { 18namespace win { 19 20// Implements a message-only window. 21class BASE_EXPORT MessageWindow : public base::NonThreadSafe { 22 public: 23 // Used to register a process-wide message window class. 24 class WindowClass; 25 26 // Implement this callback to handle messages received by the message window. 27 // If the callback returns |false|, the first four parameters are passed to 28 // DefWindowProc(). Otherwise, |*result| is returned by the window procedure. 29 typedef base::Callback<bool(UINT message, 30 WPARAM wparam, 31 LPARAM lparam, 32 LRESULT* result)> MessageCallback; 33 34 MessageWindow(); 35 ~MessageWindow(); 36 37 // Creates a message-only window. The incoming messages will be passed by 38 // |message_callback|. |message_callback| must outlive |this|. 39 bool Create(const MessageCallback& message_callback); 40 41 // Same as Create() but assigns the name to the created window. 42 bool CreateNamed(const MessageCallback& message_callback, 43 const string16& window_name); 44 45 HWND hwnd() const { return window_; } 46 47 // Retrieves a handle of the first message-only window with matching 48 // |window_name|. 49 static HWND FindWindow(const string16& window_name); 50 51 private: 52 // Give |WindowClass| access to WindowProc(). 53 friend class WindowClass; 54 55 // Contains the actual window creation code. 56 bool DoCreate(const MessageCallback& message_callback, 57 const wchar_t* window_name); 58 59 // Invoked by the OS to process incoming window messages. 60 static LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam, 61 LPARAM lparam); 62 63 // Invoked to handle messages received by the window. 64 MessageCallback message_callback_; 65 66 // Handle of the input window. 67 HWND window_; 68 69 DISALLOW_COPY_AND_ASSIGN(MessageWindow); 70}; 71 72} // namespace win 73} // namespace base 74 75#endif // BASE_WIN_MESSAGE_WINDOW_H_ 76