#ifndef __LANGUAGE_H__ #define __LANGUAGE_H__ ////////////////////////////////////////////////////////////////////////// // // // language.h --- Header for language related classes. // // /* This file contains classes related to managing the UI language of HHCTRL. */ ////////////////////////////////////////////////////////////////////////// // // Forwards // class CLanguage ; ////////////////////////////////////////////////////////////////////////// // // Constants // const LANGID c_LANGID_ENUM_EOF= static_cast(-1) ; ////////////////////////////////////////////////////////////////////////// // // CLanguageEnum // /* This class enumerates the langids to attempt. If you are trying to access some object using a langid and that object may not be in that particular langid, you should use this class to get an array of langids to try. NOTE: This class should only be obtained from the CLanguage class below. */ class CLanguageEnum { //--- Relationships friend CLanguage ; //--- Construction private: // Will return the langid passed in first. This is the CLanguageEnum(LANGID langid1 = NULL, LANGID langid2 = NULL, bool bSysOnly = false) ; public: virtual ~CLanguageEnum() ; //--- Access public: LANGID start() ; LANGID next() ; // The last LANGID is always 0 which can be used as a "search for anything" flag. After the 0, next returns c_LANGID_ENUM_EOF . //--- Member variables private: // Current index into array. int m_index ; // number of items in the array. int m_items ; // Number of LangIds to search LANGID* m_langids; }; ////////////////////////////////////////////////////////////////////////// // // CLanguage // class CLanguage { //--- Construction public: CLanguage() ; virtual ~CLanguage() ; //--- Access public: // All of the access functions are self initializing. // Returns the language identifier of the ui/resources. LANGID GetUiLanguage() ; // Set the LangId for the resources you want to use --- Used by external clients. Loads the correct satellite dll. LANGID SetUiLanguage(LANGID langid) ; // Returns the actually langid the control is set to. // Returns an enumerator to enumerate the possible ui languages. Caller responsible for deleting. CLanguageEnum* GetEnumerator(LANGID langidOther = NULL) {_Init(); return _GetEnumerator(langidOther); } // Load the satellite dll --- Called by the module.cpp. HINSTANCE LoadSatellite() {_Init(); return m_hSatellite ; } // This may appear wierd, but m_hSatellite is NULL if m_langid is 0x0409. // Return's the user's os ui language. LANGID GetUserOsUiLanguage() ; //REVIEW: Move to COsLanguage class? //--- Private Member functions private: void _Init() {if (!m_langid) _LoadSatellite(); } // Non-auto load. void _LoadSatellite() ; // Non-auto load. CLanguageEnum* _GetEnumerator(LANGID landidOther = NULL) ; // Enumerate only the sys lcids and english lcids. Used by satellite dlls. CLanguageEnum* _GetSysEnumerator(LANGID landidOther = NULL) ; //--- Member variables private: // Language ID of the user interface. This is either set by the client or by default when we load the satellite. LANGID m_langid ; // Satellite instance handle. If m_langid is 0x0409 (english) we don't have a satellite dll. HINSTANCE m_hSatellite ; // Function Pointer type for Get*DefaultUILanguage Functions typedef LANGID (WINAPI *FntPtr_GetDefaultUILanguage)(); // Function pointer to the Get*DefaultUILanguage FntPtr_GetDefaultUILanguage m_fpGetUserDefaultUILanguage ; FntPtr_GetDefaultUILanguage m_fpGetSystemDefaultUILanguage ; // Pointer to the Module handle. HMODULE m_hNlsModule; }; #endif //__LANGUAGE_H__