¿Como se borra una imagen?

NOvato
04 de Octubre del 2005
Carge imagenes en mi archivo "*.exe" vi q funciona pero quiero q despues esas imagenes ya no esten ahi... Osea q cuando aparezcan el la pantalla q luego yo las pueda borrar... Si no se entiende por favor me lo dice

Gracias

kike
04 de Octubre del 2005
mas info, no queda claro si lo que quieres es borrar un recurso o una imagen en tiempo de ejecucion

NOvato
04 de Octubre del 2005
Diskulpen esq soy muy pequeño para aprender esto...
Aver, tratare de explicar lo mas q puedo...

Entro ami archivo ".exe" (copilado), funciono eso de q cargue la imagen... me la mostro... pero ahora quiero que esa imagen ya no este ahi... con un SetTimer(hw.... ya puse el WM_TIMER, y ahi no se q poner para q saque la imagen q cargo la pantalla....
Osea lo que quiero hacer es poner una foto, y que luego salga de ahi... y luego vuelva a aparecer y luego salga... Seria una foto que titilee pero no se como hacer q desapareza... NO se si me explico.... Redacto mal! :(

Si no se entiende les hare un dibujito:

En este esta la ventana avierta y ahi esta la imagen
-------------------------------------
| § Mi titulo de ventana |X| |
|------------------------------------|
| Imagen | |
|____________| |
| |
------------------------------------

No se si salio bien...

Despues quiero q salga la imagen:

-------------------------------------
| § Mi titulo de ventana |X| |
|------------------------------------|
|Zona libre de imagen |
| |
| |
------------------------------------
Luego quiero q vuelva a aparecer y luego salir y asi susesibamente...

Si no me salio bien el dibujo lo repito abajo

NOvato
04 de Octubre del 2005
-------------------------------------
| § Mi titulo de ventana |X|¨ |
|------------------------------------|
| Imagen ¨¨¨¨¨¨|¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ |
|____________| ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨|
|¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ |
*************************************

-------------------------------------
| § Mi titulo de ventana |X|¨ |
|------------------------------------|
|NO esta la imagen¨¨¨¨¨¨¨¨¨¨¨ |
|¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ |
|¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ |
*************************************

kike
04 de Octubre del 2005
a ver si te entendi
tu has creao una aplicacion con visualC++ y has conseguido que te muestre una imagen, ahora quieres que no te la muestre....ok

he de suponer que estamos hablando de una aplicacion basada en MFC y si es asi es una aplicacion tipo dialogo o no.

Cuanta mas info mejor para resolver tu problema

NOvato
04 de Octubre del 2005
la verdad programo con DEV-CPP...
Lo que estoy queriendo hacer en mi "exe" es:
1.Entrar(por supuesto)
2.En la ventana que aparezca una fotito
3.Esperar un momento(SetTimer)
4.La foto desaparece
5.Esperar un momento(SetTimer)
6.La foto vuelve a aparecer
7.Esperar un momento(SetTimer)
8.La foto desaparece...

¿¿COMO HAGO LA "La foto desaparece"...??

Eso intento saber...
Estoy queriendo hacer un juego y lo hise pero necesito saber como hacer eso porq osino es coplicada la cosa....
Aki les dejo lo que trato ahora (por supuesto falta mucho):
#include <windows.h>

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "WindowsApp";
HDC hDCs;
PAINTSTRUCT ps;
static HINSTANCE hInstance;
static HBITMAP hBit;

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)

{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* No menu */
wincl.cbClsExtra = 0; /* No extra bytes after the window class */
wincl.cbWndExtra = 0; /* structure or the window instance */
/* Use Windows's default color as the background of the window */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

/* Register the window class, and if it fails quit the program */
if (!RegisterClassEx (&wincl))
return 0;

/* The class is registered, let's create the program*/
hwnd = CreateWindowEx (
0, /* Extended possibilites for variation */
szClassName, /* Classname */
"Intendo", /* Title Text */
WS_POPUPWINDOW, /* default window */
200, /* Windows decides the position */
150, /* where the window ends up on the screen */
410, /* The programs width */
300, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);


/* Make the window visible on the screen */
ShowWindow (hwnd, nFunsterStil);
SetTimer(hwnd,1,6000,NULL);

/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
/* Translate virtual-key messages into character messages */
TranslateMessage(&messages);
/* Send message to WindowProcedure */
DispatchMessage(&messages);
}

/* The program return-value is 0 - The value that PostQuitMessage() gave */
return messages.wParam;
}


/* This function is called by the Windows function DispatchMessage() */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) /* handle the messages */
{
case WM_CREATE:
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
hBit = LoadBitmap(hInstance, "Foto");
break;
case WM_DESTROY:
PostQuitMessage (0);
EndPaint(hwnd, &ps);
break;
case WM_PAINT:
hDCs = BeginPaint(hwnd, &ps);
HDC memDC;
RECT re;
memDC = CreateCompatibleDC(hDCs);
SelectObject(memDC, hBit);
GetClientRect(hwnd, &re);
BitBlt(hDCs, 0, 0, 408, 398, memDC, 0, 0, SRCCOPY);
DeleteDC(memDC);
break;
case WM_TIMER:
¿Como lo borro aka a la foto?
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}

Gracias por responder...

kike
04 de Octubre del 2005
a ver que te parece:

creas una variable global BOOL y vinculas el mensaje Paint a ella,de forma que si es true pinta la foto y si es false pinta de blanco
de esta forma solo debes cambiar el valor de la variable global en la captura del suceso TIMER

deberia funcionar.....
ya diras

kike
04 de Octubre del 2005
recuerda que en el caso WM_TIMER, deves invalidar la ventana para que windows lanze el mensaje WM_PAINT y asi volver a pasar por su case: y pintar de blanco
........

NOvato
04 de Octubre del 2005
Oye... si yo voy pegando las fotos una ensima de otra... las fotos de atras se borraran o solo permaneceran ahi gastandome mi espacio?...
porq de esa manera llegare a unos 50000 fotos encimadas y la memoria \\\"ESTALLA\\\"...
Las de atras se borran??

kike
04 de Octubre del 2005
Cuando haces el BitBlt en el suceso paint lo que haces es copiar en pantalla el contenido del contexto de dispositivo en memoria memDC.
y despues destruyes el memDC con lo que liberas la memoria.
Supongo que no deberia causarte problemas, de todas formas dejalo un rato funcionando y a ver que pasa.
Otra cosa es que aumente el tamaño del exe a causa del tamaño de las imagenes