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

165 lines
4.4 KiB
C++

/*******************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORPORATION, 1998
*
* TITLE: CHOOSDLG.H
*
* VERSION: 1.0
*
* AUTHOR: ShaunIv
*
* DATE: 5/12/1998
*
* DESCRIPTION: Declarations for the WIA device selection dialog box
*
*******************************************************************************/
#ifndef __CHOOSDLG_H
#define __CHOOSDLG_H
#include <windows.h>
#include <objbase.h>
#include <wia.h>
#include <simstr.h>
#include <devlist.h>
#include <wiaseld.h>
#define PWM_WIA_EVENT (WM_USER+111)
struct CChooseDeviceDialogParams
{
SELECTDEVICEDLG *pSelectDeviceDlg;
CDeviceList *pDeviceList;
};
class CChooseDeviceDialog
{
private:
CChooseDeviceDialogParams *m_pChooseDeviceDialogParams;
HWND m_hWnd;
HFONT m_hBigFont;
CComPtr<IUnknown> m_pDisconnectEvent;
CComPtr<IUnknown> m_pConnectEvent;
private:
//
// No implementation
//
CChooseDeviceDialog(void);
CChooseDeviceDialog( const CChooseDeviceDialog & );
CChooseDeviceDialog &operator=( const CChooseDeviceDialog & );
public:
static INT_PTR CALLBACK DialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
private:
//
// This is stored as data with each icon
//
class CDeviceInfo
{
private:
CComPtr<IWiaPropertyStorage> m_pPropertyStorage;
CComPtr<IWiaItem> m_pRootItem;
private:
//
// No implementation
//
CDeviceInfo &operator=( const CDeviceInfo & );
CDeviceInfo( const CDeviceInfo & );
public:
CDeviceInfo( IUnknown *pIUnknown=NULL )
{
Initialize(pIUnknown);
}
~CDeviceInfo(void)
{
m_pPropertyStorage.Release();
}
IWiaPropertyStorage *WiaPropertyStorage(void)
{
return m_pPropertyStorage.p;
}
HRESULT Initialize( IUnknown *pIUnknown )
{
m_pPropertyStorage = NULL;
if (!pIUnknown)
{
return E_POINTER;
}
return pIUnknown->QueryInterface( IID_IWiaPropertyStorage, (void**)&m_pPropertyStorage );
}
bool GetProperty( PROPID propId, CSimpleStringWide &strPropertyValue )
{
return PropStorageHelpers::GetProperty( m_pPropertyStorage, propId, strPropertyValue );
}
bool GetProperty( PROPID propId, LONG &nValue )
{
return PropStorageHelpers::GetProperty( m_pPropertyStorage, propId, nValue );
}
void RootItem( IWiaItem *pRootItem )
{
m_pRootItem = pRootItem;
}
IWiaItem *RootItem(void)
{
return m_pRootItem;
}
};
private:
//
// Only constructor and destructor
//
explicit CChooseDeviceDialog( HWND hwnd );
~CChooseDeviceDialog(void);
//
// Message handlers
//
LRESULT OnInitDialog( WPARAM, LPARAM );
LRESULT OnNotify( WPARAM wParam, LPARAM lParam );
LRESULT OnDestroy( WPARAM, LPARAM );
LRESULT OnCommand( WPARAM wParam, LPARAM lParam );
LRESULT OnDblClkDeviceList( WPARAM wParam, LPARAM lParam );
LRESULT OnItemChangedDeviceList( WPARAM wParam, LPARAM lParam );
LRESULT OnItemDeletedDeviceList( WPARAM, LPARAM lParam );
LRESULT OnWiaEvent( WPARAM wParam, LPARAM lParam );
LRESULT OnHelp( WPARAM, LPARAM );
LRESULT OnContextMenu( WPARAM, LPARAM );
LRESULT OnSysColorChange( WPARAM, LPARAM );
//
// WM_COMMAND handlers
//
void OnProperties( WPARAM wParam, LPARAM lParam );
void OnOk( WPARAM wParam, LPARAM lParam );
void OnCancel( WPARAM wParam, LPARAM lParam );
//
// Helper functions
//
int FindItemMatch( const CSimpleStringWide &str );
bool SetSelectedItem( int iItem );
HICON LoadDeviceIcon( CDeviceInfo *pdi );
int GetFirstSelectedDevice(void);
CDeviceInfo *GetDeviceInfoFromList( int iIndex );
bool AddDevices(void);
BOOL AddDevice( IWiaPropertyStorage *pIWiaPropertyStorage, int iDevNo );
void UpdateDeviceInformation(void);
HRESULT CreateDeviceIfNecessary( CDeviceInfo *pDevInfo, HWND hWndParent, IWiaItem **ppRootItem, BSTR *pbstrDeviceId );
public:
static HRESULT CreateWiaDevice( IWiaDevMgr *pWiaDevMgr, IWiaPropertyStorage *pWiaPropertyStorage, HWND hWndParent, IWiaItem **ppWiaRootItem, BSTR *pbstrDeviceId );
};
#endif