Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


SAVE Y SAVEAS

Aqui programadores en la plataforma Win32 con Visual C++ de Microsoft...

Moderador: latindeveloper

SAVE Y SAVEAS

Notapor mcd17arg el Mié Ago 08, 2007 5:49 am

Hola a todos quisiera saver si alguien me puede ayudar con lo siguiente:

Tengo un graficador de lineas puntos elipses etc q esta funcionando bien ahora necesito hacer solo una cosa mas y no estoy encontrando la forma...

Tengo un metodo q guarda pixeles encendidos de la pantalla a una matriz utiliza internamente getpixel y debo almacenar esa matriz de datos (pixeles encendidos) justo antes de hacer save o saveas. Asi serializa la matriz con la ultima informacion obtenida de la pantalla.

Actualmente estoy serializando lo cual es muy conveniente para el graficador pero si quiero guardar la matriz en el serialize no me lo acepta por que el metodo utiliza pdc levantar los datos de la pantalla y en serialize no se conoce o no se como hacer para q pdc pueda ser conocido...
Bueno desde ya muchas gracias
Marce.-



Código: Seleccionar todo
void CGraficadorDoc::LevantaPixel(CDC *pDC)
{

COLORREF  ColorPunto;

for (int H=0;H<=799;H++)   {
  for(int K=0;K<=599;K++){
        ColorPunto = pDC->GetPixel(H,K);
           if (ColorPunto==0){  //Si el pixel está prendido  osea color negro
    m_Matriz[H][K].encendido = 1;
        }
   }
    }
}


void CGraficadorDoc::Serialize(CArchive& ar)
{
   
double   coordx ;
double   coordy ;
int   encendido;

   CObject::Serialize(ar) ;
   if (ar.IsStoring())
      {

                       [color=red]// LevantaPixel(pDC)   <---ESTE NO ME ANDA AQUI [/color]   

     [color=red]  //LEVANTA PIXEL HARIA LA ULTIMA ACTUALIZACION A LA MATRIZ PARA LUEGO BAJARLA AL ARCHIVO[/color]
                              for (int i = 0 ; i <= 799 ; i++)
         {
         for (int j = 0 ; j <= 599 ; j++)
         {
         ar << m_Matriz[i][j].coordx;
         ar << m_Matriz[i][j].coordy;
                      ar << m_Matriz[i][j].encendido;            }
         }
      }
   else
      {

      for (int i = 0 ; i <= 799 ; i++)
           {
           for (int j = 0 ; j <= 599 ; j++)
         {
         ar >> coordx;
         m_Matriz[i][j].coordx = coordx;
         ar >> coordy;
         m_Matriz[i][j].coordy = coordy;
         ar >> encendido;
         m_Matriz[i][j].encendido=encendido;
         }
                             }

      }
}
EL LOCO MARCE Y SU MALDITO LUNES...
mcd17arg
Usuario Activo
Usuario Activo
 
Mensajes: 20
Registrado: Mar Abr 20, 2004 4:29 am
Ubicación: salta capital

Re: SAVE Y SAVEAS

Notapor latindeveloper el Mié Ago 08, 2007 1:25 pm

Antes de llamar a LevantaPixel puedes crearte un DC temporal:

Código: Seleccionar todo
CPaintDC dc(this);
LevantaPixel(&dc);
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Notapor mcd17arg el Mié Ago 08, 2007 7:42 pm

HOLA MUCHAS GRACIAS POR TU PRONTA RESPUESTA LA VERDAD ESTOY MUY ENTUCIASMADO CON SACAR EL GRAFICADOR ADELANTE.

VOS SABES QUE INTENTO CREAR UN DISPOSITIVO DE CONTEXTO TEMPORAL PERO PARECE QUE COMO SERIALIZE ESTA DENTRO DE LA CLASE DOCUMENTO NO ES POSIBLE Y ME ESTA TIRANDO EL SIGUIENTE ERROR

D:\GRAFICA\graficador\graficadorDoc.cpp(66) : error C2664: 'CPaintDC::CPaintDC' : cannot convert parameter 1 from 'class CGraficadorDoc *const ' to 'class CWnd *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast


ANTERIORMENTE INTENTE HACER ALGO SIMILAR ESCRIBIENDO EL SIGUIENTE CODIGO EN EL SERIALIZE


Código: Seleccionar todo
void CGraficadorDoc::Serialize(CArchive& ar)
{
   
double   coordx ;
double   coordy ;
int   encendido;

   CObject::Serialize(ar) ;
   if (ar.IsStoring())
      {
         
   ------>   CClientDC dc(this);
   ------>   LevantaPixel(&dc);

      for (int i = 0 ; i <= 799 ; i++){
                                   for (int j = 0 ; j <= 599 ; j++){
         ar << m_Matriz[i][j].coordx;
         ar << m_Matriz[i][j].coordy;
         ar << m_Matriz[i][j].encendido;            }}
      }
   else
                   {
      for (int i = 0 ; i <= 799 ; i++){
                      for (int j = 0 ; j <= 599 ; j++)   {
         ar >> coordx;
         m_Matriz[i][j].coordx = coordx;
         ar >> coordy;
         m_Matriz[i][j].coordy = coordy;
         ar >> encendido;
         m_Matriz[i][j].encendido=encendido;}
         }}
}



PERO ME TIRA EXACTAMENTE EL MISMO ERROR ... MUCHAS GRACIAS POR TODO
EL LOCO MARCE Y SU MALDITO LUNES...
mcd17arg
Usuario Activo
Usuario Activo
 
Mensajes: 20
Registrado: Mar Abr 20, 2004 4:29 am
Ubicación: salta capital

El problema es la clase

Notapor latindeveloper el Jue Ago 09, 2007 12:28 pm

hola nuevamente,

La clase CGraficadorDoc es derivada de CDocument, el parametro que necesita la clase debe ser derivado de una vista (CView)

Para obtener la vista actual puedes hacer:
SDI:
Código: Seleccionar todo
CFrameWnd * pFrame = (CFrameWnd *)(AfxGetApp()->m_pMainWnd);

CView * pView = pFrame->GetActiveView();

if ( pView )
{
------>   CClientDC dc(pView);
  ------>   LevantaPixel(&dc);
}
else
{
    AfxMessageBox("Horror!");
}


MDI
Código: Seleccionar todo
CMDIChildWnd * pChild =
    ((CMDIFrameWnd*)(AfxGetApp()->m_pMainWnd))->MDIGetActive();

if ( !pChild )
     return NULL;

CView * pView = pChild->GetActiveView();

if ( pView )
{
------>   CClientDC dc(pView);
  ------>   LevantaPixel(&dc);
}
else
{
    AfxMessageBox("Horror!");
}
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Notapor mcd17arg el Lun Ago 13, 2007 10:17 pm

HOLA Y GRACIAS !!! PUDE SOLUCIONAR EL PROBLEMA CON TU AYUDA!! :lol:
EL LOCO MARCE Y SU MALDITO LUNES...
mcd17arg
Usuario Activo
Usuario Activo
 
Mensajes: 20
Registrado: Mar Abr 20, 2004 4:29 am
Ubicación: salta capital


Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados