<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>Saludos amigos!!.<BR>
 <BR>
Veran sigo aprendiendo API y ahora se me ah presentado el siguiente problema.<BR>
 <BR>
Quiero guardar lo que se muestre en pantalla, estoy juntando varias imagenes y las quiero guardar como una sola, es decir guardar lo que muestra la pantalla como una imagen ya sea bmp o cualquier formato. El codigo que es el que tengo muestra y guarda una sola imagen. Yo lo que quiero es guardar la pantalla completa. Espero sirva de algo el codigo.<BR><BR>
#include <windows.h> <BR>#include <commdlg.h> <BR>#include <stdlib.h> <BR>#include <stdio.h> <BR>#include "viewbmp.h" <BR>
<BR>#define UNTITLED "(sin título)" <BR>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); <BR>
void DibujaBitmap (HDC hdc, HBITMAP hBitmap, int xInicio, int yInicio); <BR>
void PopFileInitialize (HWND); <BR>BOOL PopFileOpenDlg    (HWND, PSTR, PSTR); <BR>BOOL PopFileSaveDlg    (HWND, PSTR, PSTR); <BR>BOOL PopFileRead       (HINSTANCE, PSTR); <BR>BOOL PopFileWrite      (HWND, PSTR); <BR>
void DoCaption (HWND hwnd, char *szTitleName); <BR>void OkMessage (HWND hwnd, char *szMessage, char *szTitleName); <BR>short AskAboutSave (HWND hwnd, char *szTitleName); <BR>          // Variables globales <BR>
static char szAppName[] = "ViewBMP"; <BR>static HWND hDlgModeless; <BR>static OPENFILENAME ofn; <BR>static HBITMAP hBitmap = NULL; <BR>
// ************************** Punto de entrada al programa ******* <BR>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, <BR>                    PSTR szCmdLine, int iCmdShow) <BR>{ <BR>   MSG         msg; <BR>   HWND        hwnd; <BR>   HACCEL      hAccel; <BR>   WNDCLASSEX  wndclass; <BR>
   wndclass.cbSize        = sizeof (wndclass); <BR>   wndclass.style         = CS_HREDRAW | CS_VREDRAW; <BR>   wndclass.lpfnWndProc   = WndProc; <BR>   wndclass.cbClsExtra    = 0; <BR>   wndclass.cbWndExtra    = 0; <BR>   wndclass.hInstance     = hInstance; <BR>   wndclass.hIcon         = LoadIcon (hInstance, szAppName); <BR>   wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW); <BR>   wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); <BR>   wndclass.lpszMenuName  = szAppName; <BR>   wndclass.lpszClassName = szAppName; <BR>   wndclass.hIconSm       = LoadIcon (NULL, IDI_APPLICATION); <BR>
   RegisterClassEx (&wndclass); <BR>
   hwnd = CreateWindow (szAppName, NULL, <BR>                          WS_OVERLAPPEDWINDOW, <BR>                          CW_USEDEFAULT, CW_USEDEFAULT, <BR>                          CW_USEDEFAULT, CW_USEDEFAULT, <BR>                          NULL, NULL, hInstance, szCmdLine); <BR>
   ShowWindow (hwnd, iCmdShow); <BR>   UpdateWindow (hwnd); <BR>
   hAccel = LoadAccelerators (hInstance, szAppName); <BR>
   while (GetMessage (&msg, NULL, 0, 0)) { <BR>      if (hDlgModeless == NULL || !IsDialogMessage (hDlgModeless, &msg)) { <BR>         if (!TranslateAccelerator (hwnd, hAccel, &msg)) { <BR>            TranslateMessage (&msg); <BR>            DispatchMessage (&msg); <BR>         } <BR>      } <BR>   } <BR>   return msg.wParam; <BR>} <BR>
// ************************** Procedimiento de ventana ******* <BR>
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) <BR>{ <BR>    static BOOL      bNeedSave = FALSE; <BR>    static char      szFileName[_MAX_PATH]; <BR>    static char      szTitleName[_MAX_FNAME + _MAX_EXT]; <BR>    static HINSTANCE hInst; <BR>   HDC hDC; <BR>   PAINTSTRUCT ps; <BR>
    switch (iMsg) { <BR>      case WM_CREATE : <BR>         hInst = ((LPCREATESTRUCT) lParam) -> hInstance; <BR>
                         // Inicializar cuadro de diálogo común <BR>
         PopFileInitialize (hwnd); <BR>
                         // Procesar línea de comandos <BR>
         lstrcpy (szFileName, (PSTR) (((LPCREATESTRUCT) lParam)->lpCreateParams)); <BR>
         if (strlen (szFileName) > 0) { <BR>            GetFileTitle (szFileName, szTitleName, sizeof (szTitleName)); <BR>
            if (!PopFileRead (hInst, szFileName)) <BR>               OkMessage (hwnd, "No se puede leer el archivo %s.", <BR>                                          szTitleName); <BR>            } <BR>
            DoCaption (hwnd, szTitleName); <BR>            return 0; <BR>
      case WM_COMMAND : <BR>         switch (LOWORD (wParam)) { <BR>                              // Mensajes del menú Archivo <BR>            case IDM_OPEN : <BR>               if (bNeedSave && IDCANCEL == AskAboutSave (hwnd, szTitleName)) <BR>                  return 0; <BR>
                        if (PopFileOpenDlg (hwnd, szFileName, szTitleName)) { <BR>                     if (!PopFileRead (hInst, szFileName)) { <BR>                        OkMessage (hwnd, "No se puede leer el archivo %s.", <BR>                                                    szTitleName); <BR>                        szFileName[0]  = '\0'; <BR>                        szTitleName[0] = '\0'; <BR>                     } else <BR>                        InvalidateRect (hwnd, NULL, FALSE); <BR>                  } <BR>
                  DoCaption (hwnd, szTitleName); <BR>                  bNeedSave = FALSE; <BR>                  return 0; <BR>
            case IDM_SAVE : <BR>               if (szFileName[0]) { <BR>                  if (PopFileWrite (hwnd, szFileName)) { <BR>                     bNeedSave = FALSE; <BR>                     return 1; <BR>                  } else <BR>                     OkMessage (hwnd, "No se puede escribir el archivo %s", <BR>                                                    szTitleName); <BR>                  return 0; <BR>               } <BR>                                                  // sigue proceso <BR>            case IDM_SAVEAS : <BR>               if (PopFileSaveDlg (hwnd, szFileName, szTitleName)) { <BR>                  DoCaption (hwnd, szTitleName); <BR>
                  if (PopFileWrite (hwnd, szFileName)) { <BR>                     bNeedSave = FALSE; <BR>                     return 1; <BR>                  } else <BR>                     OkMessage (hwnd, "No se puede escribir el archivo %s", <BR>                                                    szTitleName); <BR>               } <BR>               return 0; <BR>
            case IDM_EXIT : <BR>               SendMessage (hwnd, WM_CLOSE, 0, 0); <BR>               return 0; <BR>
         } <BR>         break; <BR>
      case WM_PAINT: <BR>         hDC = BeginPaint (hwnd, &ps); <BR>         DibujaBitmap (hDC, hBitmap, 0, 0); <BR>         EndPaint (hwnd, &ps); <BR>         return 0; <BR>
      case WM_CLOSE : <BR>         if (!bNeedSave || IDCANCEL != AskAboutSave (hwnd, szTitleName)) <BR>            DestroyWindow (hwnd); <BR>
         return 0; <BR>
      case WM_QUERYENDSESSION : <BR>         if (!bNeedSave || IDCANCEL != AskAboutSave (hwnd, szTitleName)) <BR>            return 1; <BR>
         return 0; <BR>
      case WM_DESTROY : <BR>         if (hBitmap != NULL) <BR>            DeleteObject (hBitmap); <BR>         PostQuitMessage (0); <BR>         return 0; <BR>
   } <BR>   return DefWindowProc (hwnd, iMsg, wParam, lParam); <BR>} <BR>
// ************************** función para dibujar bitmaps ****** <BR>
void DibujaBitmap (HDC hdc, HBITMAP hBitmap, int xInicio, int yInicio) <BR>{ <BR>   BITMAP bm; <BR>   HDC      hdcMem; <BR>   DWORD   dwSize; <BR>   POINT   ptSize, ptOrg; <BR>
   hdcMem = CreateCompatibleDC (hdc); <BR>   SelectObject (hdcMem, hBitmap); <BR>   SetMapMode (hdcMem, GetMapMode (hdc)); <BR>
   GetObject (hBitmap, sizeof (BITMAP), (LPVOID)&bm); <BR>
   ptSize.x = bm.bmWidth; <BR>   ptSize.y = bm.bmHeight; <BR>   DPtoLP (hdc, &ptSize, 1); <BR>
   ptOrg.x = 0; <BR>   ptOrg.y = 0; <BR>   DPtoLP (hdcMem, &ptOrg, 1); <BR>
   BitBlt (hdc, xInicio, yInicio, ptSize.x, ptSize.y, hdcMem, ptOrg.x, ptOrg.y, SRCCOPY); <BR>
   DeleteObject (hdcMem); <BR>} <BR>
// ***** funciones para manejar los diálogos abrir/guardar archivo *** <BR>
void PopFileInitialize (HWND hwnd) <BR>{ <BR>   static char szFilter[] = "Archivos de texto (*.BMP)\0*.bmp\0";<BR>                             // "Todos los archivos (*.*)\0*.*\0\0"; <BR>
   ofn.lStructSize       = sizeof (OPENFILENAME); <BR>   ofn.hwndOwner         = hwnd; <BR>   ofn.hInstance         = NULL; <BR>   ofn.lpstrFilter       = szFilter; <BR>    ofn.lpstrCustomFilter = NULL; <BR>    ofn.nMaxCustFilter    = 0; <BR>    ofn.nFilterIndex      = 0; <BR>    ofn.lpstrFile         = NULL;          // Definido en funciones Open y Close <BR>    ofn.nMaxFile          = _MAX_PATH; <BR>    ofn.lpstrFileTitle    = NULL;          // Definido en funciones Open y Close <BR>    ofn.nMaxFileTitle     = _MAX_FNAME + _MAX_EXT; <BR>    ofn.lpstrInitialDir   = NULL; <BR>    ofn.lpstrTitle        = NULL; <BR>    ofn.Flags             = 0;             // Definido en funciones Open y Close <BR>    ofn.nFileOffset       = 0; <BR>    ofn.nFileExtension    = 0; <BR>    ofn.lpstrDefExt       = "txt"; <BR>    ofn.lCustData         = 0L; <BR>    ofn.lpfnHook          = NULL; <BR>    ofn.lpTemplateName    = NULL; <BR>} <BR>
BOOL PopFileOpenDlg (HWND hwnd, PSTR pstrFileName, PSTR pstrTitleName) <BR>{ <BR>    ofn.hwndOwner         = hwnd; <BR>    ofn.lpstrFile         = pstrFileName; <BR>    ofn.lpstrFileTitle    = pstrTitleName; <BR>    ofn.Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT; <BR>
    return GetOpenFileName (&ofn); <BR>} <BR>
BOOL PopFileSaveDlg (HWND hwnd, PSTR pstrFileName, PSTR pstrTitleName) <BR>{ <BR>    ofn.hwndOwner         = hwnd; <BR>    ofn.lpstrFile         = pstrFileName; <BR>    ofn.lpstrFileTitle    = pstrTitleName; <BR>    ofn.Flags             = OFN_OVERWRITEPROMPT; <BR>
   return GetSaveFileName (&ofn); <BR>} <BR>
static long PopFileLength (FILE *file) <BR>{ <BR>    int iCurrentPos, iFileLength; <BR>
    iCurrentPos = ftell (file); <BR>
    fseek (file, 0, SEEK_END); <BR>
    iFileLength = ftell (file); <BR>
    fseek (file, iCurrentPos, SEEK_SET); <BR>
    return iFileLength; <BR>} <BR>
BOOL PopFileRead (HINSTANCE hInst, PSTR pstrFileName) <BR>{ <BR>   if (hBitmap != NULL) <BR>      DeleteObject (hBitmap); <BR>   hBitmap = (HBITMAP)LoadImage(hInst, pstrFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); <BR>
    return hBitmap != NULL; <BR>} <BR>
BOOL PopFileWrite (HWND hwnd, PSTR pstrFileName) <BR>{ <BR>
    FILE  *file; <BR>    int    iLength; <BR>    PSTR   pstrBuffer; <BR>
    if (NULL == (file = fopen (pstrFileName, "wb"))) <BR>      return FALSE; <BR>
    iLength = GetWindowTextLength (hwnd); <BR>
    if (NULL == (pstrBuffer = (PSTR) malloc (iLength + 1))) { <BR>      fclose (file); <BR>      return FALSE; <BR>   } <BR>
    GetWindowText (hwnd, pstrBuffer, iLength + 1); <BR>
    if (iLength != (int) fwrite (pstrBuffer, 1, iLength, file)) { <BR>      fclose (file); <BR>      free (pstrBuffer); <BR>      return FALSE; <BR>   } <BR>
    fclose (file); <BR>    free (pstrBuffer); <BR> <BR>    return TRUE; <BR>} <BR>
// ************************** funciones auxiliares **************** <BR>
void DoCaption (HWND hwnd, char *szTitleName) <BR>{ <BR>   char szCaption[64 + _MAX_FNAME + _MAX_EXT]; <BR>
   wsprintf (szCaption, "%s - %s", szAppName, <BR>               szTitleName[0] ? szTitleName : UNTITLED); <BR>
   SetWindowText (hwnd, szCaption); <BR>} <BR>
void OkMessage (HWND hwnd, char *szMessage, char *szTitleName) <BR>{ <BR>   char szBuffer[64 + _MAX_FNAME + _MAX_EXT]; <BR>
   wsprintf (szBuffer, szMessage, szTitleName[0] ? szTitleName : UNTITLED); <BR>
   MessageBox (hwnd, szBuffer, szAppName, MB_OK | MB_ICONEXCLAMATION); <BR>} <BR>
short AskAboutSave (HWND hwnd, char *szTitleName) <BR>{ <BR>   char szBuffer[64 + _MAX_FNAME + _MAX_EXT]; <BR>   int  iReturn; <BR>
   wsprintf (szBuffer, "¿Guardar cambios actuales en %s?", <BR>               szTitleName[0] ? szTitleName : UNTITLED); <BR>
   iReturn = MessageBox (hwnd, szBuffer, szAppName, <BR>                           MB_YESNOCANCEL | MB_ICONQUESTION); <BR>
   if (iReturn == IDYES) <BR>      if (!SendMessage (hwnd, WM_COMMAND, IDM_SAVE, 0L)) <BR>         iReturn = IDCANCEL; <BR>
   return iReturn; <BR>} <BR><BR>
<BLOCKQUOTE> </BLOCKQUOTE><br /><hr />Express yourself instantly with MSN Messenger! <a href='http://clk.atdmt.com/AVE/go/onm00200471ave/direct/01/' target='_new'>MSN Messenger</a></body>
</html>