Newsgroup: it.comp.programmare.win32
Titolo: Varie domandine da newbie...

Salve a tutti!
Programmando in Visual C6 mi accorgo come purtroppo la MSDN sia spesso
confusionaria! (Sono abituato ai doc di JDK :) )... Per cui mi rivolgo a
voi per quanche domandina semplice semplice:
1. Vorrei fissare un bottone come disabled run-time... Da quello che ho
notato sembra che sia un metodo di CWnd, ma (porc!) non riesco a
trovarlo! Ho provato anche con WS_DISABLED nel metodo SetButtonStyle (la
classe CButton a quanto pare non eredita nessun SetStyle...), ma non
va...
2. OnInitDialog() dovrebbe essere chiamato quando il dialog è aperto, ma
perchè a me lo fa apparentemente casualmente???
3. Visto che sono già qui: che cosa bisogna fare per cambiare il colore
di sfondo di un label?
Vi ringrazio per la collaborazione!
Bye,
Norman

Norman
Luc.


Se per label intendi il controllo Static di Windows, devi intercettare il
messaggio WM_CTLCOLOR nella dialog.
Nell'MSDN se cerchi CWnd::OnCtlColor c'è anche il seguente esempio:
// This OnCtlColor handler will change the color of a static control
// with the ID of IDC_MYSTATIC. The code assumes that the CMyDialog
// class has an initialized and created CBrush member named m_brush.
// The control will be painted with red text and a background
// color of m_brush.
HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   // Call the base class implementation first! Otherwise, it may
   // undo what we're trying to accomplish here.
   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
   // Are we painting the IDC_MYSTATIC control? We can use
   // CWnd::GetDlgCtrlID() to perform the most efficient test.
   if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)
   {
      // Set the text color to red
      pDC->SetTextColor(RGB(255, 0, 0));
      // Set the background mode for text to transparent
      // so background will show thru.
      pDC->SetBkMode(TRANSPARENT);
      // Return handle to our CBrush object
      hbr = m_brush;
   }
   return hbr;
}
Eventualmente in MFC hai la possibilità di gestire la riflessione dei
messaggi che è utile ad esempio se vuoi gestire alcuni messaggi dei
controlli non attraverso la dialog parent ma attraverso il controllo stesso.
Porlock

 HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
nono... a me serve di colorare questo testo (lo sfondo) quando il suo dialog è
displayato! Cmq, vedendo il tuo esempio ho provato una cosa del genere:
CDC *pDC;
pDC = m_cLearnBlink.GetDC();  // questo è il label
pDC->SetBkColor(RGB(255, 0, 0));
Però non vuole saperne di funzionare..
Bye,
Norman

 Però non vuole saperne di funzionare..
Infatti non può funzionare.
Il messaggio WM_CTLCOLOR serve apposta per questo.
Se l'istruzione SetBkColor la usi all'interno della funzione OnCtlColor
allora funziona.
Porlock.

 allora funziona.
Mettiamo che io devo colorare un testo quando si preme un bottone: Programmo
la gestione del colore del mio testo come nell'esempio di prima e poi mando il
segnale all'interno del metodo OnButton.. giusto?
Bye!
Norman


All'interno della gestione dell'OnButton puoi settare una variabile membro
che memorizza il colore da usare, variabile che sarà utilizzata nella
OnCtlColor.
Questa è una possibilità.
Porlock.