From 6a514be7d7056f8048941d0b7c1b0c7786e98835 Mon Sep 17 00:00:00 2001 From: Bei Yang Date: Wed, 19 May 2010 20:58:28 +0000 Subject: [PATCH] no message --- panda/src/windisplay/winGraphicsWindow.cxx | 28 +++++++++++++++++++ panda/src/windisplay/winGraphicsWindow.h | 12 ++++++++ .../src/windisplay/windisplay_composite1.cxx | 2 +- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/panda/src/windisplay/winGraphicsWindow.cxx b/panda/src/windisplay/winGraphicsWindow.cxx index 7f65baa46d..cb31325764 100644 --- a/panda/src/windisplay/winGraphicsWindow.cxx +++ b/panda/src/windisplay/winGraphicsWindow.cxx @@ -1259,6 +1259,11 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { WindowProperties properties; int button = -1; + //first do custom messages processing if any has been set + for ( WinProcClasses::iterator it=_window_proc_classes.begin() ; it != _window_proc_classes.end(); it++ ){ + (*it)->wnd_proc(hwnd, msg, wparam, lparam); + } + switch (msg) { case WM_MOUSEMOVE: if (!_tracking_mouse_leaving) { @@ -2793,3 +2798,26 @@ void get_client_rect_screen(HWND hwnd, RECT *view_rect) { view_rect->right = lr.x; view_rect->bottom = lr.y; } + + + +void WinGraphicsWindow::add_window_proc( const GraphicsWindowProc* wnd_proc ){ + //check for type first + //nassertv(wnd_proc->get_type() == WinGraphicsWindowProc::get_class_type()); + nassertv(wnd_proc != NULL); + _window_proc_classes.insert( (GraphicsWindowProc*)wnd_proc ); +} +void WinGraphicsWindow::remove_window_proc( const GraphicsWindowProc* wnd_proc ){ + //check to see if we have the right type of object + //nassertv(wnd_proc->get_type() == WinGraphicsWindowProc::get_class_type()); + nassertv(wnd_proc != NULL); + _window_proc_classes.erase( (GraphicsWindowProc*)wnd_proc ); +} +void WinGraphicsWindow::clear_window_procs(){ + _window_proc_classes.clear(); +} + +bool WinGraphicsWindow::supports_window_procs() const{ + return true; +} + diff --git a/panda/src/windisplay/winGraphicsWindow.h b/panda/src/windisplay/winGraphicsWindow.h index 1428826fa4..6fba754548 100644 --- a/panda/src/windisplay/winGraphicsWindow.h +++ b/panda/src/windisplay/winGraphicsWindow.h @@ -17,6 +17,7 @@ #include "pandabase.h" #include "graphicsWindow.h" +#include "graphicsWindowProc.h" #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif @@ -178,6 +179,17 @@ private: bool _lalt_down; bool _ralt_down; + // following adds support platform specfic window processing + // functions. + typedef pset WinProcClasses; + WinProcClasses _window_proc_classes; + +PUBLISHED: + virtual void add_window_proc( const GraphicsWindowProc* wnd_proc_object ); + virtual void remove_window_proc( const GraphicsWindowProc* wnd_proc_object ); + virtual void clear_window_procs(); + virtual bool supports_window_procs() const; + private: // We need this map to support per-window calls to window_proc(). typedef map WindowHandles; diff --git a/panda/src/windisplay/windisplay_composite1.cxx b/panda/src/windisplay/windisplay_composite1.cxx index 3ad432da55..b07685fef4 100644 --- a/panda/src/windisplay/windisplay_composite1.cxx +++ b/panda/src/windisplay/windisplay_composite1.cxx @@ -1,3 +1,3 @@ #include "config_windisplay.cxx" #include "winGraphicsWindow.cxx" -#include "winGraphicsPipe.cxx" +#include "winGraphicsPipe.cxx" \ No newline at end of file