Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/06/2008, 04:56
ZeroZ
 
Fecha de Ingreso: junio-2002
Ubicación: España
Mensajes: 348
Antigüedad: 22 años, 10 meses
Puntos: 8
Porqué no se cargan las imagenes?

hola, estoy haciendo pruebas con la api de windows, trato de mostrar una imagen que cargo previamente, quiero trabajar con la memoria para modificar la imagen y luego mostrarla. Bueno os pongo el codigo a ver si veis porque no se muestra la imagen.
Código PHP:
LRESULT CALLBACK WindowFunc(HWND hwndUINT messageWPARAM wParamLPARAM lParam)
{
   
OPENFILENAME fname;
   
char filename[64];

   switch(
message) {
      case 
WM_SIZE:
         {
         
coords.cx LOWORD(lParam);
         
coords.cy HIWORD(lParam);

         if(
hBitmap){ 
            if (
memDC) {
               
SelectObject(memDCmemBitmapOld);
               
DeleteObject(memBitmap);
               
DeleteDC(memDC);
            }

            
tempDC GetDC(hwnd);
            
memDC CreateCompatibleDC(tempDC);
            
memBitmap CreateCompatibleBitmap(tempDCcoords.cxcoords.cy);
            
SelectObject(memDCmemBitmap);
            
ReleaseDC(hwndtempDC);

            
RepintarImagen(hwnd);
            }
         break;
         }
      case 
WM_PAINT:
         
hdc BeginPaint(hwnd, &ps);
         
BitBlt(hdc00coords.cxcoords.cymemDC00SRCCOPY); //@@@ mejorar repintando solo el area invalidada
         
EndPaint(hwnd, &ps);
         break;
      case 
WM_COMMAND:
         switch(
LOWORD(wParam)) {
            case 
IDM_OPEN:

               
memset(&fname0sizeof(OPENFILENAME));
               
fname.lStructSize sizeof(OPENFILENAME);
               
fname.hwndOwner hwnd;
               
fname.lpstrFilter = ("Bitmap Files (*.bmp)\0*.bmp\0\0");
               
fname.nFilterIndex 1;
               
fname.lpstrFile fn;
               
fname.nMaxFile sizeof(fn);
               
fname.lpstrFileTitle filename;
               
fname.nMaxFileTitle sizeof(filename)-1;
               
fname.Flags OFN_FILEMUSTEXIST OFN_HIDEREADONLY;

               if(!
GetOpenFileName(&fname))
                  break;

               
hBitmap = (HBITMAP)LoadImage(NULLfnIMAGE_BITMAP00LR_LOADFROMFILE);
               
GetObject(hBitmapsizeof(BITMAP), &bm);

               
RECT rect;
               
GetClientRect(hwnd, &rect);

               
RepintarImagen(hwnd);
               
InvalidateRect(hwnd, &rectTRUE);
               break;
         }
         break;

      case 
WM_DESTROY//terminar el programa
         
if (memDC) {
            
SelectObject(memDCmemBitmapOld);
            
DeleteObject(memBitmap);
            
DeleteDC(memDC);
         }
         if (
hBitmap)
            
DeleteObject(hBitmap);
         
PostQuitMessage(0);
         break;

      default:
         return 
DefWindowProc(hwndmessagewParamlParam);
   }
   return 
0;
}

/******************************************************************************
Método: RepintarImagen
Función: Actualiza el memDC con la imagen cargada, teniendo en cuenta que la imagen debe estar centrada en la ventana. Tambien se tiene en cuenta el scroll y el zoom.
******************************************************************************/
void RepintarImagen(HWND hwnd){
   
HDC tempDC;
   
HBITMAP tempBitmapOrig;
   if((
bm.bmWidth > (coords.cx)) || (bm.bmHeight > (coords.cy))){
      
xCenter 0;
      
yCenter 0;
   }else{
      
xCenter = (coords.cx/2) - (bm.bmWidth/2);
      
yCenter = (coords.cy/2) - (bm.bmHeight/2);
   }

   
tempDC GetDC(hwnd);
   
tempBitmapOrig SelectObject(tempDChBitmap);
   
StretchBlt(memDCxCenteryCenter00tempDC00bm.bmWidth,bm.bmHeight,SRCCOPY);
   
SelectObject(tempDCtempBitmapOrig);
   
ReleaseDC(hwnd,tempDC);

__________________
Bicis nuevas y de segunda mano: Bicibid