Browse Source

Mausereignisse werden von Auswahlboxen auch verarbeitet wenn sie nicht in den containern sind

Kolja Strohm 5 years ago
parent
commit
2738e5b3b6
4 changed files with 37 additions and 45 deletions
  1. 7 0
      AuswahlBox.cpp
  2. 23 43
      Fenster.cpp
  3. 2 0
      MausEreignis.h
  4. 5 2
      Tabelle.cpp

+ 7 - 0
AuswahlBox.cpp

@@ -868,6 +868,13 @@ void AuswahlBox::doMausEreignis( MausEreignis &me ) // Maus
         ausgeklappt = 0;
         return;
     }
+    if( me.id != me.rid )
+    {
+        me.id = me.rid;
+        me.mx = me.rmx;
+        me.my = me.rmy;
+        me.verarbeitet = 0;
+    }
     bool removeFokus = 0;
     bool nmakc = me.verarbeitet == 0;
     if( me.verarbeitet || !( me.mx >= pos.x && me.mx <= pos.x + gr.x && me.my >= pos.y && me.my <= pos.y + gr.y + ausklappHeight ) )

+ 23 - 43
Fenster.cpp

@@ -85,9 +85,7 @@ LRESULT CALLBACK Framework::WindowProc( HWND hwnd, UINT message, WPARAM wparam,
         if( 1 )
         {
             MausStand[ M_Links ] = 1;
-            MausEreignis me = { ME_PLinks, (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0, 0, 0 };
-            me.rmx = me.mx;
-            me.rmy = me.my;
+            MausEreignis me = { ME_PLinks, ME_PLinks, (int)LOWORD( lparam ), (int)HIWORD( lparam ), (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0 };
             WFensterA.sendMausMessage( hwnd, me );
             break;
         }
@@ -95,9 +93,7 @@ LRESULT CALLBACK Framework::WindowProc( HWND hwnd, UINT message, WPARAM wparam,
         if( 1 )
         {
             MausStand[ M_Rechts ] = 1;
-            MausEreignis me = { ME_PRechts, (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0, 0, 0 };
-            me.rmx = me.mx;
-            me.rmy = me.my;
+            MausEreignis me = { ME_PRechts, ME_PLinks, (int)LOWORD( lparam ), (int)HIWORD( lparam ), (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0 };
             WFensterA.sendMausMessage( hwnd, me );
             break;
         }
@@ -105,9 +101,7 @@ LRESULT CALLBACK Framework::WindowProc( HWND hwnd, UINT message, WPARAM wparam,
         if( 1 )
         {
             MausStand[ M_Mitte ] = 1;
-            MausEreignis me = { ME_PMitte, (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0, 0, 0 };
-            me.rmx = me.mx;
-            me.rmy = me.my;
+            MausEreignis me = { ME_PMitte, ME_PMitte, (int)LOWORD( lparam ), (int)HIWORD( lparam ), (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0 };
             WFensterA.sendMausMessage( hwnd, me );
             break;
         }
@@ -115,9 +109,7 @@ LRESULT CALLBACK Framework::WindowProc( HWND hwnd, UINT message, WPARAM wparam,
         if( 1 )
         {
             MausStand[ M_Links ] = 0;
-            MausEreignis me = { ME_RLinks, (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0, 0, 0 };
-            me.rmx = me.mx;
-            me.rmy = me.my;
+            MausEreignis me = { ME_RLinks, ME_RLinks, (int)LOWORD( lparam ), (int)HIWORD( lparam ), (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0 };
             WFensterA.sendMausMessage( hwnd, me );
             break;
         }
@@ -125,9 +117,7 @@ LRESULT CALLBACK Framework::WindowProc( HWND hwnd, UINT message, WPARAM wparam,
         if( 1 )
         {
             MausStand[ M_Rechts ] = 0;
-            MausEreignis me = { ME_RRechts, (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0, 0, 0 };
-            me.rmx = me.mx;
-            me.rmy = me.my;
+            MausEreignis me = { ME_RRechts, ME_RRechts, (int)LOWORD( lparam ), (int)HIWORD( lparam ), (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0 };
             WFensterA.sendMausMessage( hwnd, me );
             break;
         }
@@ -135,36 +125,28 @@ LRESULT CALLBACK Framework::WindowProc( HWND hwnd, UINT message, WPARAM wparam,
         if( 1 )
         {
             MausStand[ M_Mitte ] = 0;
-            MausEreignis me = { ME_RMitte, (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0, 0, 0 };
-            me.rmx = me.mx;
-            me.rmy = me.my;
+            MausEreignis me = { ME_RMitte, ME_RMitte, (int)LOWORD( lparam ), (int)HIWORD( lparam ), (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0 };
             WFensterA.sendMausMessage( hwnd, me );
             break;
         }
     case WM_LBUTTONDBLCLK: // Linksdoppelklick
         if( 1 )
         {
-            MausEreignis me = { ME_DKLinks, (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0, 0, 0 };
-            me.rmx = me.mx;
-            me.rmy = me.my;
+            MausEreignis me = { ME_DKLinks, ME_DKLinks, (int)LOWORD( lparam ), (int)HIWORD( lparam ), (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0 };
             WFensterA.sendMausMessage( hwnd, me );
             break;
         }
     case WM_RBUTTONDBLCLK: // Rechtsdoppelklick
         if( 1 )
         {
-            MausEreignis me = { ME_DKRechts, (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0, 0, 0 };
-            me.rmx = me.mx;
-            me.rmy = me.my;
+            MausEreignis me = { ME_DKRechts, ME_DKRechts, (int)LOWORD( lparam ), (int)HIWORD( lparam ), (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0 };
             WFensterA.sendMausMessage( hwnd, me );
             break;
         }
     case WM_MBUTTONDBLCLK: // Mitteldoppelklick
         if( 1 )
         {
-            MausEreignis me = { ME_DKMitte, (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0, 0, 0 };
-            me.rmx = me.mx;
-            me.rmy = me.my;
+            MausEreignis me = { ME_DKMitte, ME_DKMitte, (int)LOWORD( lparam ), (int)HIWORD( lparam ), (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0 };
             WFensterA.sendMausMessage( hwnd, me );
             break;
         }
@@ -172,9 +154,7 @@ LRESULT CALLBACK Framework::WindowProc( HWND hwnd, UINT message, WPARAM wparam,
         if( 1 )
         {
             MausTrack = 1;
-            MausEreignis me = { ME_Betritt, (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0, 0, 0 };
-            me.rmx = me.mx;
-            me.rmy = me.my;
+            MausEreignis me = { ME_Betritt, ME_Betritt, (int)LOWORD( lparam ), (int)HIWORD( lparam ), (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0 };
             WFensterA.sendMausMessage( hwnd, me );
             break;
         }
@@ -182,9 +162,7 @@ LRESULT CALLBACK Framework::WindowProc( HWND hwnd, UINT message, WPARAM wparam,
         if( 1 )
         {
             MausTrack = 1;
-            MausEreignis me = { ME_Leaves, (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0, 0, 0 };
-            me.rmx = me.mx;
-            me.rmy = me.my;
+            MausEreignis me = { ME_Leaves, ME_Leaves, (int)LOWORD( lparam ), (int)HIWORD( lparam ), (int)LOWORD( lparam ), (int)HIWORD( lparam ), 0 };
             WFensterA.sendMausMessage( hwnd, me );
             break;
         }
@@ -205,7 +183,7 @@ LRESULT CALLBACK Framework::WindowProc( HWND hwnd, UINT message, WPARAM wparam,
                 TrackMouseEvent( &lptme );
                 MausTrack = 0;
             }
-            MausEreignis me = { ME_Bewegung, mausPos.x, mausPos.y, 0, 0, 0 };
+            MausEreignis me = { ME_Bewegung, ME_Bewegung, mausPos.x, mausPos.y, mausPos.x, mausPos.y, 0 };
             me.rmx = me.mx;
             me.rmy = me.my;
             WFensterA.sendMausMessage( hwnd, me );
@@ -214,13 +192,12 @@ LRESULT CALLBACK Framework::WindowProc( HWND hwnd, UINT message, WPARAM wparam,
     case WM_MOUSEWHEEL: // Maus scroll
         if( 1 )
         {
-            MausEreignis me = { 0, mausPos.x, mausPos.y, 0, 0, 0 };
+            MausEreignis me = { 0, 0, mausPos.x, mausPos.y, mausPos.x, mausPos.y, 0 };
             if( (int)(short)HIWORD( wparam ) < 0 )
                 me.id = !getTastenStand( T_Shift ) ? ME_DScroll : ME_RScroll;
             else
                 me.id = !getTastenStand( T_Shift ) ? ME_UScroll : ME_LScroll;
-            me.rmx = me.mx;
-            me.rmy = me.my;
+            me.rid = me.id;
             WFensterA.sendMausMessage( hwnd, me );
             break;
         }
@@ -1906,13 +1883,16 @@ void Fenster::doMausEreignis( MausEreignis & me )
                 }
                 else
                 {
-                    MausEreignis me;
-                    me.id = ME_Leaves;
-                    me.mx = -1;
-                    me.my = -1;
-                    me.verarbeitet = 1;
+                    MausEreignis me2;
+                    me2.id = ME_Leaves;
+                    me2.rid = me.id;
+                    me2.mx = -1;
+                    me2.my = -1;
+                    me2.rmx = me.mx;
+                    me2.rmy = me.my;
+                    me2.verarbeitet = 1;
                     for( int i = members->getEintragAnzahl() - 1; i >= 0; i-- )
-                        members->z( i )->doMausEreignis( me );
+                        members->z( i )->doMausEreignis( me2 );
                 }
                 me.mx += rbr;
                 me.my += rbr + th;

+ 2 - 0
MausEreignis.h

@@ -31,6 +31,8 @@ namespace Framework
     {
         // Art der Eingabe
         int id;
+        // die originale id des maus ereignisses
+        int rid;
         // X koordinate auf dem Bildschirm relativ zur Zeichnungposition
         int mx;
         // Y Koordinate auf dem Bildschirm relativ zur Zeichnungposition

+ 5 - 2
Tabelle.cpp

@@ -998,8 +998,11 @@ void ObjTabelle::doMausEreignis( MausEreignis &me ) // verarbeitet Nachrichten
                 me.verarbeitet = 1;
             MausEreignis me2;
             me2.id = ME_Leaves;
-            me2.mx = me.mx;
-            me2.my = me.my;
+            me2.rid = me.id;
+            me2.mx = -1;
+            me2.my = -1;
+            me2.rmx = me.mx;
+            me2.rmy = me.my;
             me2.verarbeitet = 1;
             for( int i = 0; i < zeilenAnzahl; ++i )
             {