// DictImpl.h : Declaration of the CDict #ifndef __DICT_H_ #define __DICT_H_ #include "resource.h" // main symbols #include ///////////////////////////////////////////////////////////////////////////// // CDict class CDict; struct TermInfo { const TS_ATTRID * pTermID; const TS_ATTRID * pParentID; WCHAR * pszMnemonic; ULONG idString; BSTR ( CDict::*mfpConvertToString ) ( const VARIANT &, LCID & ); }; struct GUIDLess { bool operator ()(const GUID& g1, const GUID& g2) const { const ULONG *lpGUID1 = (ULONG *)&g1; const ULONG *lpGUID2 = (ULONG *)&g2; for (int i = 0; i < 4; i++) { if (lpGUID1[i] < lpGUID2[i]) return true; if (lpGUID1[i] > lpGUID2[i]) return false; } return false; } }; struct WCHARLess { bool operator ()(const WCHAR* s1, const WCHAR* s2) const { if (wcscmp(s1, s2) < 0) return true; else return false; } }; typedef std::map DictMap; typedef std::map DictMnemonicMap; class ATL_NO_VTABLE CDict : public CComObjectRootEx, public CComCoClass, public IAccDictionary { public: DECLARE_REGISTRY_RESOURCEID(IDR_MSAADICT) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CDict) COM_INTERFACE_ENTRY(IAccDictionary) END_COM_MAP() HRESULT FinalConstruct() { #ifdef DEBUG m_hinstResDll = LoadLibraryEx( TEXT("C:\\tools\\OLEACCRC.DLL"), NULL, LOAD_LIBRARY_AS_DATAFILE ); if( m_hinstResDll ) { // load it from where I put it for debug purposes return S_OK; } #endif m_hinstResDll = LoadLibraryEx( TEXT("OLEACCRC.DLL"), NULL, LOAD_LIBRARY_AS_DATAFILE ); if( ! m_hinstResDll ) { return E_FAIL; } return S_OK; } CDict(); ~CDict(); // IAccDictionary HRESULT STDMETHODCALLTYPE GetLocalizedString ( REFGUID Term, LCID lcid, BSTR * pResult, LCID * plcid ); HRESULT STDMETHODCALLTYPE GetParentTerm ( REFGUID Term, GUID * pParentTerm ); HRESULT STDMETHODCALLTYPE GetMnemonicString ( REFGUID Term, BSTR * pResult ); HRESULT STDMETHODCALLTYPE LookupMnemonicTerm ( BSTR bstrMnemonic, GUID * pTerm ); HRESULT STDMETHODCALLTYPE ConvertValueToString ( REFGUID Term, LCID lcid, VARIANT varValue, BSTR * pbstrResult, LCID * plcid ); // The following convert member functions are called from ConvertValueToString // by accessing a member function pointer in the dictionary BSTR ConvertPtsToString( const VARIANT & value, LCID & lcid ); BSTR ConvertBoolToString( const VARIANT & value, LCID & lcid ); BSTR ConvertColorToString( const VARIANT & value, LCID & lcid ); BSTR ConvertWeightToString( const VARIANT & value, LCID & lcid ); BSTR ConvertLangIDToString( const VARIANT & value, LCID & lcid ); BSTR ConvertBSTRToString( const VARIANT & value, LCID & lcid ); private: double CDict::ColorDistance(COLORREF crColor1, COLORREF crColor2); private: DictMap m_mapDictionary; DictMnemonicMap m_mapMnemonicDictionary; HINSTANCE m_hinstResDll; }; #endif //__DICT_H_