| // Copyright 2013 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 BASE_WIN_MESSAGE_WINDOW_H_ |
| #define BASE_WIN_MESSAGE_WINDOW_H_ |
| |
| #include <windows.h> |
| |
| #include "base/base_export.h" |
| #include "base/callback.h" |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| #include "base/strings/string16.h" |
| #include "base/threading/thread_checker.h" |
| |
| namespace base { |
| namespace win { |
| |
| // Implements a message-only window. |
| class BASE_EXPORT MessageWindow { |
| public: |
| // Used to register a process-wide message window class. |
| class WindowClass; |
| |
| // Implement this callback to handle messages received by the message window. |
| // If the callback returns |false|, the first four parameters are passed to |
| // DefWindowProc(). Otherwise, |*result| is returned by the window procedure. |
| using MessageCallback = base::RepeatingCallback< |
| bool(UINT message, WPARAM wparam, LPARAM lparam, LRESULT* result)>; |
| |
| MessageWindow(); |
| ~MessageWindow(); |
| |
| // Creates a message-only window. The incoming messages will be passed by |
| // |message_callback|. |message_callback| must outlive |this|. |
| bool Create(MessageCallback message_callback); |
| |
| // Same as Create() but assigns the name to the created window. |
| bool CreateNamed(MessageCallback message_callback, |
| const string16& window_name); |
| |
| HWND hwnd() const { return window_; } |
| |
| // Retrieves a handle of the first message-only window with matching |
| // |window_name|. |
| static HWND FindWindow(const string16& window_name); |
| |
| private: |
| // Give |WindowClass| access to WindowProc(). |
| friend class WindowClass; |
| |
| // Contains the actual window creation code. |
| bool DoCreate(MessageCallback message_callback, const wchar_t* window_name); |
| |
| // Invoked by the OS to process incoming window messages. |
| static LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam, |
| LPARAM lparam); |
| |
| // Invoked to handle messages received by the window. |
| MessageCallback message_callback_; |
| |
| // Handle of the input window. |
| HWND window_; |
| |
| THREAD_CHECKER(thread_checker_); |
| |
| DISALLOW_COPY_AND_ASSIGN(MessageWindow); |
| }; |
| |
| } // namespace win |
| } // namespace base |
| |
| #endif // BASE_WIN_MESSAGE_WINDOW_H_ |