home *** CD-ROM | disk | FTP | other *** search
- /* ====================================================== */
- /* ICON.C */
- /* Routinen zum Laden, Speichern und Bearbeiten */
- /* von Windows- und OS2-Icon-Dateien */
- /* */
- /* (C) 1993 Kay Glahn & DMV-Verlag */
- /* ====================================================== */
-
- #include <windows.h>
- #include "ICOCON.h"
-
-
- int Mode;
-
- extern char str[255];
-
- extern int i,
- CurrIcon;
-
- extern HANDLE hInst;
-
-
- RetrieveIcon(lphXORBitmap,lphANDBitmap,lphPal,BegPos,hFile,hWnd)
- HBITMAP FAR *lphXORBitmap;
- HBITMAP FAR *lphANDBitmap;
- HPALETTE FAR *lphPal;
- DWORD BegPos;
- int hFile;
- HWND hWnd;
- {
- HDC hDC;
- DWORD Size;
- DWORD Groesse;
- DWORD Size1;
- DWORD OverBound;
- WORD PalEntrys;
- BITMAPINFO Bitmapinfo;
- LPBITMAPINFO lpBitmapinfo;
- LPSTR lpMem;
- HANDLE hBitmapinfoMem;
- HANDLE hMem;
- int count;
- int i;
- RGBQUAD FAR *pRgb;
- LOGPALETTE *pPal;
- WORD FAR *pw;
-
- _llseek(hFile,BegPos,0);
- count = _lread(hFile,(LPSTR)&Bitmapinfo.bmiHeader,sizeof(BITMAPINFOHEADER));
- Bitmapinfo.bmiHeader.biHeight/=2;
- PalEntrys = Bitmapinfo.bmiHeader.biClrUsed;
-
- if(PalEntrys == 0)
- {
- switch(Bitmapinfo.bmiHeader.biBitCount)
- {
- case 1:
- PalEntrys = 2;
- break;
- case 4:
- PalEntrys = 16;
- break;
- case 8:
- PalEntrys = 256;
- break;
- }
- }
-
- if ((PalEntrys!=2)&&(PalEntrys!=16)&&(PalEntrys!=256))
- {
- MessageBox(hWnd, "Die gewΣhlte Datei ist keine gⁿltige Icon-Datei, Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- return(FALSE);
- }
-
- Groesse = sizeof(BITMAPINFOHEADER)+PalEntrys*sizeof(RGBQUAD);
- Size = Bitmapinfo.bmiHeader.biWidth*Bitmapinfo.bmiHeader.biHeight*Bitmapinfo.bmiHeader.biBitCount/8;
-
- if ((hBitmapinfoMem = GlobalAlloc(GMEM_MOVEABLE,Groesse)) != NULL)
- {
- if ((hMem = GlobalAlloc(GMEM_MOVEABLE,Size)) != NULL)
- {
- if((lpBitmapinfo = (LPBITMAPINFO)GlobalLock(hBitmapinfoMem)) != NULL)
- {
- if((lpMem = GlobalLock(hMem)) != (LPSTR) NULL)
- {
- _llseek(hFile,BegPos,0);
- count = _lread(hFile,(LPSTR)lpBitmapinfo,(WORD)Groesse);
- _llseek(hFile,BegPos+count,0);
- count= _lread(hFile,(LPSTR)lpMem, (WORD)Size);
-
- hDC = GetDC(NULL);
-
- lpBitmapinfo->bmiHeader.biHeight /=2;
- pRgb = (RGBQUAD FAR *)((LPSTR)lpBitmapinfo->bmiColors);
- pPal = (LOGPALETTE*)LocalAlloc(LPTR,sizeof(LOGPALETTE) + PalEntrys * sizeof(PALETTEENTRY));
-
- if (!pPal)
- return FALSE;
-
- pPal->palNumEntries = PalEntrys;
- pPal->palVersion = 0x300;
-
- for (i = 0; i < PalEntrys; i++)
- {
- pPal->palPalEntry[i].peRed = pRgb[i].rgbRed;
- pPal->palPalEntry[i].peGreen = pRgb[i].rgbGreen;
- pPal->palPalEntry[i].peBlue = pRgb[i].rgbBlue;
- pPal->palPalEntry[i].peFlags = (BYTE)0;
- }
-
- *lphPal = CreatePalette(pPal);
- LocalFree((HANDLE)pPal);
- pw = (WORD FAR *)((LPSTR)lpBitmapinfo->bmiColors);
-
- for (i=0; i<(int)lpBitmapinfo->bmiHeader.biClrUsed; i++)
- *pw++ = (WORD)i;
-
- if (*lphPal)
- {
- SelectPalette(hDC,*lphPal,FALSE);
- RealizePalette(hDC);
- }
-
- *lphXORBitmap=CreateDIBitmap(hDC,(LPBITMAPINFOHEADER)&(lpBitmapinfo->bmiHeader),CBM_INIT,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapinfo,DIB_RGB_COLORS);
- ReleaseDC(NULL,hDC);
- GlobalUnlock(hMem);
- GlobalFree(hMem);
- GlobalUnlock(hBitmapinfoMem);
- GlobalFree(hBitmapinfoMem);
- if (*lphXORBitmap)
- {
- Size1=Bitmapinfo.bmiHeader.biWidth*Bitmapinfo.bmiHeader.biHeight/8;
- OverBound=(Bitmapinfo.bmiHeader.biWidth/8)%sizeof(LONG);
- if(OverBound) Size1+=(sizeof(LONG)-OverBound)*Bitmapinfo.bmiHeader.biHeight;
-
- if ((hMem = GlobalAlloc(GMEM_MOVEABLE,Size1)) != NULL)
- {
- if ((hBitmapinfoMem = GlobalAlloc(GMEM_MOVEABLE,sizeof(BITMAPINFOHEADER)+2*sizeof(RGBQUAD))) != NULL)
- {
- if((lpMem = GlobalLock(hMem)) != (LPSTR) NULL)
- {
- if((lpBitmapinfo = (LPBITMAPINFO)GlobalLock(hBitmapinfoMem)) != NULL)
- {
- lpBitmapinfo->bmiHeader.biSize=(long)sizeof(BITMAPINFOHEADER);
- lpBitmapinfo->bmiHeader.biWidth=Bitmapinfo.bmiHeader.biWidth;
- lpBitmapinfo->bmiHeader.biHeight=Bitmapinfo.bmiHeader.biHeight;
- lpBitmapinfo->bmiHeader.biPlanes=1;
- lpBitmapinfo->bmiHeader.biBitCount=1;
- lpBitmapinfo->bmiHeader.biCompression=0L;
- lpBitmapinfo->bmiHeader.biSizeImage=0L;
- lpBitmapinfo->bmiHeader.biXPelsPerMeter=0L;
- lpBitmapinfo->bmiHeader.biYPelsPerMeter=0L;
- lpBitmapinfo->bmiHeader.biClrUsed=0L;
- lpBitmapinfo->bmiHeader.biClrImportant=0L;
- lpBitmapinfo->bmiColors[0].rgbRed=0;
- lpBitmapinfo->bmiColors[0].rgbGreen=0;
- lpBitmapinfo->bmiColors[0].rgbBlue=0;
- lpBitmapinfo->bmiColors[1].rgbRed=0xff;
- lpBitmapinfo->bmiColors[1].rgbGreen=0xff;
- lpBitmapinfo->bmiColors[1].rgbBlue=0xff;
-
- hDC=GetDC(NULL);
-
- _llseek(hFile,BegPos+Groesse+Size,0);
- count=_lread(hFile,(LPSTR)lpMem,(WORD)Size1);
-
- *lphANDBitmap = CreateDIBitmap(hDC,(LPBITMAPINFOHEADER)&(lpBitmapinfo->bmiHeader),CBM_INIT,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapinfo, DIB_RGB_COLORS);
- ReleaseDC(NULL,hDC);
- GlobalUnlock(hBitmapinfoMem);
- GlobalUnlock(hMem);
- GlobalFree(hBitmapinfoMem);
- GlobalFree(hMem);
- }
- }
- }
- }
- }
- else
- {
- MessageBox(hWnd, "Bitmap konnte nicht erstellt werden !" ,NULL,MB_OK|MB_ICONHAND);
- return FALSE;
- }
- }
- }
- }
- }
- return TRUE;
- }
-
- DWORD SaveIcon(hXORBitmap, hANDBitmap, hPal, BegPos, hFile, hWnd, BitPix)
- HBITMAP hXORBitmap;
- HBITMAP hANDBitmap;
- HPALETTE hPal;
- DWORD BegPos;
- WORD hFile;
- HWND hWnd;
- WORD BitPix;
- {
-
- HDC hDC;
- DWORD Size;
- DWORD Groesse;
- DWORD Size1;
- LPBITMAPINFO lpBitmapinfo;
- LPSTR lpMem;
- HANDLE hBitmapinfoMem;
- HANDLE hMem;
- int count;
- WORD PalEntrys;
- BITMAP Bitmap;
- DWORD OverBound;
-
- GetObject(hXORBitmap,sizeof(BITMAP),(LPSTR)&Bitmap);
- GetObject(hPal,2,(LPSTR)&PalEntrys);
- Groesse = sizeof(BITMAPINFOHEADER)+PalEntrys*sizeof(RGBQUAD);
-
- if ((hBitmapinfoMem = GlobalAlloc(GMEM_MOVEABLE,Groesse)) != NULL)
- {
- if((lpBitmapinfo = (LPBITMAPINFO)GlobalLock(hBitmapinfoMem)) != NULL)
- {
- lpBitmapinfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- lpBitmapinfo->bmiHeader.biWidth = Bitmap.bmWidth;
- lpBitmapinfo->bmiHeader.biHeight = Bitmap.bmHeight;
- lpBitmapinfo->bmiHeader.biPlanes = 1;
- lpBitmapinfo->bmiHeader.biBitCount = BitPix;
- lpBitmapinfo->bmiHeader.biCompression = 0;
- lpBitmapinfo->bmiHeader.biSizeImage = 0;
- lpBitmapinfo->bmiHeader.biXPelsPerMeter = 0;
- lpBitmapinfo->bmiHeader.biYPelsPerMeter = 0;
- lpBitmapinfo->bmiHeader.biClrUsed = 0;
- lpBitmapinfo->bmiHeader.biClrImportant = 0;
-
- hDC=GetDC(NULL);
-
- SelectPalette(hDC,hPal,0);
- RealizePalette(hDC);
- GetDIBits(hDC,hXORBitmap,0,(WORD)lpBitmapinfo->bmiHeader.biHeight,NULL,(LPBITMAPINFO)lpBitmapinfo,DIB_RGB_COLORS);
- Size = lpBitmapinfo->bmiHeader.biWidth*lpBitmapinfo->bmiHeader.biHeight*lpBitmapinfo->bmiHeader.biBitCount/8;
-
-
-
- if ((hMem = GlobalAlloc(GMEM_MOVEABLE,Size)) != NULL)
- {
- if((lpMem = GlobalLock(hMem)) != (LPSTR) NULL)
- {
- count = GetDIBits(hDC,hXORBitmap,0,(WORD)lpBitmapinfo->bmiHeader.biHeight,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapinfo,DIB_RGB_COLORS);
- ReleaseDC(NULL,hDC);
-
- Size1=lpBitmapinfo->bmiHeader.biWidth*lpBitmapinfo->bmiHeader.biHeight/8;
- OverBound=(lpBitmapinfo->bmiHeader.biWidth/8)%sizeof(LONG);
- if(OverBound) Size1+=(sizeof(LONG)-OverBound)*lpBitmapinfo->bmiHeader.biHeight;
-
- lpBitmapinfo->bmiHeader.biSizeImage += Size1;
- lpBitmapinfo->bmiHeader.biHeight*=2;
- _llseek(hFile,BegPos,0);
-
- if((count=_lwrite(hFile,(LPSTR)lpBitmapinfo,(WORD)Groesse))!=Groesse)
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock(hMem);
- GlobalFree(hMem);
- GlobalUnlock(hBitmapinfoMem);
- GlobalFree(hBitmapinfoMem);
- return(FALSE);
- }
-
- _llseek(hFile,BegPos+Groesse,0);
-
- if((count=_lwrite(hFile,lpMem,(WORD)Size))!=Size)
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock(hMem);
- GlobalFree(hMem);
- GlobalUnlock(hBitmapinfoMem);
- GlobalFree(hBitmapinfoMem);
- return(FALSE);
- }
-
- GlobalUnlock(hMem);
- GlobalFree(hMem);
- GlobalUnlock(hBitmapinfoMem);
- GlobalFree(hBitmapinfoMem);
- GetObject(hXORBitmap,sizeof(BITMAP),(LPSTR)&Bitmap);
- Size1=Bitmap.bmWidth*Bitmap.bmHeight/8;
- OverBound=(Bitmap.bmWidth/8)%sizeof(LONG);
- if(OverBound) Size1+=(sizeof(LONG)-OverBound)*Bitmap.bmHeight;
-
-
- if ((hMem = GlobalAlloc(GMEM_MOVEABLE,Size1)) != NULL)
- {
- if((lpMem = GlobalLock(hMem)) != (LPSTR) NULL)
- {
- if ((hBitmapinfoMem = GlobalAlloc(GMEM_MOVEABLE,sizeof(BITMAPINFOHEADER)+2*sizeof(RGBQUAD))) != NULL)
- {
- if((lpBitmapinfo = (LPBITMAPINFO)GlobalLock(hBitmapinfoMem)) != NULL)
- {
- lpBitmapinfo->bmiHeader.biSize=(long)sizeof(BITMAPINFOHEADER);
- lpBitmapinfo->bmiHeader.biWidth=Bitmap.bmWidth;
- lpBitmapinfo->bmiHeader.biHeight=Bitmap.bmHeight;
- lpBitmapinfo->bmiHeader.biPlanes=1;
- lpBitmapinfo->bmiHeader.biBitCount=1;
- lpBitmapinfo->bmiHeader.biCompression=0L;
- lpBitmapinfo->bmiHeader.biSizeImage=0L;
- lpBitmapinfo->bmiHeader.biXPelsPerMeter=0L;
- lpBitmapinfo->bmiHeader.biYPelsPerMeter=0L;
- lpBitmapinfo->bmiHeader.biClrUsed=0L;
- lpBitmapinfo->bmiHeader.biClrImportant=0L;
- lpBitmapinfo->bmiColors[0].rgbRed=0;
- lpBitmapinfo->bmiColors[0].rgbGreen=0;
- lpBitmapinfo->bmiColors[0].rgbBlue=0;
- lpBitmapinfo->bmiColors[1].rgbRed=0xff;
- lpBitmapinfo->bmiColors[1].rgbGreen=0xff;
- lpBitmapinfo->bmiColors[1].rgbBlue=0xff;
-
- hDC=GetDC(NULL);
-
- count = GetDIBits(hDC,hANDBitmap,0,(WORD)lpBitmapinfo->bmiHeader.biHeight,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapinfo,DIB_RGB_COLORS);
-
- ReleaseDC(NULL,hDC);
-
- _llseek(hFile,BegPos+Groesse+Size,0);
-
- if((count=_lwrite(hFile,(LPSTR)lpMem,(WORD)Size1))!=Size1)
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock(hBitmapinfoMem);
- GlobalUnlock(hMem);
- GlobalFree(hBitmapinfoMem);
- GlobalFree(hMem);
- return (FALSE);
- }
-
- GlobalUnlock(hBitmapinfoMem);
- GlobalUnlock(hMem);
- GlobalFree(hBitmapinfoMem);
- GlobalFree(hMem);
- }
- }
- }
- }
- }
- }
- }
- }
-
- return(Groesse+Size+Size1);
- }
-
- BOOL DelAllIcons(lphXORBmpMem,lphANDBmpMem,lphPalMem,lphResDirMem,lpQuantity,hWnd)
- HANDLE FAR *lphXORBmpMem;
- HANDLE FAR *lphANDBmpMem;
- HANDLE FAR *lphPalMem;
- HANDLE FAR *lphResDirMem;
- WORD FAR *lpQuantity;
- HWND hWnd;
- {
- HBITMAP FAR *lphXORBitmap;
- HBITMAP FAR *lphANDBitmap;
- HPALETTE FAR *lphPal;
- ICONRESOURCE FAR *lpResDir;
- int i;
-
- lphXORBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphXORBmpMem);
- lphANDBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphANDBmpMem);
- lphPal = (HPALETTE FAR*)GlobalLock((HANDLE)*lphPalMem);
-
- for(i=0;i<*lpQuantity;i++)
- {
- DeleteObject(lphXORBitmap[i]);
- DeleteObject(lphANDBitmap[i]);
- DeleteObject(lphPal[i]);
- }
-
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
-
- *lphXORBmpMem = GlobalReAlloc(*lphXORBmpMem,1,GMEM_MOVEABLE);
- *lphANDBmpMem = GlobalReAlloc(*lphANDBmpMem,1,GMEM_MOVEABLE);
- *lphPalMem = GlobalReAlloc(*lphPalMem,1,GMEM_MOVEABLE);
- *lphResDirMem = GlobalReAlloc(*lphResDirMem,1,GMEM_MOVEABLE);
- *lpQuantity=0;
- return TRUE;
-
- }
-
- BOOL RetrieveIconFile(lphXORBmpMem,lphANDBmpMem,lphPalMem,lphResDirMem,hFile,hWnd,lpQuantity)
- HANDLE FAR *lphXORBmpMem;
- HANDLE FAR *lphANDBmpMem;
- HANDLE FAR *lphPalMem;
- HANDLE FAR *lphResDirMem;
- HANDLE hFile;
- HWND hWnd;
- WORD FAR *lpQuantity;
- {
-
- HBITMAP FAR *lphXORBitmap;
- HBITMAP FAR *lphANDBitmap;
- HPALETTE FAR *lphPal;
- ICONRESOURCE FAR *lpResDir;
- WORD i;
- DWORD count;
- ICONFILEHEADER IconFileHeader;
-
-
- _llseek(hFile,0,0);
- count = _lread(hFile,(LPSTR)&IconFileHeader,sizeof(ICONFILEHEADER));
-
- if(IconFileHeader.icoResourceCount==0)
- {
- MessageBox(hWnd, "Die gewΣhlte Datei enthΣlt keine Icons, Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- return(FALSE);
- }
-
- if((IconFileHeader.icoReserved==0)&&(IconFileHeader.icoResourceType==1))
- {
- lphXORBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphXORBmpMem);
- lphANDBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphANDBmpMem);
- lphPal = (HPALETTE FAR*)GlobalLock((HANDLE)*lphPalMem);
-
- for(i=0;i<*lpQuantity;i++)
- {
- DeleteObject(lphXORBitmap[i]);
- DeleteObject(lphANDBitmap[i]);
- DeleteObject(lphPal[i]);
- }
-
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
-
- *lpQuantity=IconFileHeader.icoResourceCount;
-
- if ((*lphXORBmpMem = (HANDLE)GlobalReAlloc((HANDLE)*lphXORBmpMem,sizeof(HBITMAP)*(*lpQuantity),GMEM_MOVEABLE)) != NULL)
- {
- if((*lphANDBmpMem = (HANDLE)GlobalReAlloc((HANDLE)*lphANDBmpMem,sizeof(HBITMAP)*(*lpQuantity),GMEM_MOVEABLE)) != NULL)
- {
- if((*lphPalMem = (HANDLE)GlobalReAlloc((HANDLE)*lphPalMem,sizeof(HPALETTE)*(*lpQuantity),GMEM_MOVEABLE)) != NULL)
- {
- if((*lphResDirMem = (HANDLE)GlobalReAlloc((HANDLE)*lphResDirMem,sizeof(ICONRESOURCE)*(*lpQuantity),GMEM_MOVEABLE)) != NULL)
- {
- lphXORBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphXORBmpMem);
- lphANDBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphANDBmpMem);
- lphPal = (HPALETTE FAR*)GlobalLock((HANDLE)*lphPalMem);
- lpResDir = (ICONRESOURCE FAR*)GlobalLock((HANDLE)*lphResDirMem);
-
- for (i=0;i<*lpQuantity;i++)
- {
- _llseek(hFile,count,0);
- count += _lread(hFile,(LPSTR)&(lpResDir[i]),sizeof(ICONRESOURCE));
-
- if((lpResDir[i].ColorCount==2)|(lpResDir[i].ColorCount==8)|(lpResDir[i].ColorCount==16))
- {
- if(RetrieveIcon(&(lphXORBitmap[i]),&(lphANDBitmap[i]),&(lphPal[i]),lpResDir[i].icoDIBOffset, hFile,hWnd)==FALSE)
- {
- *lpQuantity=0;
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return FALSE;
- }
- if(lpResDir[i].ColorCount==8) lpResDir[i].ColorCount=16;
- }
- else
- {
- MessageBox(hWnd, "Icon mit ungⁿltiger Farbenanzahl in Datei enthalten !\nLadevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- *lpQuantity=0;
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return FALSE;
- }
- }
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- }
- else
- {
- MessageBox(hWnd, "Nicht genⁿgend freier Speicher, um Datei zu laden ! Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- *lpQuantity=0;
- return FALSE;
- }
- }
- else
- {
- MessageBox(hWnd, "Nicht genⁿgend freier Speicher, um Datei zu laden ! Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- *lpQuantity=0;
- return FALSE;
- }
- }
- else
- {
- MessageBox(hWnd, "Nicht genⁿgend freier Speicher, um Datei zu laden ! Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- *lpQuantity=0;
- return FALSE;
- }
- }
- else
- {
- MessageBox(hWnd, "Nicht genⁿgend freier Speicher, um Datei zu laden ! Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- *lpQuantity=0;
- return FALSE;
- }
- return(TRUE);
- }
- else
- {
- MessageBox(hWnd, "Die gewΣhlte Datei ist keine gⁿltige Icon-Datei, Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- return(FALSE);
- }
- }
-
- BOOL SaveIconFile(lphXORBmpMem,lphANDBmpMem,lphPalMem,lphResDirMem,hFile, hWnd, Quantity)
- HANDLE FAR *lphXORBmpMem;
- HANDLE FAR *lphANDBmpMem;
- HANDLE FAR *lphPalMem;
- HANDLE FAR *lphResDirMem;
- HANDLE hFile;
- HWND hWnd;
- WORD Quantity;
- {
-
- HBITMAP FAR *lphXORBitmap;
- HBITMAP FAR *lphANDBitmap;
- HPALETTE FAR *lphPal;
- ICONRESOURCE FAR *lpResDir;
- ICONFILEHEADER IconFileHeader;
- DWORD count;
- DWORD count1;
- DWORD Groesse;
-
- if (hFile)
- {
- lphXORBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphXORBmpMem);
- lphANDBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphANDBmpMem);
- lphPal = (HPALETTE FAR*)GlobalLock((HANDLE)*lphPalMem);
- lpResDir = (ICONRESOURCE FAR*)GlobalLock((HANDLE)*lphResDirMem);
- IconFileHeader.icoReserved=0;
- IconFileHeader.icoResourceType=1;
- IconFileHeader.icoResourceCount=Quantity;
-
- _llseek(hFile,0,0);
-
- if((count=_lwrite(hFile,(LPSTR)&IconFileHeader,sizeof(ICONFILEHEADER)))!=sizeof(ICONFILEHEADER))
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return FALSE;
- }
-
- for (i=0;i<Quantity;i++)
- {
- _llseek(hFile,count,0);
-
- if((count1=_lwrite(hFile,(LPSTR)&(lpResDir[i]),sizeof(ICONRESOURCE)))!=sizeof(ICONRESOURCE))
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return FALSE;
- }
-
- count+=count1;
- }
-
- for (i=0;i<Quantity;i++)
- {
- _llseek(hFile,18+(16*i),0);
-
- if((_lwrite(hFile,(LPSTR)&count,sizeof(DWORD)))!=sizeof(DWORD))
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return FALSE;
- }
-
- if((Groesse = SaveIcon(lphXORBitmap[i],lphANDBitmap[i],lphPal[i],count,hFile,hWnd,(WORD)ColBit(lpResDir[i].ColorCount)))==FALSE)
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return FALSE;
- }
-
- _llseek(hFile,14+(16*i),0);
-
- if((_lwrite(hFile,(LPSTR)&Groesse,sizeof(DWORD)))!=sizeof(DWORD))
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return FALSE;
- }
-
- count+=Groesse;
- }
-
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return TRUE;
- }
-
- return FALSE;
- }
-
-
- BOOL DelIcon(lphXORBmpMem,lphANDBmpMem,lphPalMem,lphResDirMem,lpQuantity,hWnd,CurrIcon)
- HANDLE FAR *lphXORBmpMem;
- HANDLE FAR *lphANDBmpMem;
- HANDLE FAR *lphPalMem;
- HANDLE FAR *lphResDirMem;
- WORD FAR *lpQuantity;
- HWND hWnd;
- int CurrIcon;
- {
- int i;
-
- FARPROC lpDlgSelIcon;
- HBITMAP FAR *lphXORBitmap;
- HBITMAP FAR *lphANDBitmap;
- HPALETTE FAR *lphPal;
- ICONRESOURCE FAR *lpResDir;
-
- lphXORBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphXORBmpMem);
- lphANDBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphANDBmpMem);
- lphPal = (HPALETTE FAR*)GlobalLock((HANDLE)*lphPalMem);
- lpResDir = (ICONRESOURCE FAR*)GlobalLock((HANDLE)*lphResDirMem);
-
- DeleteObject(lphXORBitmap[CurrIcon]);
- DeleteObject(lphANDBitmap[CurrIcon]);
- DeleteObject(lphPal[CurrIcon]);
-
- for (i=CurrIcon;i<(*lpQuantity)-1;i++)
- {
- lphXORBitmap[i]=lphXORBitmap[i+1];
- lphANDBitmap[i]=lphANDBitmap[i+1];
- lphPal[i]=lphPal[i+1];
- lpResDir[i]=lpResDir[i+1];
- }
-
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
-
- (*lpQuantity)--;
-
- if(*lpQuantity<1)
- {
- *lphXORBmpMem = (HANDLE)GlobalReAlloc((HANDLE)*lphXORBmpMem,1,GMEM_MOVEABLE);
- *lphANDBmpMem = (HANDLE)GlobalReAlloc((HANDLE)*lphANDBmpMem,1,GMEM_MOVEABLE);
- *lphPalMem = (HANDLE)GlobalReAlloc((HANDLE)*lphPalMem,1,GMEM_MOVEABLE);
- *lphResDirMem = (HANDLE)GlobalReAlloc((HANDLE)*lphResDirMem,1,GMEM_MOVEABLE);
- }
- else
- {
- *lphXORBmpMem = (HANDLE)GlobalReAlloc((HANDLE)*lphXORBmpMem,sizeof(HBITMAP)*(*lpQuantity),GMEM_MOVEABLE);
- *lphANDBmpMem = (HANDLE)GlobalReAlloc((HANDLE)*lphANDBmpMem,sizeof(HBITMAP)*(*lpQuantity),GMEM_MOVEABLE);
- *lphPalMem = (HANDLE)GlobalReAlloc((HANDLE)*lphPalMem,sizeof(HPALETTE)*(*lpQuantity),GMEM_MOVEABLE);
- *lphResDirMem = (HANDLE)GlobalReAlloc((HANDLE)*lphResDirMem,sizeof(ICONRESOURCE)*(*lpQuantity),GMEM_MOVEABLE);
- }
- return TRUE;
- }
-
- BYTE ColBit(Farben)
- BYTE Farben;
- {
- switch(Farben)
- {
- case 2:
- return 1;
- break;
- case 8:
- case 16:
- return 4;
- break;
- }
- return 0;
- }
-
- BYTE BitCol(Bits)
- BYTE Bits;
- {
- switch(Bits)
- {
- case 1:
- return 2;
- case 4:
- return 16;
- case 8:
- return 256;
- }
- return 0;
- }
-
- BOOL RetrieveIconFile2(lphXORBmpMem,lphANDBmpMem,lphPalMem,lphResDirMem,hFile,hWnd,lpQuantity)
- HANDLE FAR *lphXORBmpMem;
- HANDLE FAR *lphANDBmpMem;
- HANDLE FAR *lphPalMem;
- HANDLE FAR *lphResDirMem;
- HANDLE hFile;
- HWND hWnd;
- WORD FAR *lpQuantity;
- {
-
- HBITMAP FAR *lphXORBitmap;
- HBITMAP FAR *lphANDBitmap;
- HPALETTE FAR *lphPal;
- ICONRESOURCE FAR *lpResDir;
- WORD i;
- char ID[2];
- DWORD count;
- DWORD Info1Start;
- DWORD Info2Start;
- BITMAPFILEHEADER2 BitmapFileHeader2AND;
- BITMAPFILEHEADER2 BitmapFileHeader2XOR;
- BITMAPARRAYFILEHEADER2 BitmapArrayFileHeader2;
-
- _llseek(hFile, 0,0);
- _lread(hFile,ID,2);
-
- if((ID[0]=='B')&&(ID[1]=='A'))
- {
- lphXORBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphXORBmpMem);
- lphANDBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphANDBmpMem);
- lphPal = (HPALETTE FAR*)GlobalLock((HANDLE)*lphPalMem);
-
- for(i=0;i<*lpQuantity;i++)
- {
- DeleteObject(lphXORBitmap[i]);
- DeleteObject(lphANDBitmap[i]);
- DeleteObject(lphPal[i]);
- }
-
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
-
- count=0;
- *lpQuantity=0;
- i=0;
-
- do
- {
- (*lpQuantity)++;
- if ((*lphXORBmpMem = (HANDLE)GlobalReAlloc((HANDLE)*lphXORBmpMem,sizeof(HBITMAP)*(*lpQuantity),GMEM_MOVEABLE)) != NULL)
- {
- if((*lphANDBmpMem = (HANDLE)GlobalReAlloc((HANDLE)*lphANDBmpMem,sizeof(HBITMAP)*(*lpQuantity),GMEM_MOVEABLE)) != NULL)
- {
- if((*lphPalMem = (HANDLE)GlobalReAlloc((HANDLE)*lphPalMem,sizeof(HPALETTE)*(*lpQuantity),GMEM_MOVEABLE)) != NULL)
- {
- if((*lphResDirMem = (HANDLE)GlobalReAlloc((HANDLE)*lphResDirMem,sizeof(ICONRESOURCE)*(*lpQuantity),GMEM_MOVEABLE)) != NULL)
- {
- lphXORBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphXORBmpMem);
- lphANDBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphANDBmpMem);
- lphPal = (HPALETTE FAR*)GlobalLock((HANDLE)*lphPalMem);
- lpResDir = (ICONRESOURCE FAR*)GlobalLock((HANDLE)*lphResDirMem);
-
- _llseek(hFile,count,0);
- count += _lread(hFile,(LPSTR)&(BitmapArrayFileHeader2),sizeof(BITMAPARRAYFILEHEADER2));
- count += _lread(hFile,(LPSTR)&(BitmapFileHeader2AND),sizeof(BITMAPFILEHEADER));
- Info1Start=count;
-
- switch(BitmapFileHeader2AND.usType)
- {
- case 0x4943:
- count += sizeof(BITMAPCOREHEADER)+2*sizeof(RGBTRIPLE);
- _llseek(hFile,count,0);
- count += _lread(hFile,(LPSTR)&(BitmapFileHeader2XOR),sizeof(BITMAPFILEHEADER));
- Info2Start=count;
- break;
- case 0x4349:
- Info2Start=Info1Start;
- Info1Start=0;
- BitmapFileHeader2XOR.offBits=BitmapFileHeader2AND.offBits;
- BitmapFileHeader2AND.offBits=0;
- break;
- }
-
- count=BitmapArrayFileHeader2.offNext;
-
- if(RetrieveIcon2(&(lphXORBitmap[i]),&(lphANDBitmap[i]),&(lphPal[i]),&(lpResDir[i]),BitmapFileHeader2AND.offBits,BitmapFileHeader2XOR.offBits, Info1Start, Info2Start, hFile,hWnd)==FALSE)
- {
- *lpQuantity=0;
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return FALSE;
- }
-
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- }
- else
- {
- MessageBox(hWnd, "Nicht genⁿgend freier Speicher, um Datei zu laden ! Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- *lpQuantity=0;
- return FALSE;
- }
- }
- else
- {
- MessageBox(hWnd, "Nicht genⁿgend freier Speicher, um Datei zu laden ! Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- *lpQuantity=0;
- return FALSE;
- }
- }
- else
- {
- MessageBox(hWnd, "Nicht genⁿgend freier Speicher, um Datei zu laden ! Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- *lpQuantity=0;
- return FALSE;
- }
- }
- else
- {
- MessageBox(hWnd, "Nicht genⁿgend freier Speicher, um Datei zu laden ! Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- *lpQuantity=0;
- return FALSE;
- }
- i++;
- }
- while(count!=0);
- return(TRUE);
- }
- else
- {
- MessageBox(hWnd, "Die gewΣhlte Datei ist keine gⁿltige Icon-Datei, Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- return(FALSE);
- }
- }
-
- RetrieveIcon2(lphXORBitmap,lphANDBitmap,lphPal,lpResDir,BegPosData1,BegPosData2,BegPosInfo1,BegPosInfo2,hFile,hWnd)
- HBITMAP FAR *lphXORBitmap;
- HBITMAP FAR *lphANDBitmap;
- HPALETTE FAR *lphPal;
- ICONRESOURCE FAR *lpResDir;
- DWORD BegPosData1;
- DWORD BegPosData2;
- DWORD BegPosInfo1;
- DWORD BegPosInfo2;
- int hFile;
- HWND hWnd;
- {
- HDC hDC;
- HDC hDC1;
- HDC hDC2;
- HDC hDC3;
- DWORD Size;
- DWORD Groesse;
- DWORD Size1;
- DWORD OverBound;
- WORD PalEntrys;
- BITMAPCOREINFO BitmapCoreInfo;
- LPBITMAPCOREINFO lpBitmapCoreInfo;
- LPSTR lpMem;
- HANDLE hBitmapCoreInfoMem;
- HANDLE hMem;
- int count;
- int i;
- int j;
- RGBTRIPLE FAR *pRgb;
- LOGPALETTE *pPal;
- WORD FAR *pw;
- HBITMAP hXORBitmap;
- HBITMAP hOldBitmap1;
- HBITMAP hOldBitmap2;
- HBITMAP hOldBitmap3;
-
- _llseek(hFile,BegPosInfo2,0);
- count = _lread(hFile,(LPSTR)&BitmapCoreInfo.bmciHeader,sizeof(BITMAPCOREHEADER));
-
- if(BegPosData1==0) BitmapCoreInfo.bmciHeader.bcHeight/=2;
-
- PalEntrys=(WORD)BitCol((BYTE)BitmapCoreInfo.bmciHeader.bcBitCount);
-
- lpResDir->Width=BitmapCoreInfo.bmciHeader.bcWidth;
- lpResDir->Height=BitmapCoreInfo.bmciHeader.bcHeight;
- lpResDir->ColorCount=PalEntrys;
- lpResDir->Reserved1=0;
- lpResDir->Reserved2=0;
- lpResDir->Reserved3=0;
-
- if ((PalEntrys!=2)&&(PalEntrys!=16)&&(PalEntrys!=256))
- {
- MessageBox(hWnd, "Die gewΣhlte Datei ist keine gⁿltige Icon-Datei, Ladevorgang wird abgebrochen !" ,NULL,MB_OK|MB_ICONHAND);
- return(FALSE);
- }
-
- Groesse = sizeof(BITMAPCOREHEADER)+PalEntrys*sizeof(RGBTRIPLE);
- Size = BitmapCoreInfo.bmciHeader.bcWidth*BitmapCoreInfo.bmciHeader.bcHeight*BitmapCoreInfo.bmciHeader.bcBitCount/8;
-
- if ((hBitmapCoreInfoMem = GlobalAlloc(GMEM_MOVEABLE,Groesse)) != NULL)
- {
- if ((hMem = GlobalAlloc(GMEM_MOVEABLE,Size)) != NULL)
- {
- if((lpBitmapCoreInfo = (LPBITMAPCOREINFO)GlobalLock(hBitmapCoreInfoMem)) != NULL)
- {
- if((lpMem = GlobalLock(hMem)) != (LPSTR) NULL)
- {
- _llseek(hFile,BegPosInfo2,0);
- count = _lread(hFile,(LPSTR)lpBitmapCoreInfo,(WORD)Groesse);
-
- if(BegPosData1==0) lpBitmapCoreInfo->bmciHeader.bcHeight/=2;
-
- _llseek(hFile,BegPosData2,0);
- count= _lread(hFile,(LPSTR)lpMem, (WORD)Size);
-
- hDC = GetDC(NULL);
-
- pRgb = (RGBTRIPLE FAR *)((LPSTR)lpBitmapCoreInfo->bmciColors);
- pPal = (LOGPALETTE*)LocalAlloc(LPTR,sizeof(LOGPALETTE) + PalEntrys * sizeof(PALETTEENTRY));
-
- if (!pPal)
- return FALSE;
-
- pPal->palNumEntries = PalEntrys;
- pPal->palVersion = 0x300;
-
- for (i = 0; i < PalEntrys; i++)
- {
- pPal->palPalEntry[i].peRed = pRgb[i].rgbtRed;
- pPal->palPalEntry[i].peGreen = pRgb[i].rgbtGreen;
- pPal->palPalEntry[i].peBlue = pRgb[i].rgbtBlue;
- pPal->palPalEntry[i].peFlags = (BYTE)0;
- }
-
- *lphPal = CreatePalette(pPal);
- LocalFree((HANDLE)pPal);
- pw = (WORD FAR *)((LPSTR)lpBitmapCoreInfo->bmciColors);
-
- for (i=0; i<(int)PalEntrys; i++)
- *pw++ = (WORD)i;
-
- if (*lphPal)
- {
- SelectPalette(hDC,*lphPal,FALSE);
- RealizePalette(hDC);
- }
-
- *lphXORBitmap=CreateDIBitmap(hDC,(LPBITMAPINFOHEADER)&(lpBitmapCoreInfo->bmciHeader),CBM_INIT,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapCoreInfo,DIB_PAL_COLORS);
- ReleaseDC(NULL,hDC);
- GlobalUnlock(hMem);
- GlobalFree(hMem);
- GlobalUnlock(hBitmapCoreInfoMem);
- GlobalFree(hBitmapCoreInfoMem);
- if (*lphXORBitmap)
- {
- Size1=BitmapCoreInfo.bmciHeader.bcWidth*BitmapCoreInfo.bmciHeader.bcHeight/8;
- OverBound=(BitmapCoreInfo.bmciHeader.bcWidth/8)%sizeof(LONG);
- if(OverBound) Size1+=(sizeof(LONG)-OverBound)*BitmapCoreInfo.bmciHeader.bcHeight;
-
- Groesse = sizeof(BITMAPCOREHEADER)+2*sizeof(RGBTRIPLE);
- if ((hMem = GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,Size1)) != NULL)
- {
- if ((hBitmapCoreInfoMem = GlobalAlloc(GMEM_MOVEABLE,Groesse)) != NULL)
- {
- if((lpMem = GlobalLock(hMem)) != (LPSTR) NULL)
- {
- if((lpBitmapCoreInfo = (LPBITMAPCOREINFO)GlobalLock(hBitmapCoreInfoMem)) != NULL)
- {
- if(BegPosInfo1!=0)
- {
- _llseek(hFile,BegPosInfo1,0);
- count = _lread(hFile,(LPSTR)lpBitmapCoreInfo,(WORD)Groesse);
-
-
- lpBitmapCoreInfo->bmciHeader.bcHeight/=2;
-
- hDC=GetDC(NULL);
-
- _llseek(hFile,BegPosData1,0);
- count=_lread(hFile,(LPSTR)lpMem,(WORD)Size1);
-
- hXORBitmap = CreateDIBitmap(hDC,(LPBITMAPINFOHEADER)&(lpBitmapCoreInfo->bmciHeader),CBM_INIT,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapCoreInfo, DIB_RGB_COLORS);
-
- count=_lread(hFile,(LPSTR)lpMem,(WORD)Size1);
- *lphANDBitmap = CreateDIBitmap(hDC,(LPBITMAPINFOHEADER)&(lpBitmapCoreInfo->bmciHeader),CBM_INIT,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapCoreInfo, DIB_RGB_COLORS);
-
- GlobalUnlock(hBitmapCoreInfoMem);
- GlobalUnlock(hMem);
- GlobalFree(hBitmapCoreInfoMem);
- GlobalFree(hMem);
-
- hDC1=CreateCompatibleDC(hDC);
- hDC2=CreateCompatibleDC(hDC);
- hDC3=CreateCompatibleDC(hDC);
-
- ReleaseDC(NULL,hDC);
-
- hOldBitmap1=SelectObject(hDC1,*lphXORBitmap);
- hOldBitmap2=SelectObject(hDC2,*lphANDBitmap);
- hOldBitmap3=SelectObject(hDC3,hXORBitmap);
-
- for(i=0;i<lpResDir->Width;i++)
- {
- for(j=0;j<lpResDir->Height;j++)
- {
- if(GetPixel(hDC2,i,j)==RGB(255,255,255))
- SetPixel(hDC1,i,j,GetPixel(hDC3,i,j));
- }
- }
-
- SelectObject(hDC1,hOldBitmap1);
- SelectObject(hDC2,hOldBitmap2);
- SelectObject(hDC3,hOldBitmap3);
-
- DeleteDC(hDC1);
- DeleteDC(hDC2);
- DeleteDC(hDC3);
-
- DeleteObject(hXORBitmap);
- }
- else
- {
- lpBitmapCoreInfo->bmciHeader.bcSize=(long)sizeof(BITMAPCOREHEADER);
- lpBitmapCoreInfo->bmciHeader.bcWidth=BitmapCoreInfo.bmciHeader.bcWidth;
- lpBitmapCoreInfo->bmciHeader.bcHeight=BitmapCoreInfo.bmciHeader.bcHeight;
- lpBitmapCoreInfo->bmciHeader.bcPlanes=1;
- lpBitmapCoreInfo->bmciHeader.bcBitCount=1;
- lpBitmapCoreInfo->bmciColors[0].rgbtRed=0;
- lpBitmapCoreInfo->bmciColors[0].rgbtGreen=0;
- lpBitmapCoreInfo->bmciColors[0].rgbtBlue=0;
- lpBitmapCoreInfo->bmciColors[1].rgbtRed=0xff;
- lpBitmapCoreInfo->bmciColors[1].rgbtGreen=0xff;
- lpBitmapCoreInfo->bmciColors[1].rgbtBlue=0xff;
-
- _llseek(hFile,BegPosData2+Size,0);
- count= _lread(hFile,(LPSTR)lpMem, (WORD)Size);
-
- hDC=GetDC(NULL);
- *lphANDBitmap = CreateDIBitmap(hDC,(LPBITMAPINFOHEADER)&(lpBitmapCoreInfo->bmciHeader),CBM_INIT,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapCoreInfo, DIB_RGB_COLORS);
- ReleaseDC(NULL,hDC);
-
- GlobalUnlock(hBitmapCoreInfoMem);
- GlobalUnlock(hMem);
- GlobalFree(hBitmapCoreInfoMem);
- GlobalFree(hMem);
-
- }
- }
- }
- }
- }
- }
- else
- {
- MessageBox(hWnd, "Bitmap konnte nicht erstellt werden !" ,NULL,MB_OK|MB_ICONHAND);
- return FALSE;
- }
- }
- }
- }
- }
- return TRUE;
- }
-
- BOOL CopyIcon(lphXORBitmap,lphANDBitmap,lphPal,lpResDir,CurrIcon,Quantity,CurrFile,hWnd)
- HBITMAP FAR **lphXORBitmap;
- HBITMAP FAR **lphANDBitmap;
- HPALETTE FAR **lphPal;
- ICONRESOURCE FAR **lpResDir;
- int CurrIcon;
- int Quantity;
- int CurrFile;
- HWND hWnd;
- {
-
- HDC hDC;
- DWORD Size;
- DWORD Groesse;
- DWORD Size1;
- LPBITMAPINFO lpBitmapinfo;
- LPSTR lpMem;
- HANDLE hBitmapinfoMem;
- HANDLE hMem;
- int count;
- WORD PalEntrys;
- DWORD OverBound;
- int OtherFile;
- RGBQUAD FAR *pRgb;
- LOGPALETTE *pPal;
- WORD FAR *pw;
- int result;
-
- if(CurrFile==0) OtherFile=1;
- if(CurrFile==1) OtherFile=0;
-
- GetObject(lphPal[CurrFile][CurrIcon],2,(LPSTR)&PalEntrys);
- Groesse = sizeof(BITMAPINFOHEADER)+PalEntrys*sizeof(RGBQUAD);
-
- Size = lpResDir[CurrFile][CurrIcon].Width*lpResDir[CurrFile][CurrIcon].Height*ColBit(lpResDir[CurrFile][CurrIcon].ColorCount)/8;
-
- if ((hBitmapinfoMem = GlobalAlloc(GMEM_MOVEABLE,Groesse)) != NULL)
- {
- if ((hMem = GlobalAlloc(GMEM_MOVEABLE,Size)) != NULL)
- {
- if((lpBitmapinfo = (LPBITMAPINFO)GlobalLock(hBitmapinfoMem)) != NULL)
- {
- if((lpMem = GlobalLock(hMem)) != (LPSTR) NULL)
- {
-
- lpBitmapinfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- lpBitmapinfo->bmiHeader.biWidth = lpResDir[CurrFile][CurrIcon].Width;
- lpBitmapinfo->bmiHeader.biHeight = lpResDir[CurrFile][CurrIcon].Height;
- lpBitmapinfo->bmiHeader.biPlanes = 1;
- lpBitmapinfo->bmiHeader.biBitCount = ColBit(lpResDir[CurrFile][CurrIcon].ColorCount);
- lpBitmapinfo->bmiHeader.biCompression = 0;
- lpBitmapinfo->bmiHeader.biSizeImage = 0;
- lpBitmapinfo->bmiHeader.biXPelsPerMeter = 0;
- lpBitmapinfo->bmiHeader.biYPelsPerMeter = 0;
- lpBitmapinfo->bmiHeader.biClrUsed = 0;
- lpBitmapinfo->bmiHeader.biClrImportant = 0;
-
- hDC=GetDC(NULL);
-
- SelectPalette(hDC,lphPal[CurrFile][CurrIcon],0);
- RealizePalette(hDC);
-
- result=GetDIBits(hDC, lphXORBitmap[CurrFile][CurrIcon], 0, (WORD)lpBitmapinfo->bmiHeader.biHeight, (LPSTR)lpMem, (LPBITMAPINFO)lpBitmapinfo, DIB_RGB_COLORS);
-
- pRgb = (RGBQUAD FAR *)((LPSTR)lpBitmapinfo->bmiColors);
- pPal = (LOGPALETTE*)LocalAlloc(LPTR,sizeof(LOGPALETTE) + PalEntrys * sizeof(PALETTEENTRY));
-
- if (!pPal)
- return FALSE;
-
- pPal->palNumEntries = PalEntrys;
- pPal->palVersion = 0x300;
-
- for (i = 0; i < PalEntrys; i++)
- {
- pPal->palPalEntry[i].peRed = pRgb[i].rgbRed;
- pPal->palPalEntry[i].peGreen = pRgb[i].rgbGreen;
- pPal->palPalEntry[i].peBlue = pRgb[i].rgbBlue;
- pPal->palPalEntry[i].peFlags = (BYTE)0;
- }
-
- lphPal[OtherFile][Quantity-1] = CreatePalette(pPal);
- LocalFree((HANDLE)pPal);
- pw = (WORD FAR *)((LPSTR)lpBitmapinfo->bmiColors);
-
- for (i=0; i<(int)lpBitmapinfo->bmiHeader.biClrUsed; i++)
- *pw++ = (WORD)i;
-
- if (lphPal[CurrFile][CurrIcon])
- {
- SelectPalette(hDC,lphPal[CurrFile][CurrIcon],FALSE);
- RealizePalette(hDC);
- }
-
- lphXORBitmap[OtherFile][Quantity-1]=CreateDIBitmap(hDC,(LPBITMAPINFOHEADER)&(lpBitmapinfo->bmiHeader),CBM_INIT,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapinfo,DIB_RGB_COLORS);
- ReleaseDC(NULL,hDC);
- GlobalUnlock(hMem);
- GlobalFree(hMem);
- GlobalUnlock(hBitmapinfoMem);
- GlobalFree(hBitmapinfoMem);
- if (lphXORBitmap[OtherFile][Quantity-1])
- {
- /*Size1=Bitmapinfo.bmiHeader.biWidth*Bitmapinfo.bmiHeader.biHeight/8;
- OverBound=(Bitmapinfo.bmiHeader.biWidth/8)%sizeof(LONG);
- if(OverBound) Size1+=(sizeof(LONG)-OverBound)*Bitmapinfo.bmiHeader.biHeight;*/
-
- Size1=lpResDir[CurrFile][CurrIcon].Width*lpResDir[CurrFile][CurrIcon].Height/8;
- OverBound=(lpResDir[CurrFile][CurrIcon].Width/8)%sizeof(LONG);
- if(OverBound) Size1+=(sizeof(LONG)-OverBound)*lpResDir[CurrFile][CurrIcon].Height;
-
- if ((hMem = GlobalAlloc(GMEM_MOVEABLE,Size1)) != NULL)
- {
- if ((hBitmapinfoMem = GlobalAlloc(GMEM_MOVEABLE,sizeof(BITMAPINFOHEADER)+2*sizeof(RGBQUAD))) != NULL)
- {
- if((lpMem = GlobalLock(hMem)) != (LPSTR) NULL)
- {
- if((lpBitmapinfo = (LPBITMAPINFO)GlobalLock(hBitmapinfoMem)) != NULL)
- {
- lpBitmapinfo->bmiHeader.biSize=(long)sizeof(BITMAPINFOHEADER);
- lpBitmapinfo->bmiHeader.biWidth=lpResDir[CurrFile][CurrIcon].Width;
- lpBitmapinfo->bmiHeader.biHeight=lpResDir[CurrFile][CurrIcon].Height;
- lpBitmapinfo->bmiHeader.biPlanes=1;
- lpBitmapinfo->bmiHeader.biBitCount=1;
- lpBitmapinfo->bmiHeader.biCompression=0L;
- lpBitmapinfo->bmiHeader.biSizeImage=0L;
- lpBitmapinfo->bmiHeader.biXPelsPerMeter=0L;
- lpBitmapinfo->bmiHeader.biYPelsPerMeter=0L;
- lpBitmapinfo->bmiHeader.biClrUsed=0L;
- lpBitmapinfo->bmiHeader.biClrImportant=0L;
- lpBitmapinfo->bmiColors[0].rgbRed=0;
- lpBitmapinfo->bmiColors[0].rgbGreen=0;
- lpBitmapinfo->bmiColors[0].rgbBlue=0;
- lpBitmapinfo->bmiColors[1].rgbRed=0xff;
- lpBitmapinfo->bmiColors[1].rgbGreen=0xff;
- lpBitmapinfo->bmiColors[1].rgbBlue=0xff;
-
- hDC=GetDC(NULL);
-
- result=GetDIBits(hDC, lphANDBitmap[CurrFile][CurrIcon], 0, (WORD)lpBitmapinfo->bmiHeader.biHeight, (LPSTR)lpMem, (LPBITMAPINFO)lpBitmapinfo, DIB_RGB_COLORS);
-
- lphANDBitmap[OtherFile][Quantity-1] = CreateDIBitmap(hDC,(LPBITMAPINFOHEADER)&(lpBitmapinfo->bmiHeader),CBM_INIT,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapinfo, DIB_RGB_COLORS);
- ReleaseDC(NULL,hDC);
- GlobalUnlock(hBitmapinfoMem);
- GlobalUnlock(hMem);
- GlobalFree(hBitmapinfoMem);
- GlobalFree(hMem);
- }
- }
- }
- }
- }
- else
- {
- MessageBox(hWnd, "Bitmap konnte nicht erstellt werden !" ,NULL,MB_OK|MB_ICONHAND);
- return FALSE;
- }
- }
- }
- }
- }
-
- return TRUE;
- }
-
- BOOL SaveIconFile2(lphXORBmpMem,lphANDBmpMem,lphPalMem,lphResDirMem,hFile, hWnd, Quantity)
- HANDLE FAR *lphXORBmpMem;
- HANDLE FAR *lphANDBmpMem;
- HANDLE FAR *lphPalMem;
- HANDLE FAR *lphResDirMem;
- HANDLE hFile;
- HWND hWnd;
- WORD Quantity;
- {
-
- HBITMAP FAR *lphXORBitmap;
- HBITMAP FAR *lphANDBitmap;
- HPALETTE FAR *lphPal;
- ICONRESOURCE FAR *lpResDir;
- BITMAPARRAYFILEHEADER2 BitmapArrayFileHeader2;
- BITMAPFILEHEADER2 BitmapFileHeader2;
- DWORD count=0;
- DWORD count1;
- DWORD Groesse;
- DWORD OverBound;
- DWORD Result;
- DWORD Result1;
-
- if (hFile)
- {
- lphXORBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphXORBmpMem);
- lphANDBitmap = (HBITMAP FAR*)GlobalLock((HANDLE)*lphANDBmpMem);
- lphPal = (HPALETTE FAR*)GlobalLock((HANDLE)*lphPalMem);
- lpResDir = (ICONRESOURCE FAR*)GlobalLock((HANDLE)*lphResDirMem);
-
-
- count1=Quantity*(sizeof(BITMAPARRAYFILEHEADER2)+2*sizeof(BITMAPFILEHEADER2)+2*sizeof(BITMAPCOREHEADER)+2*sizeof(RGBTRIPLE));
- for (i=0;i<Quantity;i++) count1+=lpResDir[i].ColorCount*sizeof(RGBTRIPLE);
-
-
- for (i=0;i<Quantity;i++)
- {
-
- Groesse=lpResDir[i].Width*lpResDir[i].Height/8;
- OverBound=(lpResDir[i].Width/8)%sizeof(LONG);
- if(OverBound) Groesse+=(sizeof(LONG)-OverBound)*lpResDir[i].Height;
-
- Groesse*=2;
-
- Result1=SaveIcon2(lphXORBitmap[i],
- lphANDBitmap[i],
- lphPal[i],
- count1+Groesse,
- count1,
- count+sizeof(BITMAPCOREHEADER)+2*sizeof(RGBTRIPLE)+2*sizeof(BITMAPFILEHEADER2)+sizeof(BITMAPARRAYFILEHEADER2),
- count+sizeof(BITMAPARRAYFILEHEADER2)+sizeof(BITMAPFILEHEADER2),
- hFile,
- hWnd,
- (WORD)ColBit(lpResDir[i].ColorCount));
-
-
- BitmapArrayFileHeader2.usType=0x4142;
- BitmapArrayFileHeader2.cbSize=sizeof(BITMAPARRAYFILEHEADER2)+sizeof(BITMAPFILEHEADER2)+sizeof(BITMAPCOREHEADER);
- BitmapArrayFileHeader2.offNext=(Quantity==(i+1))? 0:(count+sizeof(BITMAPARRAYFILEHEADER2)+2*sizeof(BITMAPFILEHEADER2)+2*sizeof(BITMAPCOREHEADER)+sizeof(RGBTRIPLE)*(2+lpResDir[i].ColorCount));
- BitmapArrayFileHeader2.cxDisplay=0;
- BitmapArrayFileHeader2.cyDisplay=0;
-
- _llseek(hFile,count,0);
-
- Result=_lwrite(hFile,(LPSTR)&BitmapArrayFileHeader2,sizeof(BITMAPARRAYFILEHEADER2));
- count+=Result;
-
- if(Result!=sizeof(BITMAPARRAYFILEHEADER2))
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return FALSE;
- }
-
- BitmapFileHeader2.usType=0x4943;
- BitmapFileHeader2.cbSize=sizeof(BITMAPFILEHEADER2)+sizeof(BITMAPCOREHEADER);
- BitmapFileHeader2.xHotspot=lpResDir[i].Width/2;
- BitmapFileHeader2.yHotspot=lpResDir[i].Height/2;
- BitmapFileHeader2.offBits=count1;
-
- _llseek(hFile,count,0);
-
- Result=_lwrite(hFile,(LPSTR)&BitmapFileHeader2,sizeof(BITMAPFILEHEADER2));
- count+=Result;
-
- if(Result!=sizeof(BITMAPFILEHEADER2))
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return FALSE;
- }
-
- count+=sizeof(BITMAPCOREHEADER)+2*sizeof(RGBTRIPLE);
-
- BitmapFileHeader2.offBits=count1+Groesse;
-
- _llseek(hFile,count,0);
-
- Result=_lwrite(hFile,(LPSTR)&BitmapFileHeader2,sizeof(BITMAPFILEHEADER2));
- count+=Result;
-
- if(Result!=sizeof(BITMAPFILEHEADER2))
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return FALSE;
- }
-
- count+=sizeof(BITMAPCOREHEADER)+lpResDir[i].ColorCount*sizeof(RGBTRIPLE);
- count1+=Result1;
- }
-
- GlobalUnlock((HANDLE)*lphXORBmpMem);
- GlobalUnlock((HANDLE)*lphANDBmpMem);
- GlobalUnlock((HANDLE)*lphPalMem);
- GlobalUnlock((HANDLE)*lphResDirMem);
- return TRUE;
- }
-
- return FALSE;
- }
-
-
- DWORD SaveIcon2(hXORBitmap, hANDBitmap, hPal, BegPosData1, BegPosData2, BegPosInfo1, BegPosInfo2, hFile, hWnd, BitPix)
- HBITMAP hXORBitmap;
- HBITMAP hANDBitmap;
- HPALETTE hPal;
- DWORD BegPosData1;
- DWORD BegPosData2;
- DWORD BegPosInfo1;
- DWORD BegPosInfo2;
- WORD hFile;
- HWND hWnd;
- WORD BitPix;
- {
- HDC hDC;
- DWORD Size=0;
- DWORD Groesse=0;
- DWORD Size1=0;
- DWORD Size2=0;
- DWORD Groesse1=0;
- LPBITMAPCOREINFO lpBitmapCoreinfo;
- LPSTR lpMem;
- HANDLE hBitmapCoreinfoMem;
- HANDLE hMem;
- int count;
- WORD PalEntrys;
- BITMAP Bitmap;
- DWORD OverBound;
- HBITMAP hXORBitmap2;
- int i;
- int j;
-
- HDC hDC1;
- HDC hDC2;
- HDC hDC3;
- HBITMAP hOldBitmap1;
- HBITMAP hOldBitmap2;
- HBITMAP hOldBitmap3;
-
- GetObject(hXORBitmap,sizeof(BITMAP),(LPSTR)&Bitmap);
- GetObject(hPal,2,(LPSTR)&PalEntrys);
- Groesse = sizeof(BITMAPCOREHEADER)+PalEntrys*sizeof(RGBTRIPLE);
-
- if ((hBitmapCoreinfoMem = GlobalAlloc(GMEM_MOVEABLE,Groesse)) != NULL)
- {
- if((lpBitmapCoreinfo = (LPBITMAPCOREINFO)GlobalLock(hBitmapCoreinfoMem)) != NULL)
- {
- lpBitmapCoreinfo->bmciHeader.bcSize = sizeof(BITMAPCOREHEADER);
- lpBitmapCoreinfo->bmciHeader.bcWidth = Bitmap.bmWidth;
- lpBitmapCoreinfo->bmciHeader.bcHeight = Bitmap.bmHeight;
- lpBitmapCoreinfo->bmciHeader.bcPlanes = 1;
- lpBitmapCoreinfo->bmciHeader.bcBitCount = BitPix;
-
- hDC=GetDC(NULL);
-
- SelectPalette(hDC,hPal,0);
- RealizePalette(hDC);
- GetDIBits(hDC,hXORBitmap,0,(WORD)lpBitmapCoreinfo->bmciHeader.bcHeight,NULL,(LPBITMAPINFO)lpBitmapCoreinfo,DIB_RGB_COLORS);
- Size = lpBitmapCoreinfo->bmciHeader.bcWidth*lpBitmapCoreinfo->bmciHeader.bcHeight*lpBitmapCoreinfo->bmciHeader.bcBitCount/8;
-
- if ((hMem = GlobalAlloc(GMEM_MOVEABLE,Size)) != NULL)
- {
- if((lpMem = GlobalLock(hMem)) != (LPSTR) NULL)
- {
- count = GetDIBits(hDC,hXORBitmap,0,(WORD)lpBitmapCoreinfo->bmciHeader.bcHeight,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapCoreinfo,DIB_RGB_COLORS);
- ReleaseDC(NULL,hDC);
-
- if(BegPosInfo1!=0)
- {
- _llseek(hFile,BegPosInfo1,0);
-
- if((Groesse=_lwrite(hFile,(LPSTR)lpBitmapCoreinfo,(WORD)Groesse))!=Groesse)
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock(hMem);
- GlobalFree(hMem);
- GlobalUnlock(hBitmapCoreinfoMem);
- GlobalFree(hBitmapCoreinfoMem);
- return(FALSE);
- }
- }
-
- if(BegPosData1!=0)
- {
- _llseek(hFile,BegPosData1,0);
-
- if((Size=_lwrite(hFile,lpMem,(WORD)Size))!=Size)
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock(hMem);
- GlobalFree(hMem);
- GlobalUnlock(hBitmapCoreinfoMem);
- GlobalFree(hBitmapCoreinfoMem);
- return(FALSE);
- }
- }
-
- GlobalUnlock(hMem);
- GlobalFree(hMem);
- GlobalUnlock(hBitmapCoreinfoMem);
- GlobalFree(hBitmapCoreinfoMem);
- GetObject(hXORBitmap,sizeof(BITMAP),(LPSTR)&Bitmap);
-
- Size1=Bitmap.bmWidth*Bitmap.bmHeight/8;
- OverBound=(Bitmap.bmWidth/8)%sizeof(LONG);
- if(OverBound) Size1+=(sizeof(LONG)-OverBound)*Bitmap.bmHeight;
-
- Size2=Size1;
-
- Groesse1=sizeof(BITMAPCOREHEADER)+2*sizeof(RGBTRIPLE);
-
- if ((hMem = GlobalAlloc(GMEM_MOVEABLE,Size1)) != NULL)
- {
- if((lpMem = GlobalLock(hMem)) != (LPSTR) NULL)
- {
- if ((hBitmapCoreinfoMem = GlobalAlloc(GMEM_MOVEABLE,Groesse1)) != NULL)
- {
- if((lpBitmapCoreinfo = (LPBITMAPCOREINFO)GlobalLock(hBitmapCoreinfoMem)) != NULL)
- {
- lpBitmapCoreinfo->bmciHeader.bcSize=(long)sizeof(BITMAPCOREHEADER);
- lpBitmapCoreinfo->bmciHeader.bcWidth=Bitmap.bmWidth;
- lpBitmapCoreinfo->bmciHeader.bcHeight=Bitmap.bmHeight;
- lpBitmapCoreinfo->bmciHeader.bcPlanes=1;
- lpBitmapCoreinfo->bmciHeader.bcBitCount=1;
- lpBitmapCoreinfo->bmciColors[0].rgbtRed=0;
- lpBitmapCoreinfo->bmciColors[0].rgbtGreen=0;
- lpBitmapCoreinfo->bmciColors[0].rgbtBlue=0;
- lpBitmapCoreinfo->bmciColors[1].rgbtRed=0xff;
- lpBitmapCoreinfo->bmciColors[1].rgbtGreen=0xff;
- lpBitmapCoreinfo->bmciColors[1].rgbtBlue=0xff;
-
- hDC=GetDC(NULL);
-
- hXORBitmap2 = CreateDIBitmap(hDC,(LPBITMAPINFOHEADER)&(lpBitmapCoreinfo->bmciHeader),CBM_INIT,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapCoreinfo, DIB_RGB_COLORS);
-
- hDC1=CreateCompatibleDC(hDC);
- hDC2=CreateCompatibleDC(hDC);
- hDC3=CreateCompatibleDC(hDC);
-
- hOldBitmap1=SelectObject(hDC1,hXORBitmap);
- hOldBitmap2=SelectObject(hDC2,hANDBitmap);
- hOldBitmap3=SelectObject(hDC3,hXORBitmap2);
-
- for(i=0;i<Bitmap.bmWidth;i++)
- {
- for(j=0;j<Bitmap.bmHeight;j++)
- {
- if(GetPixel(hDC2,i,j)==RGB(255,255,255))
- SetPixel(hDC3,i,j,GetPixel(hDC1,i,j));
- else
- SetPixel(hDC3,i,j,RGB(0,0,0));
- }
- }
-
- SelectObject(hDC1,hOldBitmap1);
- SelectObject(hDC2,hOldBitmap2);
- SelectObject(hDC3,hOldBitmap3);
-
- DeleteDC(hDC1);
- DeleteDC(hDC2);
- DeleteDC(hDC3);
-
- count = GetDIBits(hDC,hXORBitmap2,0,(WORD)lpBitmapCoreinfo->bmciHeader.bcHeight,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapCoreinfo,DIB_RGB_COLORS);
-
- lpBitmapCoreinfo->bmciHeader.bcHeight*=2;
-
- if(BegPosInfo2!=0)
- {
- _llseek(hFile,BegPosInfo2,0);
-
- if((Groesse1=_lwrite(hFile,(LPSTR)lpBitmapCoreinfo,(WORD)Groesse1))!=Groesse1)
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock(hMem);
- GlobalFree(hMem);
- GlobalUnlock(hBitmapCoreinfoMem);
- GlobalFree(hBitmapCoreinfoMem);
- return(FALSE);
- }
- }
-
- if(BegPosData2!=0)
- {
- _llseek(hFile,BegPosData2,0);
-
- if((Size1=_lwrite(hFile,(LPSTR)lpMem,(WORD)Size1))!=Size1)
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock(hBitmapCoreinfoMem);
- GlobalUnlock(hMem);
- GlobalFree(hBitmapCoreinfoMem);
- GlobalFree(hMem);
- return (FALSE);
- }
-
- lpBitmapCoreinfo->bmciHeader.bcHeight/=2;
- count = GetDIBits(hDC,hANDBitmap,0,(WORD)lpBitmapCoreinfo->bmciHeader.bcHeight,(LPSTR)lpMem,(LPBITMAPINFO)lpBitmapCoreinfo,DIB_RGB_COLORS);
-
- if((Size2=_lwrite(hFile,(LPSTR)lpMem,(WORD)Size2))!=Size2)
- {
- MessageBox(hWnd,"Nicht genⁿgend freier Speicher auf Laufwerk!",NULL,MB_OK|MB_ICONHAND);
- GlobalUnlock(hBitmapCoreinfoMem);
- GlobalUnlock(hMem);
- GlobalFree(hBitmapCoreinfoMem);
- GlobalFree(hMem);
- return (FALSE);
- }
- }
-
- ReleaseDC(NULL,hDC);
-
- GlobalUnlock(hBitmapCoreinfoMem);
- GlobalUnlock(hMem);
- GlobalFree(hBitmapCoreinfoMem);
- GlobalFree(hMem);
- }
- }
- }
- }
- }
- }
- }
- }
- return (Size+Size1+Size2);
- }
-
- /* ====================================================== */
- /* Ende von ICON.C */