windows-nt/Source/XPSP1/NT/printscan/ui/wiavidd/videodlg.h
2020-09-26 16:20:57 +08:00

225 lines
5.7 KiB
C++

/*****************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORPORATION, 1999 - 2000
*
* TITLE: videodlg.h
*
* VERSION: 1.0
*
* AUTHOR: RickTu
*
* DATE: 10/14/99
*
* DESCRIPTION: CVideoCaptureDialog class definitions
*
*****************************************************************************/
#ifndef _WIA_VIDEO_CAPTURE_DIALOG_CLASS_H_
#define _WIA_VIDEO_CAPTURE_DIALOG_CLASS_H_
//
// Thread queue messages
//
#define TQ_DESTROY (WM_USER+1)
#define TQ_GETTHUMBNAIL (WM_USER+2)
#define TQ_GETPREVIEW (WM_USER+3)
#define TQ_DELETEITEM (WM_USER+4)
//
// Private messages
//
#define PWM_POSTINIT (WM_USER+1)
#define PWM_CHANGETOPARENT (WM_USER+2)
#define PWM_THUMBNAILSTATUS (WM_USER+3)
#define PWM_PREVIEWSTATUS (WM_USER+4)
#define PWM_PREVIEWPERCENT (WM_USER+5)
//
// ICON defines
//
#define DEF_PICTURE_ICON 0
#define DEF_FOLDER_ICON 1
#define DEF_PARENT_ICON 2
//
// Messages to send to keep view up to date
//
// The LPARAM has the BSTR of the item to delete...
//
#define VD_NEW_ITEM (WM_USER+20)
#define VD_DELETE_ITEM (WM_USER+21)
//
// No params for this one
//
#define VD_DEVICE_DISCONNECTED (WM_USER+22)
class CVideoCaptureDialog
{
private:
enum
{
MULTISEL_MODE = 1,
SINGLESEL_MODE = 2,
BOTH_MODES = 3
};
private:
HWND m_hWnd;
PDEVICEDIALOGDATA m_pDeviceDialogData;
SIZE m_CurrentAspectRatio;
CThreadMessageQueue *m_pThreadMessageQueue;
CSimpleEvent m_CancelEvent;
HANDLE m_hBackgroundThread;
BOOL m_bFirstTime;
HIMAGELIST m_hImageList;
HFONT m_hBigFont;
DWORD m_nDialogMode;
SIZE m_sizeMinimumWindow;
SIZE m_sizeThumbnails;
INT m_nParentFolderImageListIndex;
HACCEL m_hAccelTable;
INT m_nListViewWidth;
HICON m_hIconLarge;
HICON m_hIconSmall;
CCameraItemList m_CameraItemList;
CCameraItem *m_pCurrentParentItem;
CSimpleStringWide m_strwDeviceId;
CComPtr<IWiaVideo> m_pWiaVideo;
CComPtr<IWiaDevMgr> m_pDevMgr;
CComPtr<IUnknown> m_pCreateCallback;
CComPtr<IUnknown> m_pDeleteCallback;
CComPtr<IUnknown> m_pDisconnectedCallback;
private:
//
// No implementation
//
CVideoCaptureDialog(void);
CVideoCaptureDialog &operator=( const CVideoCaptureDialog & );
CVideoCaptureDialog( const CVideoCaptureDialog & );
private:
CVideoCaptureDialog( HWND hWnd );
protected:
//
// Message functions
//
LRESULT OnInitDialog( WPARAM, LPARAM );
LRESULT OnSize( WPARAM, LPARAM );
LRESULT OnShow( WPARAM, LPARAM );
LRESULT OnGetMinMaxInfo( WPARAM, LPARAM );
LRESULT OnDestroy( WPARAM, LPARAM );
LRESULT OnCommand( WPARAM wParam, LPARAM lParam );
LRESULT OnTimer( WPARAM, LPARAM );
LRESULT OnNotify( WPARAM wParam, LPARAM lParam );
LRESULT OnNewItemEvent( WPARAM, LPARAM lParam );
LRESULT OnDeleteItemEvent( WPARAM, LPARAM lParam );
LRESULT OnDeviceDisconnect( WPARAM, LPARAM );
LRESULT OnHelp( WPARAM wParam, LPARAM lParam );
LRESULT OnContextMenu( WPARAM wParam, LPARAM lParam );
LRESULT OnChangeToParent( WPARAM, LPARAM );
LRESULT OnPostInit( WPARAM, LPARAM );
LRESULT OnThumbnailStatus( WPARAM, LPARAM );
LRESULT OnDblClkImageList( WPARAM, LPARAM );
LRESULT OnImageListKeyDown( WPARAM, LPARAM lParam );
LRESULT OnImageListItemChanged( WPARAM, LPARAM );
VOID OnOK( WPARAM, LPARAM );
VOID OnCancel( WPARAM, LPARAM );
VOID OnCapture( WPARAM, LPARAM );
VOID OnSelectAll( WPARAM, LPARAM );
//
// Util functions
VOID ResizeAll( VOID );
HRESULT EnumerateItems( CCameraItem *pCurrentParent, IEnumWiaItem *pIWiaEnumItem );
HRESULT EnumerateAllCameraItems( VOID );
BOOL FindMaximumThumbnailSize( VOID );
HBITMAP CreateDefaultThumbnail( HDC hDC, HFONT hFont, INT nWidth, INT nHeight, LPCWSTR pszTitle, INT nType );
VOID CreateThumbnails( BOOL bForce=FALSE );
void CreateThumbnails( CCameraItem *pRoot, HIMAGELIST hImageList, bool bForce );
VOID RequestThumbnails( CCameraItem *pRoot );
BOOL ChangeFolder( CCameraItem *pNode );
VOID HandleSelectionChange( VOID );
BOOL PopulateList( CCameraItem *pOldParent=NULL );
VOID MarkItemDeletePending( INT nIndex, BOOL bSet );
BOOL SetSelectedListItem( INT nIndex );
INT FindItemInList( CCameraItem *pItem );
INT GetSelectionIndices( CSimpleDynamicArray<int> &aIndices );
CCameraItem *GetListItemNode( int nIndex );
BOOL AddItemToListView( IWiaItem * pItem );
HWND GetGraphWindowHandle(void);
public: // For now
//
// Background thread messages
//
static BOOL WINAPI OnThreadDestroy( CThreadMessage *pMsg );
static BOOL WINAPI OnGetThumbnail( CThreadMessage *pMsg );
static BOOL WINAPI OnThreadDeleteItem( CThreadMessage *pMsg );
public:
static INT_PTR CALLBACK DialogProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
};
class CVideoCallback : public IWiaEventCallback
{
private:
HWND m_hWnd;
LONG m_cRef;
public:
CVideoCallback();
STDMETHOD(Initialize)( HWND hwnd );
//
// IWiaEventCallback stuff
//
STDMETHOD_(ULONG, AddRef)(VOID);
STDMETHOD_(ULONG, Release)(VOID);
STDMETHOD(QueryInterface)(REFIID riid, LPVOID *ppvObject);
STDMETHOD(ImageEventCallback)(const GUID __RPC_FAR *pEventGUID, BSTR bstrEventDescription, BSTR bstrDeviceID, BSTR bstrDeviceDescription, DWORD dwDeviceType, BSTR bstrFullItemName, ULONG __RPC_FAR *pulEventType, ULONG ulReserved);
};
#endif