You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
7.6 KiB
206 lines
7.6 KiB
/*******************************************************************************
|
|
*
|
|
* (C) COPYRIGHT MICROSOFT CORPORATION, 1998
|
|
*
|
|
* TITLE: PREVWND.H
|
|
*
|
|
* VERSION: 1.0
|
|
*
|
|
* AUTHOR: ShaunIv
|
|
*
|
|
* DATE: 8/12/1999
|
|
*
|
|
* DESCRIPTION: Preview window class declaration
|
|
*
|
|
*******************************************************************************/
|
|
#ifndef _PREVWND_H
|
|
#define _PREVWND_H
|
|
|
|
#include <windows.h>
|
|
#include "regionde.h"
|
|
|
|
#if defined(OLD_CRAPPY_HOME_SETUP)
|
|
extern "C"
|
|
{
|
|
typedef struct _BLENDFUNCTION
|
|
{
|
|
BYTE BlendOp;
|
|
BYTE BlendFlags;
|
|
BYTE SourceConstantAlpha;
|
|
BYTE AlphaFormat;
|
|
}BLENDFUNCTION;
|
|
#define AC_SRC_OVER 0x00
|
|
typedef BOOL (WINAPI *AlphaBlendFn)( HDC, int, int, int, int, HDC, int, int, int, int, BLENDFUNCTION);
|
|
};
|
|
#endif //OLD_CRAPPY_HOME_SETUP
|
|
|
|
class CWiaPreviewWindow
|
|
{
|
|
private:
|
|
HWND m_hWnd;
|
|
BLENDFUNCTION m_bfBlendFunction;
|
|
BOOL m_bDeleteBitmap;
|
|
BOOL m_bSizing;
|
|
BOOL m_bAllowNullSelection;
|
|
BOOL m_SelectionDisabled;
|
|
|
|
HBITMAP m_hBufferBitmap; // The double buffer bitmap
|
|
HBITMAP m_hPaintBitmap; // The scaled image
|
|
HBITMAP m_hAlphaBitmap; // The alpha blended bitmap
|
|
HBITMAP m_hPreviewBitmap; // This is the actual full size image
|
|
SIZE m_BitmapSize; // Actual size of the bitmap
|
|
|
|
HCURSOR m_hCurrentCursor; // Used when windows sends us a WM_SETCURSOR message
|
|
|
|
HCURSOR m_hCursorArrow;
|
|
HCURSOR m_hCursorCrossHairs;
|
|
HCURSOR m_hCursorMove;
|
|
HCURSOR m_hCursorSizeNS;
|
|
HCURSOR m_hCursorSizeNeSw;
|
|
HCURSOR m_hCursorSizeNwSe;
|
|
HCURSOR m_hCursorSizeWE;
|
|
HPEN m_aHandlePens[3];
|
|
HPEN m_aBorderPens[3];
|
|
HBRUSH m_aHandleBrushes[3];
|
|
HPEN m_hHandleHighlight;
|
|
HPEN m_hHandleShadow;
|
|
RECT m_rcCurrSel;
|
|
RECT m_rectSavedDetected; // the user can double click to snap back to the selected region
|
|
SIZE m_Delta;
|
|
SIZE m_ImageSize;
|
|
SIZE m_Resolution;
|
|
int m_MovingSel;
|
|
UINT m_nBorderSize;
|
|
int m_nHandleType;
|
|
UINT m_nHandleSize;
|
|
HPALETTE m_hHalftonePalette;
|
|
RECT m_rcSavedImageRect;
|
|
int m_nCurrentRect;
|
|
bool m_bSuccessfulRegionDetection; // have we succesfully detected regions for this scan?
|
|
HBRUSH m_hBackgroundBrush;
|
|
bool m_bPreviewMode;
|
|
bool m_bUserChangedSelection;
|
|
|
|
// We store all of the pens and brushes we use in arrays. These serve as mnemonic indices.
|
|
enum
|
|
{
|
|
Selected = 0,
|
|
Unselected = 1,
|
|
Disabled = 2,
|
|
};
|
|
|
|
protected:
|
|
void DestroyBitmaps(void);
|
|
void DrawHandle( HDC hDC, const RECT &r, int nState );
|
|
RECT GetSizingHandleRect( const RECT &rcSel, int iWhich );
|
|
RECT GetSelectionRect( RECT &rcSel, int iWhich );
|
|
POINT GetCornerPoint( int iWhich );
|
|
void DrawSizingFrame( HDC hDC, RECT &rc, bool bFocus, bool bDisabled );
|
|
int GetHitArea( POINT &pt );
|
|
void NormalizeRect( RECT &r );
|
|
void SendSelChangeNotification( bool bSetUserChangedSelection=true );
|
|
void GenerateNewBitmap(void);
|
|
RECT GetImageRect(void);
|
|
void Repaint( PRECT pRect, bool bErase );
|
|
bool IsAlphaBlendEnabled(void);
|
|
HPALETTE SetHalftonePalette( HDC hDC );
|
|
RECT ScaleSelectionRect( const RECT &rcOriginalImage, const RECT &rcCurrentImage, const RECT &rcOriginalSel );
|
|
RECT GetDefaultSelection(void);
|
|
BOOL IsDefaultSelectionRect( const RECT &rc );
|
|
int GetSelectionRectCount(void);
|
|
void PaintWindowTitle( HDC hDC );
|
|
|
|
void SetCursor( HCURSOR hCursor );
|
|
bool GetOriginAndExtentInImagePixels( WORD nItem, POINT &ptOrigin, SIZE &sizeExtent );
|
|
void CreateNewBitmaps(void);
|
|
void DrawBitmaps(void);
|
|
void ResizeProgressBar();
|
|
|
|
// Region detection helper functions:
|
|
int XConvertToBitmapCoords(int x);
|
|
int XConvertToScreenCoords(int x);
|
|
int YConvertToBitmapCoords(int y);
|
|
int YConvertToScreenCoords(int y);
|
|
|
|
POINT ConvertToBitmapCoords(POINT p);
|
|
POINT ConvertToScreenCoords(POINT p);
|
|
RECT ConvertToBitmapCoords(RECT r);
|
|
RECT ConvertToScreenCoords(RECT r);
|
|
|
|
RECT GrowRegion(RECT r, int border);
|
|
|
|
private:
|
|
// No implementation
|
|
CWiaPreviewWindow(void);
|
|
CWiaPreviewWindow( const CWiaPreviewWindow & );
|
|
CWiaPreviewWindow &operator=( const CWiaPreviewWindow & );
|
|
|
|
public:
|
|
explicit CWiaPreviewWindow( HWND hWnd );
|
|
virtual ~CWiaPreviewWindow(void);
|
|
|
|
static BOOL RegisterClass( HINSTANCE hInstance );
|
|
static LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
|
|
|
|
protected:
|
|
// Standard windows messages
|
|
LRESULT OnPaint( WPARAM, LPARAM );
|
|
LRESULT OnSetCursor( WPARAM, LPARAM );
|
|
LRESULT OnMouseMove( WPARAM, LPARAM );
|
|
LRESULT OnLButtonDown( WPARAM, LPARAM );
|
|
LRESULT OnLButtonUp( WPARAM, LPARAM );
|
|
LRESULT OnLButtonDblClk( WPARAM, LPARAM );
|
|
LRESULT OnCreate( WPARAM, LPARAM );
|
|
LRESULT OnSize( WPARAM, LPARAM );
|
|
LRESULT OnGetDlgCode( WPARAM, LPARAM );
|
|
LRESULT OnKeyDown( WPARAM, LPARAM );
|
|
LRESULT OnSetFocus( WPARAM, LPARAM );
|
|
LRESULT OnKillFocus( WPARAM, LPARAM );
|
|
LRESULT OnEnable( WPARAM, LPARAM );
|
|
LRESULT OnEraseBkgnd( WPARAM, LPARAM );
|
|
LRESULT OnEnterSizeMove( WPARAM, LPARAM );
|
|
LRESULT OnExitSizeMove( WPARAM, LPARAM );
|
|
LRESULT OnSetText( WPARAM, LPARAM );
|
|
|
|
// Our messages
|
|
LRESULT OnClearSelection( WPARAM, LPARAM );
|
|
LRESULT OnSetResolution( WPARAM, LPARAM );
|
|
LRESULT OnGetResolution( WPARAM, LPARAM );
|
|
LRESULT OnSetBitmap( WPARAM, LPARAM );
|
|
LRESULT OnGetBitmap( WPARAM, LPARAM );
|
|
LRESULT OnGetBorderSize( WPARAM, LPARAM );
|
|
LRESULT OnGetHandleSize( WPARAM, LPARAM );
|
|
LRESULT OnGetBgAlpha( WPARAM, LPARAM );
|
|
LRESULT OnGetHandleType( WPARAM, LPARAM );
|
|
LRESULT OnSetBorderSize( WPARAM, LPARAM );
|
|
LRESULT OnSetHandleSize( WPARAM, LPARAM );
|
|
LRESULT OnSetBgAlpha( WPARAM, LPARAM );
|
|
LRESULT OnSetHandleType( WPARAM, LPARAM );
|
|
LRESULT OnGetSelOrigin( WPARAM, LPARAM );
|
|
LRESULT OnGetSelExtent( WPARAM, LPARAM );
|
|
LRESULT OnSetSelOrigin( WPARAM, LPARAM );
|
|
LRESULT OnSetSelExtent( WPARAM, LPARAM );
|
|
LRESULT OnGetSelCount( WPARAM, LPARAM );
|
|
LRESULT OnGetAllowNullSelection( WPARAM, LPARAM );
|
|
LRESULT OnSetAllowNullSelection( WPARAM, LPARAM );
|
|
LRESULT OnGetDisableSelection( WPARAM, LPARAM );
|
|
LRESULT OnSetDisableSelection( WPARAM, LPARAM );
|
|
LRESULT OnDetectRegions( WPARAM, LPARAM );
|
|
LRESULT OnGetBkColor( WPARAM, LPARAM );
|
|
LRESULT OnSetBkColor( WPARAM, LPARAM );
|
|
LRESULT OnSetPreviewMode( WPARAM, LPARAM );
|
|
LRESULT OnGetPreviewMode( WPARAM, LPARAM );
|
|
LRESULT OnGetImageSize( WPARAM, LPARAM );
|
|
LRESULT OnSetBorderStyle( WPARAM, LPARAM );
|
|
LRESULT OnSetBorderColor( WPARAM, LPARAM );
|
|
LRESULT OnSetHandleColor( WPARAM, LPARAM );
|
|
LRESULT OnRefreshBitmap( WPARAM, LPARAM );
|
|
LRESULT OnSetProgress( WPARAM, LPARAM );
|
|
LRESULT OnGetProgress( WPARAM, LPARAM );
|
|
LRESULT OnCtlColorStatic( WPARAM, LPARAM );
|
|
LRESULT OnGetUserChangedSelection( WPARAM, LPARAM );
|
|
LRESULT OnSetUserChangedSelection( WPARAM, LPARAM );
|
|
};
|
|
|
|
#endif
|
|
|