#ifndef __cmnquery_h #define __cmnquery_h DEFINE_GUID(IID_IQueryForm, 0x8cfcee30, 0x39bd, 0x11d0, 0xb8, 0xd1, 0x0, 0xa0, 0x24, 0xab, 0x2d, 0xbb); DEFINE_GUID(IID_IPersistQuery, 0x1a3114b8, 0xa62e, 0x11d0, 0xa6, 0xc5, 0x0, 0xa0, 0xc9, 0x06, 0xaf, 0x45); DEFINE_GUID(CLSID_CommonQuery, 0x83bc5ec0, 0x6f2a, 0x11d0, 0xa1, 0xc4, 0x0, 0xaa, 0x00, 0xc1, 0x6e, 0x65); DEFINE_GUID(IID_ICommonQuery, 0xab50dec0, 0x6f1d, 0x11d0, 0xa1, 0xc4, 0x0, 0xaa, 0x00, 0xc1, 0x6e, 0x65); #ifndef GUID_DEFS_ONLY //----------------------------------------------------------------------------- // IQueryForm //----------------------------------------------------------------------------- // // A query form object is registered under the query handlers CLSID, // a list is stored in the registry: // // HKCR\CLSID\{CLSID query handler}\Forms // // For each form object there are server values which can be defined: // // Flags = flags for the form object: // QUERYFORM_CHANGESFORMLIST // QUERYFORM_CHANGESOPTFORMLIST // // CLSID = string containing the CLSID of the InProc server to invoke // to get the IQueryFormObject. // // Forms = a sub key containing the CLSIDs for the forms registered // by IQueryForm::AddForms (or modified by ::AddPages), if // the flags are 0, then we scan this list looking for a match // for the default form specified. // #define QUERYFORM_CHANGESFORMLIST 0x000000001 #define QUERYFORM_CHANGESOPTFORMLIST 0x000000002 // // Query Forms // =========== // Query forms are registered and have query pages added to them, a form without // pages is not displayed. Each form has a unique CLSID to allow it to be // selected by invoking the query dialog. // #define CQFF_NOGLOBALPAGES 0x0000001 // = 1 => doesn't have global pages added #define CQFF_ISOPTIONAL 0x0000002 // = 1 => form is hidden, unless optional forms requested typedef struct { DWORD cbStruct; DWORD dwFlags; CLSID clsid; HICON hIcon; LPCWSTR pszTitle; } CQFORM, * LPCQFORM; typedef HRESULT (CALLBACK *LPCQADDFORMSPROC)(LPARAM lParam, LPCQFORM pForm); // // Query Form Pages // ================ // When a query form has been registered the caller can then add pages to it, // any form can have pages appended. // struct _cqpage; typedef struct _cqpage CQPAGE, * LPCQPAGE; typedef HRESULT (CALLBACK *LPCQADDPAGESPROC)(LPARAM lParam, REFCLSID clsidForm, LPCQPAGE pPage); typedef HRESULT (CALLBACK *LPCQPAGEPROC)(LPCQPAGE pPage, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); struct _cqpage { DWORD cbStruct; DWORD dwFlags; LPCQPAGEPROC pPageProc; HINSTANCE hInstance; INT idPageName; INT idPageTemplate; DLGPROC pDlgProc; LPARAM lParam; }; // // IQueryForm interfaces // #undef INTERFACE #define INTERFACE IQueryForm DECLARE_INTERFACE_(IQueryForm, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; // IQueryForm methods STDMETHOD(Initialize)(THIS_ HKEY hkForm) PURE; STDMETHOD(AddForms)(THIS_ LPCQADDFORMSPROC pAddFormsProc, LPARAM lParam) PURE; STDMETHOD(AddPages)(THIS_ LPCQADDPAGESPROC pAddPagesProc, LPARAM lParam) PURE; }; // // Messages for pages // #define CQPM_INITIALIZE 0x00000001 #define CQPM_RELEASE 0x00000002 #define CQPM_ENABLE 0x00000003 // wParam = TRUE/FALSE (enable, disable), lParam = 0 #define CQPM_GETPARAMETERS 0x00000005 // wParam = 0, lParam = -> receives the LocalAlloc #define CQPM_CLEARFORM 0x00000006 // wParam, lParam = 0 #define CQPM_PERSIST 0x00000007 // wParam = fRead, lParam -> IPersistQuery #define CQPM_HELP 0x00000008 // wParam = 0, lParam -> LPHELPINFO #define CQPM_SETDEFAULTPARAMETERS 0x00000009 // wParam = 0, lParam -> OPENQUERYWINDOW #define CQPM_HANDLERSPECIFIC 0x10000000 //----------------------------------------------------------------------------- // IPersistQuery //----------------------------------------------------------------------------- // IPersistQuery interface #undef INTERFACE #define INTERFACE IPersistQuery DECLARE_INTERFACE_(IPersistQuery, IPersist) { // *** IUnknown methods *** STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; // IPersist STDMETHOD(GetClassID)(THIS_ CLSID* pClassID) PURE; // IPersistQuery STDMETHOD(WriteString)(THIS_ LPCWSTR pSection, LPCWSTR pValueName, LPCWSTR pValue) PURE; STDMETHOD(ReadString)(THIS_ LPCWSTR pSection, LPCWSTR pValueName, LPWSTR pBuffer, INT cchBuffer) PURE; STDMETHOD(WriteInt)(THIS_ LPCWSTR pSection, LPCWSTR pValueName, INT value) PURE; STDMETHOD(ReadInt)(THIS_ LPCWSTR pSection, LPCWSTR pValueName, LPINT pValue) PURE; STDMETHOD(WriteStruct)(THIS_ LPCWSTR pSection, LPCWSTR pValueName, LPVOID pStruct, DWORD cbStruct) PURE; STDMETHOD(ReadStruct)(THIS_ LPCWSTR pSection, LPCWSTR pValueName, LPVOID pStruct, DWORD cbStruct) PURE; STDMETHOD(Clear)(THIS) PURE; }; //----------------------------------------------------------------------------- // ICommonQuery //----------------------------------------------------------------------------- #define OQWF_OKCANCEL 0x00000001 // = 1 => Provide OK/Cancel buttons #define OQWF_DEFAULTFORM 0x00000002 // = 1 => clsidDefaultQueryForm is valid #define OQWF_SINGLESELECT 0x00000004 // = 1 => view to have single selection (depends on viewer) #define OQWF_LOADQUERY 0x00000008 // = 1 => use the IPersistQuery to load the given query #define OQWF_REMOVESCOPES 0x00000010 // = 1 => remove scope picker from dialog #define OQWF_REMOVEFORMS 0x00000020 // = 1 => remove form picker from dialog #define OQWF_ISSUEONOPEN 0x00000040 // = 1 => issue query on opening the dialog #define OQWF_SHOWOPTIONAL 0x00000080 // = 1 => list optional forms by default #define OQWF_SAVEQUERYONOK 0x00000200 // = 1 => use the IPersistQuery to write the query on close #define OQWF_HIDEMENUS 0x00000400 // = 1 => no menu bar displayed #define OQWF_HIDESEARCHUI 0x00000800 // = 1 => dialog is filter, therefore start, stop, new search etc #define OQWF_PARAMISPROPERTYBAG 0x80000000 // = 1 => the form parameters ptr is an IPropertyBag (ppbFormParameters) typedef struct { DWORD cbStruct; // structure size DWORD dwFlags; // flags (OQFW_*) CLSID clsidHandler; // clsid of handler we are using LPVOID pHandlerParameters; // handler specific structure for initialization CLSID clsidDefaultForm; // default form to be selected (if OQF_DEFAULTFORM == 1 ) IPersistQuery* pPersistQuery; // IPersistQuery used for loading queries union { void* pFormParameters; IPropertyBag* ppbFormParameters; }; } OPENQUERYWINDOW, * LPOPENQUERYWINDOW; // ICommonQuery #undef INTERFACE #define INTERFACE ICommonQuery DECLARE_INTERFACE_(ICommonQuery, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; // ICommonQuery methods STDMETHOD(OpenQueryWindow)(THIS_ HWND hwndParent, LPOPENQUERYWINDOW pQueryWnd, IDataObject** ppDataObject) PURE; }; #endif // GUID_DEFS_ONLY #endif