/***************************************************************************** * * (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 m_pWiaVideo; CComPtr m_pDevMgr; CComPtr m_pCreateCallback; CComPtr m_pDeleteCallback; CComPtr 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 &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