| Index: ui/views/widget/native_widget_win.h
|
| ===================================================================
|
| --- ui/views/widget/native_widget_win.h (revision 0)
|
| +++ ui/views/widget/native_widget_win.h (revision 0)
|
| @@ -0,0 +1,271 @@
|
| +// Copyright (c) 2011 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 UI_VIEWS_WIDGET_NATIVE_WIDGET_WIN_H_
|
| +#define UI_VIEWS_WIDGET_NATIVE_WIDGET_WIN_H_
|
| +
|
| +#include "ui/base/win/window_impl.h"
|
| +#include "base/logging.h"
|
| +#include "base/message_loop.h"
|
| +#include "base/scoped_ptr.h"
|
| +#include "base/scoped_vector.h"
|
| +#include "ui/views/widget/native_widget.h"
|
| +
|
| +namespace gfx {
|
| +class CanvasSkia;
|
| +}
|
| +
|
| +namespace ui {
|
| +class ViewProp;
|
| +namespace internal {
|
| +
|
| +// A Windows message reflected from other windows. This message is sent with the
|
| +// following arguments:
|
| +// HWND - Target window
|
| +// MSG - kReflectedMessage
|
| +// WPARAM - Should be 0
|
| +// LPARAM - Pointer to MSG struct containing the original message.
|
| +const int kReflectedMessage = WM_APP + 3;
|
| +
|
| +// These two messages aren't defined in winuser.h, but they are sent to windows
|
| +// with captions. They appear to paint the window caption and frame.
|
| +// Unfortunately if you override the standard non-client rendering as we do
|
| +// with CustomFrameWindow, sometimes Windows (not deterministically
|
| +// reproducibly but definitely frequently) will send these messages to the
|
| +// window and paint the standard caption/title over the top of the custom one.
|
| +// So we need to handle these messages in CustomFrameWindow to prevent this
|
| +// from happening.
|
| +const int WM_NCUAHDRAWCAPTION = 0xAE;
|
| +const int WM_NCUAHDRAWFRAME = 0xAF;
|
| +
|
| +class NativeWidgetListener;
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// NativeWidgetWin class
|
| +//
|
| +// A NativeWidget implementation that wraps a Win32 HWND.
|
| +//
|
| +class NativeWidgetWin : public NativeWidget,
|
| + public ui::WindowImpl,
|
| + public MessageLoopForUI::Observer {
|
| + public:
|
| + explicit NativeWidgetWin(NativeWidgetListener* listener);
|
| + virtual ~NativeWidgetWin();
|
| +
|
| + private:
|
| + typedef ScopedVector<ViewProp> ViewProps;
|
| +
|
| + // Overridden from NativeWidget:
|
| + virtual void InitWithNativeViewParent(gfx::NativeView parent,
|
| + const gfx::Rect& bounds);
|
| + virtual void InitWithWidgetParent(Widget* parent,
|
| + const gfx::Rect& bounds);
|
| + virtual void InitWithViewParent(View* parent, const gfx::Rect& bounds);
|
| + virtual void SetNativeWindowProperty(const char* name, void* value);
|
| + virtual void* GetNativeWindowProperty(const char* name) const;
|
| + virtual gfx::Rect GetWindowScreenBounds() const;
|
| + virtual gfx::Rect GetClientAreaScreenBounds() const;
|
| + virtual void SetBounds(const gfx::Rect& bounds);
|
| + virtual void SetShape(const gfx::Path& shape);
|
| + virtual gfx::NativeView GetNativeView() const;
|
| + virtual void Show();
|
| + virtual void Hide();
|
| + virtual void Close();
|
| + virtual void MoveAbove(NativeWidget* other);
|
| + virtual void SetAlwaysOnTop(bool always_on_top);
|
| + virtual void Invalidate();
|
| + virtual void InvalidateRect(const gfx::Rect& invalid_rect);
|
| + virtual void Paint();
|
| + virtual bool IsVisible() const;
|
| + virtual bool IsActive() const;
|
| + virtual void SetMouseCapture();
|
| + virtual void ReleaseMouseCapture();
|
| + virtual bool HasMouseCapture() const;
|
| + virtual bool ShouldReleaseCaptureOnMouseReleased() const;
|
| +
|
| + // Overridden from MessageLoop::Observer:
|
| + void WillProcessMessage(const MSG& msg);
|
| + virtual void DidProcessMessage(const MSG& msg);
|
| +
|
| + // Message handlers
|
| + BEGIN_MSG_MAP_EX(NativeWidgetWin)
|
| + // Range handlers must go first!
|
| + MESSAGE_RANGE_HANDLER_EX(WM_MOUSEFIRST, WM_MOUSELAST, OnMouseRange)
|
| + MESSAGE_RANGE_HANDLER_EX(WM_NCMOUSEMOVE, WM_NCMBUTTONDBLCLK, OnNCMouseRange)
|
| +
|
| + // Reflected message handler
|
| + MESSAGE_HANDLER_EX(kReflectedMessage, OnReflectedMessage)
|
| +
|
| + // CustomFrameWindow hacks
|
| + MESSAGE_HANDLER_EX(WM_NCUAHDRAWCAPTION, OnNCUAHDrawCaption)
|
| + MESSAGE_HANDLER_EX(WM_NCUAHDRAWFRAME, OnNCUAHDrawFrame)
|
| +
|
| + // Vista and newer
|
| + MESSAGE_HANDLER_EX(WM_DWMCOMPOSITIONCHANGED, OnDwmCompositionChanged)
|
| +
|
| + // Non-atlcrack.h handlers
|
| + MESSAGE_HANDLER_EX(WM_GETOBJECT, OnGetObject)
|
| + MESSAGE_HANDLER_EX(WM_NCMOUSELEAVE, OnMouseLeave)
|
| + MESSAGE_HANDLER_EX(WM_MOUSELEAVE, OnMouseLeave)
|
| +
|
| + // Key events.
|
| + MESSAGE_HANDLER_EX(WM_KEYDOWN, OnKeyDown)
|
| + MESSAGE_HANDLER_EX(WM_KEYUP, OnKeyUp)
|
| + MESSAGE_HANDLER_EX(WM_SYSKEYDOWN, OnKeyDown);
|
| + MESSAGE_HANDLER_EX(WM_SYSKEYUP, OnKeyUp);
|
| +
|
| + // This list is in _ALPHABETICAL_ order! OR I WILL HURT YOU.
|
| + MSG_WM_ACTIVATE(OnActivate)
|
| + MSG_WM_ACTIVATEAPP(OnActivateApp)
|
| + MSG_WM_APPCOMMAND(OnAppCommand)
|
| + MSG_WM_CANCELMODE(OnCancelMode)
|
| + MSG_WM_CAPTURECHANGED(OnCaptureChanged)
|
| + MSG_WM_CLOSE(OnClose)
|
| + MSG_WM_COMMAND(OnCommand)
|
| + MSG_WM_CREATE(OnCreate)
|
| + MSG_WM_DESTROY(OnDestroy)
|
| + MSG_WM_DISPLAYCHANGE(OnDisplayChange)
|
| + MSG_WM_ERASEBKGND(OnEraseBkgnd)
|
| + MSG_WM_ENDSESSION(OnEndSession)
|
| + MSG_WM_ENTERSIZEMOVE(OnEnterSizeMove)
|
| + MSG_WM_EXITMENULOOP(OnExitMenuLoop)
|
| + MSG_WM_EXITSIZEMOVE(OnExitSizeMove)
|
| + MSG_WM_GETMINMAXINFO(OnGetMinMaxInfo)
|
| + MSG_WM_HSCROLL(OnHScroll)
|
| + MSG_WM_INITMENU(OnInitMenu)
|
| + MSG_WM_INITMENUPOPUP(OnInitMenuPopup)
|
| + MSG_WM_KILLFOCUS(OnKillFocus)
|
| + MSG_WM_MOUSEACTIVATE(OnMouseActivate)
|
| + MSG_WM_MOVE(OnMove)
|
| + MSG_WM_MOVING(OnMoving)
|
| + MSG_WM_NCACTIVATE(OnNCActivate)
|
| + MSG_WM_NCCALCSIZE(OnNCCalcSize)
|
| + MESSAGE_HANDLER_EX(WM_NCHITTEST, OnNCHitTest)
|
| + MSG_WM_NCPAINT(OnNCPaint)
|
| + MSG_WM_NOTIFY(OnNotify)
|
| + MSG_WM_PAINT(OnPaint)
|
| + MSG_WM_POWERBROADCAST(OnPowerBroadcast)
|
| + MSG_WM_SETFOCUS(OnSetFocus)
|
| + MSG_WM_SETICON(OnSetIcon)
|
| + MSG_WM_SETTEXT(OnSetText)
|
| + MSG_WM_SETTINGCHANGE(OnSettingChange)
|
| + MSG_WM_SIZE(OnSize)
|
| + MSG_WM_SYSCOMMAND(OnSysCommand)
|
| + MSG_WM_THEMECHANGED(OnThemeChanged)
|
| + MSG_WM_VSCROLL(OnVScroll)
|
| + MSG_WM_WINDOWPOSCHANGING(OnWindowPosChanging)
|
| + MSG_WM_WINDOWPOSCHANGED(OnWindowPosChanged)
|
| + END_MSG_MAP()
|
| +
|
| + virtual void OnActivate(UINT action, BOOL minimized, HWND window);
|
| + virtual void OnActivateApp(BOOL active, DWORD thread_id);
|
| + virtual LRESULT OnAppCommand(HWND window, short app_command, WORD device,
|
| + int keystate);
|
| + virtual void OnCancelMode();
|
| + virtual void OnCaptureChanged(HWND hwnd);
|
| + virtual void OnClose();
|
| + virtual void OnCommand(UINT notification_code, int command_id, HWND window);
|
| + virtual LRESULT OnCreate(CREATESTRUCT* create_struct);
|
| + // WARNING: If you override this be sure and invoke super, otherwise we'll
|
| + // leak a few things.
|
| + virtual void OnDestroy();
|
| + virtual void OnDisplayChange(UINT bits_per_pixel, CSize screen_size);
|
| + virtual LRESULT OnDwmCompositionChanged(UINT message,
|
| + WPARAM w_param,
|
| + LPARAM l_param);
|
| + virtual void OnEndSession(BOOL ending, UINT logoff);
|
| + virtual void OnEnterSizeMove();
|
| + virtual LRESULT OnEraseBkgnd(HDC dc);
|
| + virtual void OnExitMenuLoop(BOOL is_track_popup_menu);
|
| + virtual void OnExitSizeMove();
|
| + virtual LRESULT OnGetObject(UINT message, WPARAM w_param, LPARAM l_param);
|
| + virtual void OnGetMinMaxInfo(MINMAXINFO* minmax_info);
|
| + virtual void OnHScroll(int scroll_type, short position, HWND scrollbar);
|
| + virtual void OnInitMenu(HMENU menu);
|
| + virtual void OnInitMenuPopup(HMENU menu, UINT position, BOOL is_system_menu);
|
| + virtual LRESULT OnKeyDown(UINT message, WPARAM w_param, LPARAM l_param);
|
| + virtual LRESULT OnKeyUp(UINT message, WPARAM w_param, LPARAM l_param);
|
| + virtual void OnKillFocus(HWND focused_window);
|
| + virtual LRESULT OnMouseActivate(HWND window, UINT hittest_code, UINT message);
|
| + virtual LRESULT OnMouseLeave(UINT message, WPARAM w_param, LPARAM l_param);
|
| + virtual void OnMove(const CPoint& point);
|
| + virtual void OnMoving(UINT param, LPRECT new_bounds);
|
| + virtual LRESULT OnMouseRange(UINT message, WPARAM w_param, LPARAM l_param);
|
| + virtual LRESULT OnNCActivate(BOOL active);
|
| + virtual LRESULT OnNCCalcSize(BOOL w_param, LPARAM l_param);
|
| + virtual LRESULT OnNCHitTest(UINT message, WPARAM w_param, LPARAM l_param);
|
| + virtual LRESULT OnNCMouseRange(UINT message, WPARAM w_param, LPARAM l_param);
|
| + virtual void OnNCPaint(HRGN rgn);
|
| + virtual LRESULT OnNCUAHDrawCaption(UINT message,
|
| + WPARAM w_param,
|
| + LPARAM l_param);
|
| + virtual LRESULT OnNCUAHDrawFrame(UINT message, WPARAM w_param,
|
| + LPARAM l_param);
|
| + virtual LRESULT OnNotify(int w_param, NMHDR* l_param);
|
| + virtual void OnPaint(HDC dc);
|
| + virtual LRESULT OnPowerBroadcast(DWORD power_event, DWORD data);
|
| + virtual LRESULT OnReflectedMessage(UINT message, WPARAM w_param,
|
| + LPARAM l_param);
|
| + virtual void OnSetFocus(HWND focused_window);
|
| + virtual LRESULT OnSetIcon(UINT size_type, HICON new_icon);
|
| + virtual LRESULT OnSetText(const wchar_t* text);
|
| + virtual void OnSettingChange(UINT flags, const wchar_t* section);
|
| + virtual void OnSize(UINT param, const CSize& size);
|
| + virtual void OnSysCommand(UINT notification_code, CPoint click);
|
| + virtual void OnThemeChanged();
|
| + virtual void OnVScroll(int scroll_type, short position, HWND scrollbar);
|
| + virtual void OnWindowPosChanging(WINDOWPOS* window_pos);
|
| + virtual void OnWindowPosChanged(WINDOWPOS* window_pos);
|
| +
|
| + // Deletes this window as it is destroyed, override to provide different
|
| + // behavior.
|
| + virtual void OnFinalMessage(HWND window);
|
| +
|
| + // Overridden from WindowImpl:
|
| + virtual HICON GetDefaultWindowIcon() const;
|
| + virtual LRESULT OnWndProc(UINT message, WPARAM w_param, LPARAM l_param);
|
| +
|
| + // Start tracking all mouse events so that this window gets sent mouse leave
|
| + // messages too.
|
| + void TrackMouseEvents(DWORD mouse_tracking_flags);
|
| +
|
| + bool ProcessMouseRange(UINT message, WPARAM w_param, LPARAM l_param,
|
| + bool non_client);
|
| + void ProcessMouseMoved(const CPoint& point, UINT flags, bool is_nonclient);
|
| + void ProcessMouseExited();
|
| +
|
| + // Fills out a MSG struct with the supplied values.
|
| + void MakeMSG(MSG* msg, UINT message, WPARAM w_param, LPARAM l_param) const;
|
| +
|
| + void CloseNow();
|
| +
|
| + bool IsLayeredWindow() const;
|
| +
|
| + // A listener implementation that handles events received here.
|
| + NativeWidgetListener* listener_;
|
| +
|
| + // The flags currently being used with TrackMouseEvent to track mouse
|
| + // messages. 0 if there is no active tracking. The value of this member is
|
| + // used when tracking is canceled.
|
| + DWORD active_mouse_tracking_flags_;
|
| +
|
| + // True when the HWND has event capture.
|
| + bool has_capture_;
|
| +
|
| + // A canvas that contains the window contents in the case of a layered
|
| + // window.
|
| + scoped_ptr<gfx::CanvasSkia> window_contents_;
|
| +
|
| + // Properties associated with this NativeWidget implementation.
|
| + // TODO(beng): move to Widget.
|
| + ViewProps props_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(NativeWidgetWin);
|
| +};
|
| +
|
| +} // namespace internal
|
| +} // namespace ui
|
| +
|
| +#endif // UI_VIEWS_WIDGET_NATIVE_WIDGET_WIN_H_
|
| +
|
|
|
| Property changes on: ui\views\widget\native_widget_win.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|