Browse Source

no message

Bei Yang 16 years ago
parent
commit
6a514be7d7

+ 28 - 0
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;
+}
+

+ 12 - 0
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<GraphicsWindowProc*> 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<HWND, WinGraphicsWindow *> WindowHandles;

+ 1 - 1
panda/src/windisplay/windisplay_composite1.cxx

@@ -1,3 +1,3 @@
 #include "config_windisplay.cxx"
 #include "winGraphicsWindow.cxx"
-#include "winGraphicsPipe.cxx"
+#include "winGraphicsPipe.cxx"