C/Visual C - Por favor, que alguien me responda

 
Vista:

Por favor, que alguien me responda

Publicado por Nelek (816 intervenciones) el 26/05/2006 08:22:49
Hola de nuevo,

Por favor, que alguien me responda a esto, aunque sea para decirme si es posible o no solucionar lo que planteo.

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.
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

me deje el algoritmo

Publicado por Nelek (816 intervenciones) el 26/05/2006 08:23:50
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)
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