popup window mit maus verschieben ... wie das flackern weg bekommen?



  • hi

    EDIT 4.4.2005: habe unten einen post mit einem weitern problem, welches aufgetaucht ist(gerade eben gepostet)!!

    <orginal>

    ich habe ein popupfenster, welches ich mit gedrückter rechter maustaste verschieben möchte

    bisher tue ich das so:

    case WM_MBUTTONDOWN:
                              xPos = MAKEPOINTS((reinterpret_cast<MSGFILTER *> (lParam))->lParam).x; 
                              yPos = MAKEPOINTS((reinterpret_cast<MSGFILTER *> (lParam))->lParam).y; 
                              break;
                        case WM_MOUSEMOVE:
                              if((reinterpret_cast<MSGFILTER *> (lParam))->wParam & MK_MBUTTON)
                              {
                                MoveWindow(hWnd, 400+MAKEPOINTS((reinterpret_cast<MSGFILTER *> (lParam))->lParam).x-xPos,
                                                 400+MAKEPOINTS((reinterpret_cast<MSGFILTER *> (lParam))->lParam).y-yPos,600,300,TRUE);
                              }
                              break;
                        case WM_MBUTTONUP:
                              break;
    

    aber das flackert fürchterlich und außerdem scheint sich die maus "schneller" zu bewegen, als das verschieben(die maus wandert aus dem fenster raus)
    eigentlich sollte die relative position maus-fenster gleich bleiben

    wie kann ich das verbessern/abstellen/erreichen??

    danke + mfg

    error



  • musst du es beim verschieben neuzeichen? (letzter param von movewindow)
    reicht es nicht nach dem verschieben?



  • MSGFILTER? 🙄 🙄 Was hat das da zu suchen?



  • MSGFILTER: weil ich dadrin nen formatfüllendes rich edit habe ...

    neuzeichnen: hm, habs rausgenommen gehabt, und dann dachte ich mir mache ich nen update bei buttonup, aber irgend wie hat der dann nicht alles so gemacht ... der ließ restmüll stehen usw.
    und man konnte nicht so richtig erkennen wie er eigentlich verschiebt ...

    zumindest weiß ich, warum die maus rausrennt ... ich mus xPos/yPos anpassen bzw. die verschiebung anders berechnen ...

    mfg

    edit2: ok jetzt funktioniert es(und zwar ohne flackern und ohne zu schneller maus)

    case WM_MBUTTONDOWN:
                              xPos = LOWORD((reinterpret_cast<MSGFILTER *> (lParam))->lParam); 
                              yPos = HIWORD((reinterpret_cast<MSGFILTER *> (lParam))->lParam);  
                              break;
                        case WM_MOUSEMOVE:
                              if((reinterpret_cast<MSGFILTER *> (lParam))->wParam & MK_MBUTTON)
                              {
                                x=x+LOWORD((reinterpret_cast<MSGFILTER *> (lParam))->lParam)-xPos;
                                y=y+HIWORD((reinterpret_cast<MSGFILTER *> (lParam))->lParam)-yPos;
    
                                MoveWindow(hWnd, x, y,600,300,TRUE);
                              }
                              break;
    

    wobei x und y die anfangsposition des fensters sind
    und als wesentlicher unterschied, habe ich LOWORD und HIWORD statt MAKEPOINTS genommen ...

    danke + cu

    error



  • habe leider ein problem festgestellt

    erstmal der codeausschnitt(jetzt soll das verschieben mit der mittleren maustste passieren ... soolte aber eine rolle siele, das problem taucht mit dem code oben auch auf)

    case WM_MBUTTONDOWN:
                              deltax= LOWORD((reinterpret_cast<MSGFILTER *> (lParam))->lParam); 
                              deltay= HIWORD((reinterpret_cast<MSGFILTER *> (lParam))->lParam);  
                              return 0;
                        case WM_MOUSEMOVE:
                              if((reinterpret_cast<MSGFILTER *> (lParam))->wParam & MK_MBUTTON)
                              {
                                posx+=LOWORD((reinterpret_cast<MSGFILTER *> (lParam))->lParam)-deltax;
                                posy+=HIWORD((reinterpret_cast<MSGFILTER *> (lParam))->lParam)-deltay;
    
                                MoveWindow(hWnd, posx, posy, sizex, sizey, TRUE);
                              }
                              return 0;
                        case WM_MBUTTONUP:
                              return 0;
    

    also xpos/ypos sind die anfangs koordinaten des zu verschiebenden fensters(das ganz programmfenster)

    sizex/sizey sind einfach die größen dieses fenster

    PROBLEM:

    wenn ich die maus etwas schneller bewege(nach links - nach rechts ist irgend wie egal, jedenfalls hbe ich es da noch nicht reproduzieren können),
    dann passiert etwas komisches:

    das fenster ist plötzlich verschwunden udn wenn ich mir posx angucke ist da ein sehr großer wert drin

    wie auch immer das geht, das fenster verschiebt sich ganz einfach spontan mit einem ruck dahin)

    wie kann das passieren und viel wichtiger, wie kann ich das vermeiden?
    irgend wie scheint der einen bereichsüberlauf zu haben?? aber warum?

    danke für hilfe

    mfg

    error



  • Irgendwie ziemlich umständlich. Ich verschiebe Fenster mit der Maustaste immer so:

    { move the window with the left button down }
        WM_LBUTTONDOWN:
          begin
            SetCursor(LoadCursor(0, IDC_SIZEALL));
            SendMessage(hDlg, WM_NCLBUTTONDOWN, HTCAPTION, lParam);
          end;
    


  • danke

    leider funktioniert das ja nur mit der linken maustaste 😞

    da ich aber ein richedit als inhalt des popup habe, kann ich dann nicht mehr markieren(mit der maus)

    im moment habe ich das gelöst, indem zusätzlich Strg gedrückt sein muss, wenn man verschieben will, aber zumindest läuft mir das doofe ding jetzt nicht raus

    mfg

    error


Log in to reply