Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
Analizziamo nel dettaglio DJI RS 5, l'ultimo arrivato della famiglia Ronin progettato per videomaker solisti e piccoli studi. Tra tracciamento intelligente migliorato e ricarica ultra rapida, scopriamo come questo gimbal eleva la qualità delle produzioni.
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-02-2007, 23:50   #1
ArtificialBoy
Senior Member
 
Iscritto dal: Oct 2001
Città: Modugno (BA)
Messaggi: 165
[C++] Intercettare movimento cursore in un editor

Ho un editor di testo. In realtà è quello che si ottiene nell'ambiente Visual C++ 6 quando con il wizard si crea una nuova applicazione MFC single document, scegliendo la CEditView come classe base per la vista.
A questo editor ho aggiunto delle funzioni accessibili da menù per fare delle elaborazioni sui file di testo aperti. Ma questo non è importante ora.

Ciò che vorrei sapere è come poter visualizzare il numero di linea (e magari di colonna) corrispondenti alla posizione del cursore, nella status bar in basso (come nel notepad, tanto per capirci).
Diciamo che a ricavare il numero di riga dalla posizione del cursore, ci sono più o meno riuscito. Però questo calcolo dovrebbe essere fatto ad ogni spostamento del cursore, quindi mi servirebbe intercettare l'evento di spostamento del cursore. Infine dovrei mandare l'informazione alla status bar (ma penso che a questo ci penserò dopo).

Spero di essermi spiegato bene, non saprei come meglio rendere il concetto, avendo poca esperienza di programmazione.

Grazie per eventuali suggerimenti.
ArtificialBoy è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 10:21   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Provo a ti faccio sapere...comunque con MFC non ti aspettare di poter fare grandi cose
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 12:46   #3
franklar
Senior Member
 
L'Avatar di franklar
 
Iscritto dal: Oct 2000
Città: Prov. Bari
Messaggi: 1771
mi iscrivo, dato che la cosa interessa anche me
__________________
Слава Україні!
franklar è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 14:36   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Mi sa che ho trovato un altro metodo...un attimo...

Ultima modifica di cionci : 06-02-2007 alle 14:49.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 15:02   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ecco qua:

CEdit &edit = this->GetEditCtrl();

int startchr, endchr;
edit.GetSel(startchr, endchr);


edit.LineFromChar(endchr) //per la riga
endchr-edit.LineIndex(edit.LineFromChar(endchr)) //per la colonna
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 17:11   #6
ArtificialBoy
Senior Member
 
Iscritto dal: Oct 2001
Città: Modugno (BA)
Messaggi: 165
Uhm, cionci grazie. Purtroppo non è quello che mi serve. ^^

Ti spiego. Il numero di linea sono riuscito a ricavarmelo, il problema è che quando muovi il cursore con i tasti freccia, con il mouse o in altro modo, ogni volta va ricalcolato il numero di linea. Quello che mi serve appunto, come dicevo nel primo post, è un evento (appartenente al ceditview, al cedit, al cframe, al cwnd o quello che è) che risponda agli spostamenti del cursore, in modo da richiamare ogni volta le operazioni che hai detto anche tu.

Ho visto che nel cwnd ci sono metodi, tipo OnKeyUp, che forse potrebbero essere associati alla pressione dei tasti freccia, ma sinceramente non capisco bene come funzionano (per l'esatezza nn capisco gli argomenti) e non so se fanno al caso mio.

Comunque grazie ancora per esserti sbattuto. Se dovessi avere qualche altra idea sono tutto orecchie.

Ultima modifica di ArtificialBoy : 06-02-2007 alle 17:20.
ArtificialBoy è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 18:25   #7
vizzz
Senior Member
 
L'Avatar di vizzz
 
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
Codice:
void CTuaView::OnMouseMove(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    POINT pt;
    GetCursorPos( &pt );
    TRACE2("pos: x=%d - y=%d\n", pt.x, pt.y);
    CView::OnMouseMove(nFlags, point);
}
in class wizard cerca WM_MOUSEMOVE, doppio click e ti crea l'evento.
ciao
vizzz è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 18:56   #8
ArtificialBoy
Senior Member
 
Iscritto dal: Oct 2001
Città: Modugno (BA)
Messaggi: 165
Grazie anche a te per l'intervento. Purtroppo muovere il mouse sulla finestra non equivale a muovere il cursore. Dovrei clickare col sinistro per spostare il cursore altrove. Credo ci sia anche l'evento per il click sinistro ma non ne capisco gli arogmenti come per OnKeyUp.
Inoltre dovrei comunque implementare altri eventi legati alla frecce direzionali o alla pressione del tasto Invio che manda a capo e sposta il cursore o anche dei tasti Home e Fine.
Magari però esiste un modo più semplcie di tutto questo e nella mia ignoranza non so vederlo. °°
ArtificialBoy è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 19:03   #9
vizzz
Senior Member
 
L'Avatar di vizzz
 
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
sono un po fuso ho letto cursore e ho pensato al mouse
cerco ancora...
vizzz è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 19:12   #10
vizzz
Senior Member
 
L'Avatar di vizzz
 
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
ok, ho la mente lucida ora:

Codice:
void CTuaView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default

    if (nChar == VK_PRIOR)
        TRACE0("pgup\n");
    else if (nChar == VK_NEXT)
        TRACE0("pgdown\n");
    else if (nChar == VK_UP)
        TRACE0("arrowup\n");
    else if (nChar == VK_DOWN)
        TRACE0("arrowdown\n");
    else if (nChar == VK_RETURN)
        TRACE0("return\n");
	
	CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
vizzz è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 19:17   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Tanto vale aggiornarlo per ogni tasto rilasciato e per ogni click.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 19:41   #12
ArtificialBoy
Senior Member
 
Iscritto dal: Oct 2001
Città: Modugno (BA)
Messaggi: 165
Uh, ecco, allora funziona così quell'evento. °° A guardarlo così codificato mi pare debba essere quello che mi serve, dunque domani proverò a implementarlo.

Grazie.


Se tutto va bene, poi magari vi chiedo come mandare le info alla status bar. Ovviamente prima ci proverò da solo.
ArtificialBoy è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 19:54   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Mi sa che ti serve OnKeyUp anche perchè altrimenti rilevi il valore prima dell'inserimento del carattere
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 19:59   #14
vizzz
Senior Member
 
L'Avatar di vizzz
 
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
Quote:
Originariamente inviato da cionci
Mi sa che ti serve OnKeyUp anche perchè altrimenti rilevi il valore prima dell'inserimento del carattere
giusto
per la status bar guardati in giro, esistono molti esempi in rete
i miei siti di riferimento sono: codeproject e codeguru

edit:
http://msdn2.microsoft.com/en-us/lib...y6(VS.80).aspx
per i parametri della funzione onkeyup

Ultima modifica di vizzz : 06-02-2007 alle 20:08.
vizzz è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 20:09   #15
ArtificialBoy
Senior Member
 
Iscritto dal: Oct 2001
Città: Modugno (BA)
Messaggi: 165
Sì, avevo pensato anche io di usare il KeyUp.

Terrò presente quei due siti. Grazie. E comunque aggiornerò sui risultati.
ArtificialBoy è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 20:51   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Comunque non basta quell'evento e nemmeno quelli per il mouse a meno di gestire una combinazione di eventi...in ogni caso ci deve essere qualcos'altro...un messaggio magari che viene lanciato per qualsiasi modifica fatta nell'edit box...compreso il cambiamento di posizione del cursore...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 20:56   #17
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Allora...il migliore è:

ON_CONTROL_REFLECT_EX(EN_CHANGE, OnEditChange)

In combinazione con WM_KEYUP per prendere i tasti freccia...

Il problema ora è il mouse...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2007, 21:03   #18
ArtificialBoy
Senior Member
 
Iscritto dal: Oct 2001
Città: Modugno (BA)
Messaggi: 165
Effettivamente se io faccio un paste da menù o da tasto destro dle mouse, non intercetterebbe lo spostamento. Ora guardo quest'altro evento che mi dici.
Comunque, prima di chiedere qui, non riuscivo a capire come funzionasse l'OnKeyUp perché non ci pensavo che venisse chiamato dal framework e quindi i parametri non dovessi passarli io. Poi vedendo il codice scritto, ho capito quanto ero fesso ed infatti i parametri non mi serve affatto usarli.


EDIT: cmq a me sembra strano che nn esista un metodo un po' più rapido per fare il tutto °°

Ultima modifica di ArtificialBoy : 07-02-2007 alle 15:24.
ArtificialBoy è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2007, 15:28   #19
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
L'evento che ti ho detto serve anche per catturare le ripetizioni dei tasti...se tenevi premuto un tasto WM_KEYUP non aggiornava il conteggio.

Per aggiornare la status bar ho aggiunto un indicator e poi con un messaggio utente (con costante WM_USER + 1) ho usato la SendMessage per notificarlo dal CEditView al CFrameWnd.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2007, 16:14   #20
ArtificialBoy
Senior Member
 
Iscritto dal: Oct 2001
Città: Modugno (BA)
Messaggi: 165
Quote:
Originariamente inviato da cionci
Allora...il migliore è:

ON_CONTROL_REFLECT_EX(EN_CHANGE, OnEditChange)

In combinazione con WM_KEYUP per prendere i tasti freccia...

Il problema ora è il mouse...

Sinceramente non ho capito bene come funziona sta cosa dei messaggi riflessi. °°
Effettivamente in questo modo mi intercetta eventuali paste da menù e ripetizioni di tasti, solo che non mi chiama più il SaveModified() quando chiudo l'editor o anche solo i ldocumento. °°

Ultima modifica di ArtificialBoy : 07-02-2007 alle 16:16.
ArtificialBoy è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
LIGO-Virgo-KAGRA: nuovo studio sulle ond...
Usare il traffico urbano come motore per...
Sony brevetta un controller PlayStation ...
Firefox aggiunge il 'kill switch' per el...
TV OLED 2026 e Odyssey G6: Samsung abbra...
Stranger Things: Storie dal 1985 debutta...
Colpo di scena in Qualcomm: se ne va il ...
I MacBook Air M4 tornano in sconto e si ...
Buone notizie per l'Osservatorio Paranal...
Nintendo Switch è diventata la co...
SplitHYPE: come funziona il nuovo strume...
Questo robot aspirapolvere top di gamma ...
Non solo fisica delle particelle: il Lar...
Samsung Galaxy S26 Ultra si mostra in un...
DJI Neo a soli 149€ su Amazon: il mini d...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:15.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v