Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    VC++6.0. Posizionamento delle dialog nei pressi del cursore.

    Salve, come da titolo...
    Ho un'applicazione in VC++6.0. Premendo il tasto dx del mouse faccio comparire delle dialog di tipo modal. Vorrei che le dialog comparissero in prossimità del cursore.

    Dalla OnRButtonDown(UINT nFlags, CPoint point) ricavo la posizione del cursore.
    Quando però uso la variabile point in:

    SetWindowPos(NULL, point.x, point.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
    (nella ::OnInitDialog() )

    la dialog non sempre mi appare nei pressi del cursore.
    C'è da fare qualche ulteriore passaggio per poter usare le coordinate di point
    al fine di posizionare correttamente la dialog?


  2. #2
    Il punto fornito dalla OnRButtonDown se non sbaglio è in coordinate relative all'area client della finestra, mentre la SetWindowPos vuole coordinate relative all'area dello schermo. Per effettuare la conversione usa il metodo ClientToScreen dell'oggetto-finestra tramite il quale ricevi la notifica OnRButtonDown.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    L'uso brutale della funzione non ha sortito l'effetto sperato... La dialog se ne va un pò per i fatti suoi, ma questo solo in verticale perchè in orizzontale segue il posizionamento del cursore...

  4. #4
    Quando accadono cose di questo genere due volte su tre è perché uno ha scritto "point.x" sia per la x che per la y.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Controllato, nessun errore di battitura: point.x e point.y...

  6. #6

  7. #7
    Penso di aver trovato la soluzione:

    CWnd* pWndC = AfxGetMainWnd();

    CRect rectC;
    pWndC->GetWindowRect(&rectC);

    SetWindowPos(NULL, point.x, (rectC.bottom-point.y), 0, 0, SWP_NOSIZE | SWP_NOZORDER);

    Dove point lo ottengo dalla:
    OnRButtonDown(UINT nFlags, CPoint point)

    In questo modo, dalle prove effettuate, la dialog appare vicino al cursore.
    Grazie a tutti


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.