elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Por que sera que DeleteObject siempre resulta true?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Por que sera que DeleteObject siempre resulta true?  (Leído 2,209 veces)
Filantropo

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Por que sera que DeleteObject siempre resulta true?
« en: 4 Marzo 2019, 05:07 am »

Hice una aplicacion de practica que dibuja unas lineas horizontales en la ventana.
en el windowproc durante el wm_paint se crea una pluma roja, lo selecciona en el HDC, dibuja 2 lineas horizontales y lo borra la pluma despues de EndPaint.

Por curiosidad lo cambie un poco: coloque un deleteobject para borrar la pluma despues de dibujar la primera linea y antes de la dibujar la segunda (estando ya seleccionado en el HDC) ya quw en los tutoriales se dice que si se intenta borrar una pluma que esta seleccionada en el HDC o una pluma que ya ha sido borrada pues deleteobject deberia resultar en  error o cero, pero lo extraño es q al ejecutar la aplicacion deleteobject resulta true que significa quw si lo ha borrrado por tanto la primera linea deberia ser roja y la segunda no, pero ambas salen rojas.

Luego coloque otro deleteobject debajo del primero, lo que deberia resultar tambien en error o cero por tratar borrar una pluma que ya esta borrada pero deleteobject sigue resultando true.

Alguien mas ha notado ese comportamiento extraño de esa function?

Uso visual c++ 6.0

Código:

Case WM_PAINT:
pluma = CreatePen (...) ;

hdc = BeginPaint (...) ;

SelectObject (hdc, pluma) ;
MoveToEx (hdc, 0, 100, NULL) ;
LineTo (hdc, 300, 100) ;

DeleteObject (pluma) ;
res = DeleteObject (pluma) ;
if (res == 0)  // tambien probe colocando  if (res == FALSE)
{
MessageBox (..., "error al borrar la pluma"...) ;
}

MoveToEx (......) ;
LineTo (....) ;
EndPaint (...) ;

return 0 ;


« Última modificación: 6 Marzo 2019, 00:57 am por Filantropo » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Por que sera que DeleteObject siempre resulta true?
« Respuesta #1 en: 4 Marzo 2019, 09:18 am »

Te dejo un enlace AQUÍ sobre lo que has comentado. Es cierto que si se intenta borrar la pluma estando seleccionada en el HDC, no se borrará pero retornará <true> como resultado. Por eso es que no se te borra pero tampoco te da un error porque devuelva <false>.
Aquí tienes una cita del enlace que te he dejado donde lo explica un poco más:
Citar
The GDI folks found that a lot of people mess up and try to destroy objects while they are still selected into DCs. Failing the call caused two categories of problems: Some applications simply leaked resources (since they thought they were destroying the object, but weren't). Other applications checked the return value and freaked out if they saw that Delete­Object didn't actually delete the object.

To keep both of these types of applications happy, GDI will sometimes (not always) lie and say, "Sure, I deleted your object." It didn't actually delete it, because it's still selected into a DC, but it also ties a string around its finger, and when the object is finally deselected, GDI will say, "Oh, wait, I was supposed to delete this object," and perform the deletion. So the lie that GDI made wasn't so much a lie as it was an "optimistic prediction of the future."

Suerte :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Filantropo

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: Por que sera que DeleteObject siempre resulta true?
« Respuesta #2 en: 6 Marzo 2019, 00:56 am »

Con razon nunca fallaba deleteobject.
Al principio crei que estaba mal mi codigo pero no.
Graxyas.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines