PDA

Visualizza la versione completa : [C++] Intercettare l'evento Drag del Form (CLR)


lordjoseph
30-11-2010, 09:47
Ciao,
qualcuno sa come poter associare un'azione all'evento Drag del form?
Ad esempio se dovessi visualizzare un messaggio non appena viene agganciato il form tramite la barra come posso fare?

Grazie

tas
30-11-2010, 13:55
Presumo che il linguaggio dovrebbe essere C++ perché lo hai detto nell'altro thread, ma non tutti gli utenti si prendono la briga di cercare altri indizi nelle tue precedenti discussioni.
Lo scopo del forum non è solo quello di farsi aiutare da qualcuno (in questo caso sarebbe difficile visto che non specifichi il linguaggio) ma anche di aiuto ad altri utenti che dovessero trovare gli stessi tuoi problemi.
Quando posti una richiesta sul forum dovresti provare a metterti nei panni di chi ti vuole aiutare e chiederti:

hai posto la domanda in modo sufficientemente chiaro?
hai fornito tutte le informazioni necessarie? (linguaggio, versione, tecnologia, ecc.)
hai descritto i tentativi per risolvere il problema da solo?

Questa vuole solo essere una critica costruttiva, perché domande del genere difficilmente riceveranno una risposta esauriente (e alla fine chi ci perde sei tu), oltre che risultare inutili relativamente all'aspetto sociale del forum.

lordjoseph
30-11-2010, 16:26
Ehm scusa hai ragione!
L'ho scritto un po' di fretta pensando di averlo già specificato nel vecchio post ma giustamente nessuno può saperlo.
Tra l'altro forse sarebbe meglio cambiare il titolo della discussione con "Gestire l'evento Drag di un form".
Comunque come specificato nell'altro post uso sia Visual Studio 2010 che 2008 e sto lavorando su un progetto di tipo windows form application in C++
Ho provato ad usare gli eventi DragDrop, DragOver (generandoli dalla finestra eventi del form interessato e inserendo poi all'interno l'azione voluta) etc.... ma credo mi manchi qualche nozione fondamentale per farli funzionare....
(In realtà sto provando a sospendere un thread del progetto quando il form viene trascinato poichè spostando la finestra al di "fuori dello schermo" viene lanciata la seguente eccezione : System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory has been corrupted.
Probabilmente perchè successivamente viene eseguito una specie di refresh degli oggetti e il thread creato da me entra in conflitto col thread principale - se non riesco a risolvere così aprirò un'altra richiesta riguardo a questo problema)

Grazie

tas
30-11-2010, 16:34
Sei sicuro che ti serva gestire gli eventi DragDrop e DragOver? Questi eventi si usano per gestire il trascinamento di oggetti all'interno del form o del controllo (per esempio aprire un file trascinandolo sopra il form). Tu cosa vuoi fare esattamente? Nel primo post sembrava tu volessi gestire un evento quando il form viene spostato, ho capito male?

lordjoseph
30-11-2010, 18:11
Avevi capito bene tu, sono io che ho sbagliato ad usarli!
Come faccio a rilevare lo spostamento del form?

tas
30-11-2010, 18:49
Usa l'evento Move. :ciauz:

lordjoseph
30-11-2010, 22:33
Ok scusa mi son dimenticato un altro dettaglio....
Se io volessi associare un'azione all'inizio del trascinamento del form e un'altra quando viene rilasciato ?

tas
01-12-2010, 00:11
Prova ad usare l'evento LocationChanged.

VB.NET non espone gli eventi mousedown e mouseup sulla barra del titolo, probabilmente perché sono considerati di scarsa importanza nella programmazione classica. Per intercettarli occorre scomodare l'evento WndProc, in questo modo:

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Console.WriteLine(m.ToString)
MyBase.WndProc(m)
End Sub
La funzione WndProc è molto conosciuta a chi ha avuto il 'piacere' di programmare in Win32 nativo, rappresenta il punto di ingresso e smistamento di tutti i messaggi gestiti dalla finestra. Ogni messaggio è composto essenzialmente da quattro valori:

Msg: contiene l'identificativo del messaggio
Hwnd: contiene il handle della finestra alla quale è destinato il messaggio
LParam e WParam: parametri opzionali del messaggio

L'elenco dei messaggi lo trovi qui (http://msdn.microsoft.com/en-us/library/ms644927.aspx#system_defined), mentre l'elenco specifico per il mouse qui (http://msdn.microsoft.com/en-us/library/ff468877.aspx).

lordjoseph
01-12-2010, 12:49
Grazie della tempestività!
Appena provo ti faccio sapere!
(Tu per caso hai dimestichezza con il multithreading ? Dovrei chiederti un parere... devo aprire un altra discussione? )

tas
01-12-2010, 13:25
Originariamente inviato da lordjoseph
(Tu per caso hai dimestichezza con il multithreading ? Dovrei chiederti un parere... devo aprire un altra discussione? )
Si, apri un nuovo thread!

Loading