15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_VIEWS_WIDGET_CHILD_WINDOW_MESSAGE_PROCESSOR_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_VIEWS_WIDGET_CHILD_WINDOW_MESSAGE_PROCESSOR_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ViewProp;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Windows sends a handful of messages to the parent window rather than the
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window itself. For example, selection changes of a rich edit (EN_SELCHANGE)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are sent to the parent, not the window. Typically such message are best
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dealt with by the window rather than the parent. NativeWidgetWin allows for
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// registering a ChildWindowMessageProcessor to handle such messages.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChildWindowMessageProcessor {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Registers |processor| for |hwnd|. The caller takes ownership of the
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // returned object.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static ui::ViewProp* Register(HWND hwnd,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 ChildWindowMessageProcessor* processor);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the ChildWindowMessageProcessor for |hwnd|, NULL if there isn't
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // one.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static ChildWindowMessageProcessor* Get(HWND hwnd);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked for any messages that are sent to the parent and originated from
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the HWND this ChildWindowMessageProcessor was registered for. Returns true
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // if the message was handled with a valid result in |result|. Returns false
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // if the message was not handled.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ProcessMessage(UINT message,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              WPARAM w_param,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              LPARAM l_param,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              LRESULT* result) = 0;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ChildWindowMessageProcessor() {}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace views
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_VIEWS_WIDGET_CHILD_WINDOW_MESSAGE_PROCESSOR_H_
48