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 17 namespace base { 18 namespace win { 19 20 // Implements a message-only window. 21 class 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