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