C/Visual C - Un click en una imagen

 
Vista:

Un click en una imagen

Publicado por Olga (27 intervenciones) el 09/03/2007 14:30:07
Hola
Utilizo una imagen y quiero q al hacer click sobre ella me ejecute un codigo, lo escribo en la funcion OnImagen que esta relacionada con el ON_BN_CLICK de la imagen pero no me hace nada!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Un click en una imagen

Publicado por fernando.gomez (1603 intervenciones) el 09/03/2007 18:49:10
Pues es que la imagen no es un botón...

Primero, la imagen ¿cómo la dibujas en pantalla? Hay dos formas, en escencia. La primera, es emplear CBitmap y cargarla, y después hacer el BitBlt hacia la ventana, diciéndole las coordenadas que habrá de emplear. La segunda forma, es que te crees un control static (label) y le digas que cargue una imagen.

Si empleas la primera opción, deberás capturar el mensaje WM_LBUTTONDOWN ó WM_LBUTTONUP y determinar si el click se hizo en las coordenadas donde está la imagen dibujada. En este caso, ejecutas el código que quieras.

En el segundo caso, tienes que establecer una propiedad en el static para que reciba eventos (no recuerdo exactamente el nombre; léele las propiedades y seguro aparece) y pues capturas el click para ese control y listo.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Un click en una imagen

Publicado por Nelek (816 intervenciones) el 12/03/2007 07:42:47
Hola

Yo para hacer eso que pides, tengo las imagenes cargadas por la primera de las opciones que te ha dicho fernando, es decir, la del CBitmap y el BitBlt.

En mi caso puedo llegar a tener hasta 48 elementos en la pantalla, repartidos en tres grupos de imagenes. Para saber si hago un click encima lo que he hecho es:

void CMyView::CheckHit (CPoint point)
{
//Me salto las declaraciones
POSITION pos = pDoc->m_clMyObject1List.GetHeadPosition ();
while (pos)
{
CMyObject1* pObj = &pDoc->m_clMyObject1List.GetNext (pos);
CRect rect;
rect.left = pObj->m_cpObjCoord.x;
rect.top = pObj->m_cpObjCoord.y;
rect.right = pObj->m_cpObjCoord.x + BMPWIDTH;
rect.bottom = pObj->m_cpObjCoord.y + BMPHEIGHT;

if (rect.PtInRect (point))
{
m_szSelectedName = pObj->m_szObjName;
pObj->m_bSelection = true;
return;
}
else
pObj->m_bSelection = false;

//Aqui iria lo mismo pero para los otros dos tipos de objetos y sus respectivas listas.

return;
}

Con esto paso por todas las listas para comprobar si el click lo he hecho dentro del rectangulo ocupado por mis elementos en la pantalla. Si es asi, me quedo con el nombre del elemento y le pongo a true el indicador de que ese elemento ha sido seleccionado para poder trabajar con el en otros sitios.

Luego lo unico que ncesitas es:

void CMyView::OnLButtonClk (CPoint point, UINT nFlags...)
{
CheckHit (point);

//Hacer lo que quieras con el elemento seleccionado

return CView::OnLButtonClk ();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar