C/Visual C - Coordenadas relativas y absolutas VISUAL C++

 
Vista:

Coordenadas relativas y absolutas VISUAL C++

Publicado por Nelek (816 intervenciones) el 24/05/2006 16:05:16
Hola a todos,

Como ya dije en un mensaje anterior "AYUDA CON EL SCROLLBAR PARA VC++" tengo un problema con las coordenadas absolutas y relativas.

He logrado solucionar parte del problema. Gracias a los métodos SetScrollSizes, SetScrollPage, SetScrollLine logro crear una superficie de dibujo a mi gusto. Y con un algoritmo que he hecho, logro que se tenga en cuenta la posicion de la ScrollBar y donde se hace el click a la hora de grabar las coordenadas de un nuevo elemento. El problema viene cuando dibujo la pantalla introduciendo los elementos que tengo almacenados. Pongo un ejemplo:

Recién ejecutado el programa (ScrollPos en 0,0) pongo un elemento en las coordenadas 5,5 de la pantalla visible, se almacenan las coordenadas 5,5 reales y me dibuja el bitmap donde toca. Si ahora hago 5 desplazamientos horizontales (ScrollPos en 500, 0), las coordenadas del elemento introducido siguen siendo 5,5 pero el elemento sigue estando totalmente visible en la esquina superior izquierda de la pantalla, cuando deberia haberse perdido por el lado izquierdo.
Lo curioso es que si ahora introduzco un nuevo elemento y lo ubico justo encima de donde esta el anterior, las coordenadas que se graban son las que tocan (505, 5), pero el bitmap se me desplaza automaticamente 500 pixels a la derecha quedando en el centro de la pantalla y si en lugar de eso lo ubico en el borde de la derecha de la pantalla visible, el elemento desaparece de la vista por la derecha. No lo pierdo, porque al presentar los datos en un messagebox me aparecen los tres y todo está correcto, sus coordenadas grabadas son (5,5), (505, 5) y (1505, 5), pero el tercero no lo veo porque la ventana visible es de tamaño (1004, 640).

En resumen: Cuando hago click para ubicar un elemento, me tiene en cuenta el ScrollPos y el punto en que hago click en la pantalla, grabando las coordenadas reales como toca. Pero al presentar en pantalla, le da igual donde esta el ScrollPos y toma la esquina superior izquierda de la zona visible como origen de coordenadas.

Sé que seguramente sea una tontería, obvia para la mayoría, pero yo estoy bloqueado y no encuentro ningun ejemplo ni web que me lo aclare y en los manuales o en las ayudas siempre se tratan los temas por separado para simplificar las cosas. No soy de los que le gusta pedir que me hagan el trabajo, pero el tiempo se me está empezando a echar encima y tengo que hacer demasiado como para ponerme a buscar en profundidad por la red. Si alguien me responde con un link donde pueda ver el ejemplo que necesito ya me daria por satisfecho (ya he mirado por el MSDN y en la web de microsoft y no he localizado nada que me ayude).

El algoritmo con el que hago la presentacion en pantalla es el siguiente:

ClientDC dc(this);
OnPrepareDC(&dc);
CPoint cpTempPos; cpTempPos.x = -1000; cpTempPos. y = -1000;

posIn = pDoc->GetInputHeadPosition ();
while (posIn != NULL)
{ CInputData idTempInput = pDoc->GetInputNext (posIn);
posIn = pDoc->GetInputPosition (); //Miguel: Getting the new position

if (!idTempInput.GetInSel ())
{ CClientDC dc(this);
CDC dcNormMem;
dcNormMem.CreateCompatibleDC (&dc);

if (bmNormIn.m_hObject != NULL)
bmNormIn.DeleteObject();

csTempPos = idTempInput.GetInCoord ();

bmNormIn.LoadBitmap (IDB_NORMIN);
bmNormIn.GetObject(sizeof(bmNormTemp), &bmNormTemp);
CBitmap* pbmNormOld = dcNormMem.SelectObject(&bmNormIn);

dc.BitBlt(csTempPos.cx, csTempPos.cy, bmNormTemp.bmWidth,
bmNormTemp.bmHeight, &dcNormMem, 0, 0, SRCCOPY);

dcNormMem.SelectObject(pbmNormOld);
dcNormMem.DeleteDC();
ReleaseDC(&dc);
}
}

Álguien me puede decir que tendría que modificar para que la inclusión de los bitmaps se haga teniendo en cuenta las coordenadas reales (origen en el 0,0 de mi SetScrollSize) y no las relativas de la pantalla visible? (Ya he hecho pruebas con el LPtoDP y tampoco he logrado solucionarlo, supongo que lo debo de estar usando mal)

Gracias por todo, y perdon por la extension del mensaje. Personalmente prefiero explicarme de más a que no se entienda bien cual es el problema.
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