#include <io.h>
#include <windows.h>
-#ifdef __GNUWIN32__
-#include "wx/msw/gnuwin32/extra.h"
+#if defined(__MWERKS__)
+#include <wingdi.h>
+#include <winuser.h>
#endif
+#ifdef __GNUWIN32_OLD__
+ #include "wx/msw/gnuwin32/extra.h"
+#endif
+
+#include "wx/wxchar.h"
#include "wx/msw/curicop.h"
#include "wx/msw/curico.h"
+#include "wx/string.h"
//*****************************************************************************
//* Function : ReadIconFile() *
//* be created for any reason. *
//*****************************************************************************
-HICON ReadIconFile( char *szFileName, HINSTANCE hInst, int *W, int *H)
+HICON ReadIconFile( wxChar *szFileName, HINSTANCE hInst, int *W, int *H)
{ HICON hIcon;
HANDLE hDIB;
- if( (hDIB = ReadIcon(szFileName, W, H)) == NULL)
+ if( (hDIB = ReadIcon(szFileName, W, H)) == (HANDLE) NULL)
// read the icon DIB from file
- return NULL;
+ return (HICON) NULL;
hIcon = MakeIcon( hDIB, hInst); // create an icon from DIB
GlobalFree( hDIB);
return hIcon;
//* monochrome. *
//*****************************************************************************
-HICON CursorToIcon( char *szFileName, HINSTANCE hInst, int *W, int *H)
+HICON CursorToIcon( wxChar *szFileName, HINSTANCE hInst, int *W, int *H)
{ HANDLE hDIB; // Handle to DIB memory
HICON hIcon; // Handle to Icon
- if( (hDIB = ReadCur( szFileName, NULL, W, H)) == NULL)
+ if( (hDIB = ReadCur( szFileName, NULL, W, H)) == (HANDLE) NULL)
// Read cursor DIB
- return NULL;
+ return (HICON) NULL;
hIcon = MakeIcon( hDIB, hInst); // make icon from cursor DIB
GlobalFree( hDIB);
return hIcon;
//* is corrupt or if memory cannot be allocated for the DIB info. *
//*****************************************************************************
-HANDLE ReadIcon( char *szFileName, int *W, int *H)
+HANDLE ReadIcon( wxChar *szFileName, int *W, int *H)
{ ICONFILEHEADER iconFileHead; // ICON file header structure
ICONFILERES iconFileRes; // ICON file resource
- WORD cbHead,
+ UINT cbHead,
cbRes,
cbBits; // Used for reading in file
int hFile; // File handle
nDirEntries = 0;
// Open and read the .ICO file header and the first ICONFILERES
- hFile = _lopen( szFileName, OF_READ);
+ hFile = _lopen( wxConvertWX2MB(szFileName), OF_READ);
cbHead = _lread( hFile, (LPSTR)&iconFileHead, sizeof(ICONFILEHEADER));
cbRes = _lread( hFile, (LPSTR)&iconFileRes, sizeof(ICONFILERES));
++nDirEntries;
if((cbHead != sizeof( ICONFILEHEADER)) || (cbRes != sizeof( ICONFILERES)))
- return NULL;
-
+ return (HANDLE) NULL;
// Verify that it's an .ICON file
if( iconFileHead.wResourceType != 1)
- return NULL;
+ return (HANDLE) NULL;
// inserted by P.S.
while( (nDirEntries < iconFileHead.wResourceCount) &&
{
cbRes = _lread( hFile, (LPSTR )&iconFileRes, sizeof( ICONFILERES));
if(cbRes != sizeof( ICONFILERES))
- return NULL;
+ return (HANDLE) NULL;
else
++nDirEntries;
}
// Allocate and lock memory to read in the DIB
hDIB = GlobalAlloc(GHND, iconFileRes.dwDIBSize);
- if(hDIB == NULL)
- return NULL;
+ if(hDIB == (HANDLE) NULL)
+ return (HANDLE) NULL;
+
#ifdef __WINDOWS_386__
lpDIB = (LPBITMAPINFO)MK_FP32(GlobalLock(hDIB));
#else
if( (DWORD )cbBits != iconFileRes.dwDIBSize)
{
GlobalFree( hDIB);
- return NULL;
+ return (HANDLE) NULL;
}
return hDIB;
}
//* bitmaps. So, no need to convert the AND bitmask. *
//* 7) Since a DIB is stored upside down, flip the monochrome AND bits*
//* by scanlines. *
-//* 8) Use the XOR and AND bits and create an icon with CreateIcon. *
+//* 8) Use the XOR and AND bits and create an icon with CreateIcon. *
//*****************************************************************************
HICON MakeIcon( HANDLE hDIB, HINSTANCE hInst)
lpDIB->bmiHeader.biBitCount)));
// Get a hDC so we can create a bitmap compatible with it
- hDC = CreateDC( "DISPLAY", NULL, NULL, NULL);
+ hDC = CreateDC( wxT("DISPLAY"), NULL, NULL, NULL);
// 5) Create a device dependent bitmap with the XOR bits.
hbmXor = CreateDIBitmap( hDC, (LPBITMAPINFOHEADER)&(lpDIB->bmiHeader),
dwBmpSize = (DWORD )(bmpXor.bmWidthBytes * bmpXor.bmHeight * bmpXor.bmPlanes);
hXorDDB = GlobalAlloc( GHND, dwBmpSize);
- if(hXorDDB == NULL)
+ if(hXorDDB == (HANDLE) NULL)
{
// clean up before quitting
DeleteObject( hbmXor);
DeleteDC( hDC);
GlobalUnlock( hDIB);
- return NULL;
+ return (HICON) NULL;
}
#ifdef __WINDOWS_386__
szFlip[(k - 1) - j] = *(DWORD FAR *)lpANDbits;
// 8) Use the XOR and AND bits and create an icon with CreateIcon.
- hIcon = CreateIcon( hInst, bmpXor.bmWidth, bmpXor.bmHeight, bmpXor.bmPlanes,
- bmpXor.bmBitsPixel, (const BYTE *)szFlip, (const BYTE *)lpXorDDB);
+ hIcon = CreateIcon( hInst, bmpXor.bmWidth, bmpXor.bmHeight, (BYTE)bmpXor.bmPlanes,
+ (BYTE)bmpXor.bmBitsPixel, (const BYTE *)szFlip, (const BYTE *)lpXorDDB);
// Clean up before exiting.
DeleteObject( hbmXor);
//* be created for any reason. *
//*****************************************************************************
-HCURSOR ReadCursorFile( char *szFileName, HINSTANCE hInst, int *W, int *H,
+HCURSOR ReadCursorFile( wxChar *szFileName, HINSTANCE hInst, int *W, int *H,
int *XHot, int *YHot)
{ HANDLE hDIB; // Handle to DIB memory
HCURSOR hCursor;
POINT ptHotSpot;
// read cur DIB from file
- if( (hDIB = ReadCur( szFileName, (LPPOINT )&ptHotSpot, W, H)) == NULL)
- return NULL;
+ if( (hDIB = ReadCur( szFileName, (LPPOINT )&ptHotSpot, W, H)) == (HANDLE) NULL)
+ return (HCURSOR) NULL;
hCursor = MakeCursor( hDIB, (LPPOINT )&ptHotSpot, hInst);//create cur from DIB
if(XHot != 0)
*XHot = ptHotSpot.x;
//* monochrome. *
//*****************************************************************************
-HCURSOR IconToCursor( char *szFileName, HINSTANCE hInst, int XHot, int YHot,
+HCURSOR IconToCursor( wxChar *szFileName, HINSTANCE hInst, int XHot, int YHot,
int *W, int *H)
{ HCURSOR hCursor;
HANDLE hDIB;
POINT ptHotSpot;
- if( (hDIB = ReadIcon( szFileName, W, H)) == NULL)
+ if( (hDIB = ReadIcon( szFileName, W, H)) == (HANDLE) NULL)
//read icon file to get icon DIB
- return NULL;
+ return (HCURSOR) NULL;
// Set the hot spot of the cursor
ptHotSpot.x = XHot;
ptHotSpot.y = YHot;
//* is corrupt or if memory cannot be allocated for the DIB info. *
//*****************************************************************************
-HANDLE ReadCur( char *szFileName, LPPOINT lpptHotSpot, int *W, int *H)
+HANDLE ReadCur( wxChar *szFileName, LPPOINT lpptHotSpot, int *W, int *H)
{ CURFILEHEADER curFileHead; // CURSOR file header structure
CURFILERES curFileRes; // CURSOR file resource
- WORD cbHead,
+ UINT cbHead,
cbRes,
cbBits; // Used for reading in file
LPBITMAPINFO lpDIB; // Pointer to DIB memory
nDirEntries = 0;
// Open and read the .ICO file header and the first ICONFILERES
- hFile = _lopen( szFileName, OF_READ);
+ hFile = _lopen( wxConvertWX2MB(szFileName), OF_READ);
cbHead = _lread( hFile, (LPSTR )&curFileHead, sizeof( CURFILEHEADER));
cbRes = _lread( hFile, (LPSTR )&curFileRes, sizeof( CURFILERES));
++nDirEntries;
if((cbHead != sizeof( CURFILEHEADER)) || (cbRes != sizeof( CURFILERES)))
- return NULL;
+ return (HANDLE) NULL;
// Verify that it's an .CUR file
if ((curFileRes.bReserved1 != 0) || (curFileHead.wResourceType != 2))
- return NULL;
+ return (HANDLE) NULL;
// following added by P.S.
while( (nDirEntries < curFileHead.wResourceCount) &&
{
cbRes = _lread( hFile, (LPSTR )&curFileRes, sizeof( CURFILERES));
if(cbRes != sizeof( CURFILERES))
- return NULL;
+ return (HANDLE) NULL;
else
++nDirEntries;
}
// Allocate & lock memory to read in the DIB
hDIB = GlobalAlloc(GHND, curFileRes.dwDIBSize);
- if(hDIB == NULL)
- return NULL;
+ if(hDIB == (HANDLE) NULL)
+ return (HANDLE) NULL;
#ifdef __WINDOWS_386__
lpDIB = (LPBITMAPINFO )MK_FP32(GlobalLock(hDIB));
{
GlobalUnlock( hDIB);
GlobalFree( hDIB);
- return NULL;
+ return (HANDLE) NULL;
}
- if(lpptHotSpot != NULL) // If it is necessary to know the hot spot
+ if(lpptHotSpot != (LPPOINT) NULL) // If it is necessary to know the hot spot
{
lpptHotSpot->x = (int )curFileRes.wXHotspot;
lpptHotSpot->y = (int )curFileRes.wYHotspot;
dwLen = bi.biSize + PaletteSize((LPSTR)&bi);
- hdc = GetDC( NULL);
+ hdc = GetDC( (HWND) NULL);
hdib = GlobalAlloc( GHND, dwLen);
- if (hdib == NULL)
+ if (hdib == (HANDLE) NULL)
{
- ReleaseDC( NULL, hdc);
- return NULL;
+ ReleaseDC( (HWND) NULL, hdc);
+ return (HBITMAP) NULL;
}
#ifdef __WINDOWS_386__
else
{
GlobalFree( hdib);
- ReleaseDC( NULL, hdc);
- return NULL;
+ ReleaseDC( (HWND) NULL, hdc);
+ return (HBITMAP) NULL;
}
// Call GetDIBits with a NON-NULL lpBits parameter, to actually
(LPBITMAPINFO)lpbi, DIB_RGB_COLORS) == 0)
{
GlobalUnlock( hdib);
- hdib = NULL;
- ReleaseDC( NULL, hdc);
- return NULL;
+ hdib = (HANDLE) NULL;
+ ReleaseDC( (HWND) NULL, hdc);
+ return (HBITMAP) NULL;
}
// Finally, create a monochrome DDB, and put the DIB into
GlobalUnlock( hdib);
GlobalFree( hdib);
- ReleaseDC(NULL, hdc);
+ ReleaseDC((HWND) NULL, hdc);
return hbmMono;
}
lpDIB->bmiHeader.biBitCount)));
// Get a hDC so we can create a bitmap compatible with it
- hDC = CreateDC( "DISPLAY", NULL, NULL, NULL);
+ hDC = CreateDC( wxT("DISPLAY"), NULL, NULL, NULL);
// 5) Create a device dependent bitmap with the XOR bits.
hbmXor = CreateBitmap( (int )lpDIB->bmiHeader.biWidth,
dwBmpSize = (DWORD )(bmpXor.bmWidthBytes * bmpXor.bmHeight * bmpXor.bmPlanes);
hXorDDB = GlobalAlloc( GHND, dwBmpSize);
- if(hXorDDB == NULL)
+ if(hXorDDB == (HANDLE) NULL)
{ // clean up before quitting
DeleteObject( hbmXor);
DeleteDC( hDC);
GlobalUnlock( hDIB);
- return NULL;
+ return (HCURSOR) NULL;
}
#ifdef __WINDOWS_386__
lpXorDDB = (LPSTR)MK_FP32(GlobalLock( hXorDDB));
NumColors = DIBNumColors((LPSTR )lpbi);
if(lpbi->biSize == sizeof( BITMAPCOREHEADER)) // OS/2 style DIBs
- return NumColors * sizeof( RGBTRIPLE);
+ return (WORD)(NumColors * sizeof( RGBTRIPLE));
else
- return NumColors * sizeof( RGBQUAD);
+ return (WORD)(NumColors * sizeof( RGBQUAD));
}
//*****************************************************************************
// is in biClrUsed, whereas in the BITMAPCORE - style headers, it
// is dependent on the bits per pixel ( = 2 raised to the power of
// bits/pixel).
-
+
if(lpbi->biSize != sizeof( BITMAPCOREHEADER))
{
if(lpbi->biClrUsed != 0)
#if 0
// ******************************************************************
-BOOL fGetXPixmap( BOOL fIsIcon, char *szFileName, HINSTANCE hInst,
+BOOL fGetXPixmap( BOOL fIsIcon, wxChar *szFileName, HINSTANCE hInst,
char cData[], int &width, int &height)
{ HDC hdc,
hdcMemory;
NPSTR andBits;
NPSTR xorBits;
- hDC = GetDC(NULL);
+ hDC = GetDC((HWND) NULL);
hDCColor = CreateCompatibleDC(hDC);
hDCMono = CreateCompatibleDC(hDC);
hAndBmp = CreateCompatibleBitmap(hDCMono, 32, 32);
DeleteObject(hXorBmp);
ReleaseDC(NULL, hDC);
#ifndef __WIN32__
+#ifdef STRICT
+ LocalUnlock(LocalHandle((void NEAR*) andBits));
+ LocalUnlock(LocalHandle((void NEAR*) xorBits));
+ LocalFree(LocalHandle((void NEAR*) andBits));
+ LocalFree(LocalHandle((void NEAR*) xorBits));
+#else
LocalUnlock(LocalHandle((WORD) andBits));
LocalUnlock(LocalHandle((WORD) xorBits));
LocalFree(LocalHandle((WORD) andBits));
LocalFree(LocalHandle((WORD) xorBits));
+#endif
#else
LocalUnlock(LocalHandle((LPCVOID) andBits));
LocalUnlock(LocalHandle((LPCVOID) xorBits));
/*
* This doesn't work: just gives us a grey square. Ideas, anyone?
*/
-
+
HICON MakeIconFromBitmap(HINSTANCE hInst, HBITMAP hBitmap)
{
HDC hDCColor, hDCMono;
NPSTR andBits;
NPSTR xorBits;
- hDC = GetDC(NULL);
+ hDC = GetDC((HWND) NULL);
hDCColor = CreateCompatibleDC(hDC);
hDCMono = CreateCompatibleDC(hDC);
hAndBmp = CreateCompatibleBitmap(hDCMono, 32, 32);
DeleteDC(hDCMono);
DeleteObject(hAndBmp);
DeleteObject(hXorBmp);
- ReleaseDC(NULL, hDC);
+ ReleaseDC((HWND) NULL, hDC);
#ifndef __WIN32__
+#ifdef STRICT
+ LocalUnlock(LocalHandle((void NEAR*) andBits));
+ LocalUnlock(LocalHandle((void NEAR*) xorBits));
+ LocalFree(LocalHandle((void NEAR*) andBits));
+ LocalFree(LocalHandle((void NEAR*) xorBits));
+#else
LocalUnlock(LocalHandle((WORD) andBits));
LocalUnlock(LocalHandle((WORD) xorBits));
LocalFree(LocalHandle((WORD) andBits));
LocalFree(LocalHandle((WORD) xorBits));
+#endif
#else
LocalUnlock(LocalHandle((LPCVOID) andBits));
LocalUnlock(LocalHandle((LPCVOID) xorBits));