Newsgroup: it.comp.programmare.win32
Titolo: Link x l' email...

Come si fa a inserire in una dlg, un link x l'email????
Voglio inserire il mio indirizzo in una dlg e far in modo che cliccandoci
sopra si apra una dlg vuota di Outlook Express, in cui sono già settati,
oggetto ed email address del destinatario....
E un altra cosa: se nel programma lavoro con un handle ad un file (uso
CFile) e dopo averlo inizializzato all'avvio dell app, posso usarlo ogni
volta che mi serve, senza dover linkare di nuovo il file?? ( cioe, l'handle
del file cambia??? )
Grazie 1000 a tutti per l'aiuto!
Jorge

 Come si fa a inserire in una dlg, un link x l'email????
Forse esiste un componente gia` fatto fra quelli del VB, comunque io l'ho
sempre fatto a mano. Devi intercettare WM_MOUSEMOVE per cambiare il cursore
quando passi sopra all'etichetta (per farlo diventare una manina) e
WM_CTLCOLORSTATIC per cambiare il font, rendendolo sottolineato e blu (o del
colore che desideri). Infine devi intercettare WM_LBUTTONUP per eseguire
l'URL, basta usare ShellExecute.
---
Bye! Lorenzo Lutti
http://antani.virtualave.net/

 file?? ( cioe, l'handle del file cambia??? )
Non ho capito il problema, comunque se lo inserisci in questo messaggio 
lo vedranno solo quelli interessati a link ed e-mail... è meglio che 
posti un nuovo messaggio con solo questa domanda (magari con un po' di 
codice).
P.S. ti si è incastrato tasto con il punto di domanda?
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

Ciao.
Ho provato a risolvere il problema del link sia con il metodo di Valter sia
con quello di Lorenzo.
In entrambi i casi, causa la mia poca pratica, non sono riuscito ne a far
apparire la manina, ne a cambiare il colore della scritta ( la shellexecute
è l'unica che funziona invece )
Per favore, vista la mia ancora poca esperienza in prog, potete allegare uno
stralcio del codice che avete in mente per risolvere il mio problema???
Grazie tantissimo!
[x Lorenzo]
Per cambiare l'icona ho usato
::LoadImage(NULL, MAKEINTRESOURCE(OCR_HAND), IMAGE_CURSOR, 0, 0,
LR_DEFAULTSIZE);
ma già in fase di compilazione, il compilat riscontra  - "'OCR_HAND' :
undeclared identifier", -
anche se ho linkato la libreria e incluso gli header trovati sulle msdn. (la
stessa cosa succede se metto qualsiasi altro OCR_*)
Per cambiare testo, ho intercettato WM_CTLCOLORSTATIC, ma non accade nulla
quando provo a cambiar colore alla scritta (ho usato una static text senza
bordo e le funzioni
SetTextColor((HDC)wParam, RGB(0, 255, 255));
SetBkColor((HDC)wParam, RGB(0, 100, 255)); ) // i colori sono stati scelti a
caso
[x Valter]
No, niente tasto "?" sfondato... (per fortuna:-))
La colpa dei vari "???" sta nell'abitudine a conversare via mail con alcuni
amici  di università (dopo qualche tempo, mi sono abituato al loro modo di
scrivere mail) sorry, non credevo che questa cosa desse "fastidio"
(oltretutto sui vari NG che visito giornalmente è un usanza abbastanza
comune, "rafforzare" la punteggiatura ).
Effettivamente dovevo postare ogni domanda in un messaggio diverso... La
prox volta starò + attento!! :-)
Ho provato a creare un bottone "owner draw" ma all'esecuz della app, il
suddetto pulsante risulta invisibile, anche se comunque esiste, visto che
cliccando nella zona dove "dovrebbe" esserci il bottone ,la shellexecute
viene eseguita normalmente .

 [x Lorenzo]
Ti passo direttamente del codice. Scusa per le tabulazioni strippate, ma non
ho voglia di rimetterle a posto. :-)
Per quanto riguarda il cursore a manina, io ne uso uno memorizzato come
risorsa perche` anche io ebbi qualche difficolta` a usare quello "di
sistema" (ammesso che ce ne sia davvero uno).
void CAboutDlg::OnMouseMove(UINT nFlags, CPoint point)
{
 RECT rc1, rc2;
 GetDlgItem( IDS_LINK1)->GetWindowRect( &rc1);
 GetDlgItem( IDS_LINK2)->GetWindowRect( &rc2);
 ClientToScreen( &point);
 if( PtInRect( &rc1, point) || PtInRect( &rc2, point) )
  SetCursor( LoadCursor( AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDC_CURSOR1)));
 CDialog::OnMouseMove(nFlags, point);
}
void CAboutDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
 RECT rc1, rc2;
 GetDlgItem( IDS_LINK1)->GetWindowRect( &rc1);
 GetDlgItem( IDS_LINK2)->GetWindowRect( &rc2);
 ClientToScreen( &point);
 if( PtInRect( &rc1, point))
  ::ShellExecute( AfxGetMainWnd()->m_hWnd, "open",
"
http://www.iltuosito.com
", NULL, NULL, SW_SHOW);
 else if( PtInRect( &rc2, point))
  ::ShellExecute( AfxGetMainWnd()->m_hWnd, "open",
"mailto:
in...@iltuosito.com
", NULL, NULL, SW_SHOW);
 CDialog::OnLButtonDown(nFlags, point);
}
HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 HBRUSH hbr = CDialog::OnCtlColor( pDC, pWnd, nCtlColor);
 int id = ::GetWindowLong( pWnd->m_hWnd, GWL_ID);
 if( nCtlColor == CTLCOLOR_STATIC && (id==IDS_LINK1 || id==IDS_LINK2))
 {
  CFont *font = pWnd->GetFont();
  LOGFONT lf;
  font->GetObject( sizeof(LOGFONT), &lf);
  lf.lfUnderline = TRUE;
  if( m_linkFont.m_hObject == NULL)
   m_linkFont.CreateFontIndirect( &lf);
  pDC->SelectObject( &m_linkFont);
  pDC->SetTextColor( RGB(0,0,255));
  pDC->SetBkMode( TRANSPARENT);
 }
 return hbr;


Ciao Lorenzo,
innanzitutto thx per il codice che mi hai mandato.
Ho risolto tutto alla grande (all'inizio avevo problemi perche era settato
"notify" tra le properties della static text) poi appena ho eliminato
questo, tutto ha cominciato a funzionare per bene...
Ho ancora un dubbio sul codice: come mai la "manina" flickera
abbondantemente, cioe il cursore non č visualizzato stabilmente? A volte
lampeggia sensibilmente, ma forse la causa sta nel fatto che la
"OnMouseMove" viene eseguita di continuo e quindi il cursore viene
ridisegnato di continuo....
Beh, grazie tantissime per l'aiuto...
Ciao,
                                    Jorge

 stabilmente?
Strano, qui non succede... prova a caricare il cursore una volta sola in una
variabile membro della dialog anziche` a caricarlo ogni volta che entri
nella OnMouseMove().


Ciao Lorenzo,
il mio codice già faceva quello che tu mi hai proposto ( variabile di classe
inizializzata una volta per tutte all'avvio dell'app ) ma nonostante questo
la manina continua flickerare ogni tanto... vorra dire che appena finisco di
implementare quello che mi serve , debuggerò per benino questa parte di
codice....
Thx.
                                                                Jorge