225 lines
5.7 KiB
C++
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
|