Crear controles en ejecucion

30/04/2004 - 21:06 por Jorwin Cumare | Informe spam
Hola como estam colegas todos,
Mi pregunta es la siguiente no soy muy experto en c++ pero
creo que me defiendo ahora bien me gustaria si existe
alguna forma de crear objetos en tienpo de ejecucion si
existe como seria. desde ya muchas gracias y espero me
puedan ayudar.


Jorwin Cumare.
Analista de Sistema

Preguntas similare

Leer las respuestas

#1 Cholo Lennon
30/04/2004 - 21:42 | Informe spam
¿Controles u objetos? ¿Que biblioteca usas (MFC,WTL,etc)?

Saludos
Cholo Lennon
Salta, ARG
Respuesta Responder a este mensaje
#2 Anonimo
30/04/2004 - 22:02 | Informe spam
es una pequeña aplicacion que estoy haciendo con MFC(exe).
lo que quiero es agregar una cantidad determinada de
Controles CommandButton.
Respuesta Responder a este mensaje
#3 Cholo Lennon
01/05/2004 - 04:58 | Informe spam
Debes crearlos con CButton::Create. Asegurte de asignarles un ID único a
cada uno para poder controlar sus notificaciones. En vez de usar una lista
STL de punteros (y tener que liberar los mismos manualmente en la función
DestruirBotones) puedes optar por una lista STL de un contenedor de punteros
como el de boost shared_ptr (www.boost.org) (y ojo, no utilices auto_ptr de
STL porque no sirve para contenedores STL como list).

// CDynControlsDlg.h
#include <list>
class CDynControlsDlg : public CDialog
{
...

// Implementation
protected:
typedef std::list<CButton*> TButtonList;
TButtonList m_lstButtons;
...

};


// CDynControlsDlg.cpp

BEGIN_MESSAGE_MAP(CDynControlsDlg, CDialog)
//{{AFX_MSG_MAP(CDynControlsDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP

// Establece el rango de IDs que utilizaras para tus botones
// De este manera podrás controlar sus pulsaciones en una
// sola función. En este ejemplo 100-200
ON_CONTROL_RANGE(BN_CLICKED, 100, 200, OnClick)

END_MESSAGE_MAP()

////////////////////////////////
BOOL CDynControlsDlg::OnInitDialog()
{
...

CrearBoton("Boton1", CRect(10, 10, 100, 40), 100);
CrearBoton("Boton2", CRect(10, 50, 100, 80), 101);

// En base al mapa de mensajes puedes crear
// botones hasta con ID 200
// >> CrearBoton("Boton200", CRect(x1, y1, x2, y2), 200)
...
}

////////////////////////////////
void CDynControlsDlg::OnClick(UINT nID)
{
TRACE("CDynControlsDlg::OnClick: Botón pulsado con ID = %u", nID);
}

////////////////////////////////
BOOL CDynControlsDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
DestruirBotones();
return CDialog::DestroyWindow();
}

////////////////////////////////
void CDynControlsDlg::CrearBoton(LPCTSTR pszCaption, CRect& rRect, UINT
nCtrlID)
{
if (CButton* pBtn = new CButton) {
pBtn->Create(
pszCaption,
BS_DEFPUSHBUTTON | WS_VISIBLE,
rRect,
this,
nCtrlID);
m_lstButtons.push_back(pBtn);
}
}

////////////////////////////////
void CDynControlsDlg::DestruirBotones()
{
for(
TButtonList::iterator pIterator = m_lstButtons.begin();
pIterator != m_lstButtons.end();
++pIterator)
{
if (*pIterator != NULL)
delete *pIterator;
}
}


Saludos
Cholo Lennon
Salta, ARG
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida