CSplitterWnd - In welchem befindet sich die Maus?



  • Hmm nuja... hab auch mal ne Frage :p

    Also:
    Ich hab in der CMainFrame nen CSplitterWnd angelegt der mir das Fenster in 4 Teile unterteilt... soweit so gut...

    Jetzt brauch ich allerdings eine Auskunft darüber, wie ich herrausfinden kann, über welchem Splitter es sich befindet... da ich, wenn die Maus über einem der Splitter ist, die Postion innerhalb des Splitters von der Maus brauche...

    Naja... wenns jemand net verstanden hat, was meine Frage ist... sagt es 😃



  • Hmm, mit GetActivePane() findest du den gerade aktiven Bereich deines Splitters.

    Wenn das nicht hilft, bleibt noch ChildWindowFromPoint() (bin mir nicht sicher, ob das mit Splitter-Windows funktioniert) oder die manuelle Suche:

    for(x=0;x<4;++x)
    {
      CWnd*w=GetPane(x%2,x/2);
      CRect r;w->GetWindowRect(r);
      if(r.PtInRect(mauspos))
      {
        target=x;
        break;
      }
    }
    


  • Hmm ersmal danke CStoll... das ist schonmal nen ansatzt...

    also, CWnd* ChildWindowFromPoint( POINT point, UINT nFlags ) const; sollte funktionieren...

    CPoint point;
    char cText[128];
    
    GetCursorPos(&point);
    CWnd* pWnd = ChildWindowFromPoint(point, CWP_ALL);
    pWnd->GetCursorPos(&point);
    
    sprintf(cText, "%d, %d", point.x, point.y);
    

    Aber das zweite GetCursorPos wird so net funzen, da es ja keine Funktion von CWnd ist... aber wie soll ich sonnst, nachdem ich nen Pointer auf das Window hab, in dem sich der Cursor befindet, genau herraus bekommen, wo er sich dort befindet? 😮



  • ScreenToClient() rechnet Bildschirmkoordinaten (bezogen auf Monitor) in Clientkoordinaten (bezogen auf eigenes Fenster) um.

    (btw solltest du die Methode auch vor dem ChildWindowFromPoint()-Aufruf anwenden - GetCursorPos() liefert Bildschirmkoordinaten, ChildWindowFromPoint() erwartet Clientkoordinaten)



  • CPoint point;
    char cText[128];
    
    GetCursorPos(&point);
    ScreenToClient(&point);
    CWnd* pWnd = ChildWindowFromPoint(point, CWP_ALL);
    pWnd->ScreenToClient(&point);
    GetCursorPos(&point);
    
    sprintf(cText, "%d, %d", point.x, point.y);
    

    😃 Meinst de so? Das Problem ist nur das der CWnd Pointer dann ins Nirvana zeigt 😉


Anmelden zum Antworten