/*******************************************************************************
 *
 *  (C) COPYRIGHT MICROSOFT CORPORATION, 1998
 *
 *  TITLE:       PVIEWIDS.H
 *
 *  VERSION:     1.0
 *
 *  AUTHOR:      ShaunIv
 *
 *  DATE:        8/12/1999
 *
 *  DESCRIPTION: Message and other constants used by the preview control
 *
 *******************************************************************************/
#ifndef __PVIEWIDS_H_INCLUDED
#define __PVIEWIDS_H_INCLUDED

#ifdef __cplusplus
extern "C" {
#endif

#define IDC_INNER_PREVIEW_WINDOW 23401

void WINAPI RegisterWiaPreviewClasses( HINSTANCE hInstance );

/**************************************************************
 *
 * Window class names
 *
 **************************************************************/
#define PREVIEW_WINDOW_CLASSW       L"WiaPreviewControl"
#define PREVIEW_WINDOW_CLASSA        "WiaPreviewControl"

#define PREVIEW_WINDOW_FRAME_CLASSW L"WiaPreviewControlFrame"
#define PREVIEW_WINDOW_FRAME_CLASSA  "WiaPreviewControlFrame"

#if defined(UNICODE) || defined(_UNICODE)
#define PREVIEW_WINDOW_CLASS        PREVIEW_WINDOW_CLASSW
#define PREVIEW_WINDOW_FRAME_CLASS  PREVIEW_WINDOW_FRAME_CLASSW
#else
#define PREVIEW_WINDOW_CLASS        PREVIEW_WINDOW_CLASSA
#define PREVIEW_WINDOW_FRAME_CLASS  PREVIEW_WINDOW_FRAME_CLASSA
#endif


/**************************************************************
 *
 * Notification codes, sent via WM_COMMAND
 *
 **************************************************************/
#define PWN_SELCHANGE              1


/**************************************************************
 *
 * Messages and flags
 *
 **************************************************************/
//wParam = 0, lParam = LPSIZE lpResolution
#define PWM_SETRESOLUTION         (WM_USER+601)

//wParam = 0, lParam = 0
#define PWM_CLEARSELECTION            (WM_USER+602)

//wParam = 0, lParam = LPSIZE pSize
#define PWM_GETIMAGESIZE          (WM_USER+603)

// wParam = MAKEWPARAM(bRepaint,bDontDestroy), lParam = (HBITMAP)hBmp
#define PWM_SETBITMAP             (WM_USER+604)

// wParam = 0, lParam = 0
#define PWM_GETBITMAP             (WM_USER+605)

// wParam = 0, lParam = LPSIZE lpResolution
#define PWM_GETRESOLUTION         (WM_USER+606)

// wParam = bOuter, lParam = 0
#define PWM_GETBORDERSIZE         (WM_USER+607)

// wParam = 0, lParam = 0
#define PWM_GETHANDLESIZE         (WM_USER+608)

// wParam = 0, lParam = 0
#define PWM_GETBGALPHA            (WM_USER+609)

// wParam = 0, lParam = 0
#define PWM_GETHANDLETYPE         (WM_USER+610)

// wParam = (BOOL)MAKEWPARAM(bRepaint,bOuter), lParam = (UINT)nBorderSize
#define PWM_SETBORDERSIZE         (WM_USER+611)

// wParam = (BOOL)bRepaint, lParam = (UINT)nHandleSize
#define PWM_SETHANDLESIZE         (WM_USER+612)

// wParam = (BOOL)bRepaint, lParam = (BYTE)nAlpha
#define PWM_SETBGALPHA            (WM_USER+613)

#define PREVIEW_WINDOW_SQUAREHANDLES 0x00000000
#define PREVIEW_WINDOW_ROUNDHANDLES  0x00000001
#define PREVIEW_WINDOW_FILLEDHANDLES 0x00000000
#define PREVIEW_WINDOW_HOLLOWHANDLES 0x00010000

// wParam = (BOOL)bRepaint, lParam = (int)nHandleType
#define PWM_SETHANDLETYPE         (WM_USER+614)

// wParam = 0, lParam = 0
#define PWM_GETSELCOUNT           (WM_USER+615)

// wParam = (BOOL)MAKEWPARAM((WORD)nItem,(BOOL)bPhysical), lParam = (PPOINT)pOrigin
#define PWM_GETSELORIGIN          (WM_USER+616)

// wParam = (BOOL)MAKEWPARAM((WORD)nItem,(BOOL)bPhysical), lParam = (PSIZE)pExtent
#define PWM_GETSELEXTENT          (WM_USER+617)

// wParam = 0, lParam = 0
#define PWM_GETALLOWNULLSELECTION (WM_USER+618)

// wParam = (BOOL)bAllowNullSelection, lParam = 0
#define PWM_SETALLOWNULLSELECTION (WM_USER+619)

// wParam = 0, lParam = 0
#define PWM_SELECTIONDISABLED     (WM_USER+620)

// wParam = (BOOL)bDisableSelection, lParam = 0
#define PWM_DISABLESELECTION      (WM_USER+621)

// wParam = 0, lParam = 0
#define PWM_DETECTREGIONS         (WM_USER+622)

// wParam = MAKEWPARAM(bOuterBorder,0), lParam = 0
#define PWM_GETBKCOLOR            (WM_USER+623)

// wParam = MAKEWPARAM(bOuterBorder,bRepaint), lParam = (COLORREF)color
#define PWM_SETBKCOLOR            (WM_USER+624)

// wParam = 0, lParam = (LPSIZE)pSize
#define PWM_SETDEFASPECTRATIO     (WM_USER+625)

// wParam = 0, lParam = (BOOL)bPreviewMode
#define PWM_SETPREVIEWMODE        (WM_USER+626)

// wParam = 0, lParam = 0
#define PWM_GETPREVIEWMODE        (WM_USER+627)

// wParam = MAKEWPARAM(bRepaint,0), lParam = MAKELPARAM(nBorderStyle,nBorderThickness)
#define PWM_SETBORDERSTYLE        (WM_USER+628)

#define PREVIEW_WINDOW_SELECTED    0x00000000
#define PREVIEW_WINDOW_UNSELECTED  0x00000001
#define PREVIEW_WINDOW_DISABLED    0x00000002

// wParam = MAKEWPARAM(bRepaint,nState), lParam = (COLORREF)crColor
#define PWM_SETBORDERCOLOR        (WM_USER+629)

// wParam = MAKEWPARAM(bRepaint,nState), lParam = (COLORREF)crColor
#define PWM_SETHANDLECOLOR        (WM_USER+630)

// wParam = 0, lParam = (SIZE *)psizeClient
#define PWM_GETCLIENTSIZE         (WM_USER+631)

// wParam = 0, lParam = BOOL bEnable
#define PWM_SETENABLESTRETCH         (WM_USER+632)

// wParam = 0, lParam = 0
#define PWM_GETENABLESTRETCH         (WM_USER+633)

// wParam = 0, lParam = bHide
#define PWM_HIDEEMPTYPREVIEW         (WM_USER+634)

#define PREVIEW_WINDOW_CENTER      0x0000
#define PREVIEW_WINDOW_RIGHT       0x0001
#define PREVIEW_WINDOW_LEFT        0x0002
#define PREVIEW_WINDOW_TOP         0x0004
#define PREVIEW_WINDOW_BOTTOM      0x0008

// wParam = bRedraw, lParam = MAKELPARAM(horz,vert)
#define PWM_SETPREVIEWALIGNMENT      (WM_USER+635)

// wParam = (BOOL)MAKEWPARAM((WORD)nItem,(BOOL)bPhysical), lParam = (PPOINT)pOrigin
#define PWM_SETSELORIGIN          (WM_USER+636)

// wParam = (BOOL)MAKEWPARAM((WORD)nItem,(BOOL)bPhysical), lParam = (PSIZE)pExtent
#define PWM_SETSELEXTENT          (WM_USER+637)

// wParam = 0, LPARAM = 0
#define PWM_REFRESHBITMAP         (WM_USER+638)

//
// wParam = bShow, lParam = 0
//
#define PWM_SETPROGRESS          (WM_USER+639)

//
// wParam = 0, lParam = 0
//
#define PWM_GETPROGRESS          (WM_USER+640)

//
// wParam = BOOL bUserChanged, lParam = 0
//
#define PWM_SETUSERCHANGEDSELECTION (WM_USER+641)

//
// wParam = 0, lParam = 0
//
#define PWM_GETUSERCHANGEDSELECTION (WM_USER+642)

/**************************************************************
 *
 * inline WINAPI message wrapper helpers
 *
 **************************************************************/
#ifdef __cplusplus  // C doesn't know what inline WINAPI is...

inline void WINAPI WiaPreviewControl_SetResolution( HWND hWnd, SIZE *pResolution)
{
    ::SendMessage( hWnd, PWM_SETRESOLUTION, 0, reinterpret_cast<LPARAM>(pResolution) );
}

inline void WINAPI WiaPreviewControl_ClearSelection( HWND hWnd )
{
    ::SendMessage( hWnd, PWM_CLEARSELECTION, 0, 0 );
}

inline BOOL WINAPI WiaPreviewControl_GetImageSize( HWND hWnd, SIZE *pSize )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_GETIMAGESIZE, 0, reinterpret_cast<LPARAM>(pSize)));
}

inline void WINAPI WiaPreviewControl_SetBitmap( HWND hWnd, BOOL bRepaint, BOOL bDontDestroy, HBITMAP hBitmap )
{
    ::SendMessage( hWnd, PWM_SETBITMAP, MAKEWPARAM(bRepaint,bDontDestroy), reinterpret_cast<LPARAM>(hBitmap) );
}

inline HBITMAP WINAPI WiaPreviewControl_GetBitmap( HWND hWnd )
{
    return reinterpret_cast<HBITMAP>(::SendMessage( hWnd, PWM_GETBITMAP, 0, 0 ));
}

inline BOOL WINAPI WiaPreviewControl_GetResolution( HWND hWnd, SIZE *pResolution )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_GETRESOLUTION, 0, reinterpret_cast<LPARAM>(pResolution)));
}

inline UINT WINAPI WiaPreviewControl_GetBorderSize( HWND hWnd, BOOL bOuter )
{
    return static_cast<UINT>(::SendMessage( hWnd, PWM_GETBORDERSIZE, bOuter, 0 ));
}

inline UINT WINAPI WiaPreviewControl_GetHandleSize( HWND hWnd )
{
    return static_cast<UINT>(::SendMessage( hWnd, PWM_GETHANDLESIZE, 0, 0 ));
}

inline BYTE WINAPI WiaPreviewControl_GetBgAlpha( HWND hWnd )
{
    return static_cast<BYTE>(::SendMessage( hWnd, PWM_GETBGALPHA, 0, 0 ));
}

inline int WINAPI WiaPreviewControl_GetHandleType( HWND hWnd )
{
    return static_cast<int>(::SendMessage( hWnd, PWM_GETHANDLETYPE, 0, 0 ));
}

inline void WINAPI WiaPreviewControl_SetBorderSize( HWND hWnd, BOOL bRepaint, BOOL bOuter, UINT nBorderSize )
{
    ::SendMessage( hWnd, PWM_SETBORDERSIZE, MAKEWPARAM(bRepaint,bOuter), nBorderSize );
}

inline void WINAPI WiaPreviewControl_SetHandleSize( HWND hWnd, BOOL bRepaint, UINT nHandleSize )
{
    ::SendMessage( hWnd, PWM_SETHANDLESIZE, bRepaint, nHandleSize );
}

inline void WINAPI WiaPreviewControl_SetBgAlpha( HWND hWnd, BOOL bRepaint, BYTE nAlpha )
{
    ::SendMessage( hWnd, PWM_SETBGALPHA, bRepaint, nAlpha );
}

inline void WINAPI WiaPreviewControl_SetHandleType( HWND hWnd, BOOL bRepaint, int nHandleType )
{
    ::SendMessage( hWnd, PWM_SETHANDLETYPE, bRepaint, nHandleType );
}

inline WORD WINAPI WiaPreviewControl_GetSelCount( HWND hWnd )
{
    return static_cast<WORD>(::SendMessage( hWnd, PWM_GETSELCOUNT, 0, 0 ));
}

inline BOOL WINAPI WiaPreviewControl_GetSelOrigin( HWND hWnd, WORD nItem, BOOL bPhysical, POINT *pOrigin  )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_GETSELORIGIN, MAKEWPARAM(nItem,bPhysical), reinterpret_cast<LPARAM>(pOrigin)));
}

inline BOOL WINAPI WiaPreviewControl_GetSelExtent( HWND hWnd, WORD nItem, BOOL bPhysical, SIZE *pExtent  )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_GETSELEXTENT, MAKEWPARAM(nItem,bPhysical), reinterpret_cast<LPARAM>(pExtent)));
}

inline BOOL WINAPI WiaPreviewControl_SetSelOrigin( HWND hWnd, WORD nItem, BOOL bPhysical, POINT *pOrigin  )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_SETSELORIGIN, MAKEWPARAM(nItem,bPhysical), reinterpret_cast<LPARAM>(pOrigin)));
}

inline BOOL WINAPI WiaPreviewControl_SetSelExtent( HWND hWnd, WORD nItem, BOOL bPhysical, SIZE *pExtent  )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_SETSELEXTENT, MAKEWPARAM(nItem,bPhysical), reinterpret_cast<LPARAM>(pExtent)));
}

inline BOOL WINAPI WiaPreviewControl_NullSelectionAllowed( HWND hWnd )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_GETALLOWNULLSELECTION, 0, 0 ));
}

inline void WINAPI WiaPreviewControl_AllowNullSelection( HWND hWnd, BOOL bAllowNullSelection )
{
    ::SendMessage( hWnd, PWM_SETALLOWNULLSELECTION, bAllowNullSelection, 0 );
}

inline BOOL WINAPI WiaPreviewControl_SelectionDisabled( HWND hWnd )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_SELECTIONDISABLED, 0, 0 ));
}

inline void WINAPI WiaPreviewControl_DisableSelection( HWND hWnd, BOOL bDisableSelection )
{
    ::SendMessage( hWnd, PWM_DISABLESELECTION, bDisableSelection, 0 );
}

inline BOOL WINAPI WiaPreviewControl_DetectRegions( HWND hWnd )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_DETECTREGIONS, 0, 0 ));
}

inline COLORREF WINAPI WiaPreviewControl_GetBkColor( HWND hWnd, BOOL bOuterBorder )
{
    return static_cast<COLORREF>(::SendMessage( hWnd, PWM_GETBKCOLOR, MAKEWPARAM(bOuterBorder,0), 0 ));
}

inline void WINAPI WiaPreviewControl_SetBkColor( HWND hWnd, BOOL bRepaint, BOOL bOuterBorder, COLORREF color )
{
    ::SendMessage( hWnd, PWM_SETBKCOLOR, MAKEWPARAM(bOuterBorder,bRepaint), color );
}

inline void WINAPI WiaPreviewControl_SetDefAspectRatio( HWND hWnd, SIZE *pAspectRatio )
{
    ::SendMessage( hWnd, PWM_SETDEFASPECTRATIO, 0, reinterpret_cast<LPARAM>(pAspectRatio) );
}

inline void WINAPI WiaPreviewControl_SetPreviewMode( HWND hWnd, BOOL bPreviewMode )
{
    ::SendMessage( hWnd, PWM_SETPREVIEWMODE, 0, static_cast<LPARAM>(bPreviewMode) );
}

inline BOOL WINAPI WiaPreviewControl_GetPreviewMode( HWND hWnd )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_GETPREVIEWMODE, 0, 0 ));
}

inline void WINAPI WiaPreviewControl_SetBorderStyle( HWND hWnd, BOOL bRepaint, WORD nBorderStyle, WORD nBorderThickness )
{
    ::SendMessage( hWnd, PWM_SETBORDERSTYLE, MAKEWPARAM(bRepaint,0), MAKELPARAM(nBorderStyle,nBorderThickness) );
}

inline void WINAPI WiaPreviewControl_SetBorderColor( HWND hWnd, BOOL bRepaint, WORD nState, COLORREF crColor )
{
    ::SendMessage( hWnd, PWM_SETBORDERCOLOR, MAKEWPARAM(bRepaint,nState), static_cast<LPARAM>(crColor) );
}

inline void WINAPI WiaPreviewControl_SetHandleColor( HWND hWnd, BOOL bRepaint, WORD nState, COLORREF crColor )
{
    ::SendMessage( hWnd, PWM_SETHANDLECOLOR, MAKEWPARAM(bRepaint,nState), static_cast<LPARAM>(crColor) );
}

inline BOOL WINAPI WiaPreviewControl_GetClientSize( HWND hWnd, SIZE *psizeClient )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_GETCLIENTSIZE, 0, reinterpret_cast<LPARAM>(psizeClient) ) );
}

inline BOOL WINAPI WiaPreviewControl_GetEnableStretch( HWND hWnd )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_GETENABLESTRETCH, 0, 0 ) );
}

inline void WINAPI WiaPreviewControl_SetEnableStretch( HWND hWnd, BOOL bEnable )
{
    ::SendMessage( hWnd, PWM_SETENABLESTRETCH, 0, bEnable );
}

inline void WINAPI WiaPreviewControl_HideEmptyPreview( HWND hWnd, BOOL bHide )
{
    ::SendMessage( hWnd, PWM_HIDEEMPTYPREVIEW, 0, bHide );
}

inline void WINAPI WiaPreviewControl_SetPreviewAlignment( HWND hWnd, WORD fHorizontal, WORD fVertical, BOOL bRepaint )
{
    ::SendMessage( hWnd, PWM_SETPREVIEWALIGNMENT, bRepaint, MAKELPARAM(fHorizontal,fVertical) );
}

inline void WINAPI WiaPreviewControl_RefreshBitmap( HWND hWnd )
{
    ::SendMessage( hWnd, PWM_REFRESHBITMAP, 0, 0 );
}

inline BOOL WINAPI WiaPreviewControl_SetProgress( HWND hWnd, BOOL bSet )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_SETPROGRESS, bSet, 0 ) );
}

inline BOOL WINAPI WiaPreviewControl_GetProgress( HWND hWnd )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_GETPROGRESS, 0, 0 ) );
}

inline BOOL WINAPI WiaPreviewControl_GetUserChangedSelection( HWND hWnd )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_GETUSERCHANGEDSELECTION, 0, 0 ) );
}

inline BOOL WINAPI WiaPreviewControl_SetUserChangedSelection( HWND hWnd, BOOL bUserChangedSelection )
{
    return static_cast<BOOL>(::SendMessage( hWnd, PWM_SETUSERCHANGEDSELECTION, bUserChangedSelection, 0 ) );
}



#endif // __cplusplus


#ifdef __cplusplus
}
#endif


#endif // __PVIEWIDS_H_INCLUDED