[C con Clase] darle color a un formulario visual c++

Steven Davidson srd4121 en njit.edu
Dom Nov 28 15:38:37 CET 2010


Hola Wolf,

2010/11/24 wolf <wolverine_ch en hotmail.com>

> si, por cierto estoy usando la clase CFormview.... he  leido el manual pero
> la verdad nose en que parte de todo el proyecto se insertan esos codigos
> para darle color disculpe mi ignorancia ya que soy novato en MFC y pensaba
> que habia algo como en visual basic donde darle color a un form era super
> sencillo pero veo que no es asi  =/..


El curso que tenemos trata del API de MS-Windows que está escrito en C.
Microsoft agregó una implementación "más de C++" al crear un conjunto de
jerarquías de clases, que realmente encapsulan el API, llamado MFC. Por lo
tanto, puedes usar las funciones (globales) del API con las clases de MFC si
obtienes los manipuladores que usa MS-Windows en su funcionamiento. La
verdad es que muchas funciones miembro en MFC son casi iguales que las
funciones globales del API.

Usando las explicaciones de los capítulos que te dio Salvador, podemos
resolver el problema que planteaste. El formulario que tratas realmente es
un cuadro de diálogo. En el caso del color de fondo de una ventana,
procesamos el mensaje 'WM_CTLCOLOR', para el color de un cuadro estático, el
mensaje es 'WM_CTLCOLORSTATIC', y para el color de un cuadro de edición, el
mensaje es 'WM_CTLCOLOREDIT'. Para un formulario (en MFC), los
procesamientos de estos mensajes se implementan con la función miembro,
'OnCtlColor()', la cual proviene de 'CWnd'. Por ejemplo,

class CMiVistaFormulario : public CFormView
{
private:
  HBRUSH hbrFormulario, hbrStatic, hbrEdit;
  ...
};

HBRUSH CMiVistaFormulario::OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{
  // Invocamos al pariente
  HBRUSH hbr = CFormView::OnCtlColor( pDC, pWnd, nCtlColor );

  switch( nCtlColor )
  {
    case CTLCOLOR_DLG:  return hbrFormulario;
    case CTLCOLOR_STATIC:  return hbrStatic;

    case CTLCOLOR_EDIT:
    case CTLCOLOR_EDIT:
    {
      pDC->SetBkColor( RGB(0,255,0) );  // O el color que sea
      return hbrEdit;
    }
  }

  return hbr;  // Por defecto
}

También podrías establecer estos pinceles al implementar la función miembro,
'OnInitialUpdate()', que proviene de la clase 'CView'. Aquí usaríamos
'SetBkMode()' con un puntero a la clase 'CDC' que podemos conseguir
invocando 'GetDC()' de la ventana: nuestro formulario.


Espero que esto te ayude.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20101128/3e7a2629/attachment.html>


Más información sobre la lista de distribución Cconclase