/* Structure definitions for Win32 -- used only internally */
#ifndef _STRUCT32_H
#define _STRUCT32_H
#include "handle32.h"

typedef struct tagRECT32
{
	LONG left;
	LONG top;
	LONG right;
	LONG bottom;
} RECT32;

void STRUCT32_RECT32to16(const RECT32*,RECT*);
void STRUCT32_RECT16to32(const RECT*,RECT32*);

typedef struct tagPOINT32
{
	LONG x;
	LONG y;
} POINT32;

typedef struct tagSIZE32
{
        LONG cx;
        LONG cy;
} SIZE32;
  
void STRUCT32_POINT32to16(const POINT32*,POINT*);
void STRUCT32_POINT16to32(const POINT*,POINT32*);
void STRUCT32_SIZE16to32(const SIZE* p16, SIZE32* p32);

typedef struct tagMINMAXINFO32
{
	POINT32 ptReserved;
	POINT32 ptMaxSize;
	POINT32 ptMaxPosition;
	POINT32 ptMinTrackSize;
	POINT32 ptMaxTrackSize;
} MINMAXINFO32;

void STRUCT32_MINMAXINFO32to16(const MINMAXINFO32*,MINMAXINFO*);
void STRUCT32_MINMAXINFO16to32(const MINMAXINFO*,MINMAXINFO32*);

typedef struct {
	DWORD style;
	DWORD dwExtendedStyle;
	WORD noOfItems;
	short x;
	short y;
	WORD cx;
	WORD cy;
} DLGTEMPLATE32;

typedef struct {
	DWORD style;
	DWORD dwExtendedStyle;
	short x;
	short y;
	short cx;
	short cy;
	WORD id;
} DLGITEMTEMPLATE32;

#define CW_USEDEFAULT32	0x80000000

typedef struct tagMSG32
{
	DWORD hwnd;
	DWORD message;
	DWORD wParam;
	DWORD lParam;
	DWORD time;
	POINT32 pt;
} MSG32;

void STRUCT32_MSG16to32(MSG *msg16,MSG32 *msg32);
void STRUCT32_MSG32to16(MSG32 *msg32,MSG *msg16);

typedef struct tagPAINTSTRUCT32
{
	DWORD hdc;
	DWORD fErase;
	RECT32 rcPaint;
	DWORD fRestore;
	DWORD fIncUpdate;
	BYTE rgbReserved[32];
} PAINTSTRUCT32;

typedef struct tagWINDOWPOS32
{
	DWORD	hwnd;
	DWORD	hwndInsertAfter;
	LONG	x;
	LONG	y;
	LONG	cx;
	LONG	cy;
	DWORD	flags;
} WINDOWPOS32;

void STRUCT32_WINDOWPOS32to16(const WINDOWPOS32*,WINDOWPOS*);
void STRUCT32_WINDOWPOS16to32(const WINDOWPOS*,WINDOWPOS32*);

typedef struct tagNCCALCSIZE_PARAMS32
{
	RECT32	rgrc[3];
	WINDOWPOS32	*lppos;
} NCCALCSIZE_PARAMS32;

void STRUCT32_NCCALCSIZE32to16Flat(const NCCALCSIZE_PARAMS32*,
	NCCALCSIZE_PARAMS*);
void STRUCT32_NCCALCSIZE16to32Flat(const NCCALCSIZE_PARAMS* from,
	NCCALCSIZE_PARAMS32* to);

typedef struct tagCREATESTRUCT32
{
	DWORD	lpCreateParams;
	DWORD	hInstance;
	DWORD	hMenu;
	DWORD	hwndParent;
	LONG	cy;
	LONG	cx;
	LONG	y;
	LONG	x;
	LONG	style;
	LPSTR	lpszName;
	LPSTR	lpszClass;
	DWORD	dwExStyle;
} CREATESTRUCT32;
typedef CREATESTRUCT32	CREATESTRUCTA;

void STRUCT32_CREATESTRUCT32to16(const CREATESTRUCT32*,CREATESTRUCT*);
void STRUCT32_CREATESTRUCT16to32(const CREATESTRUCT*,CREATESTRUCT32*);

#endif
