界面字符配置类

.h文件

#ifndef _INC_VWTP_RESDEF_H_
#define _INC_VWTP_RESDEF_H_

#define EHIDS_TXTDEF(EHIDSID) \
static const LPCTSTR EHIDSID = _T(#EHIDSID);

#define EHIDD_RESDEF(IDDID) \
static const LPCTSTR IDDID = _T(#IDDID);

EHIDD_RESDEF(EHIDB_BG_BGD)
EHIDD_RESDEF(EHIDB_BG_LOGO)

EHIDS_TXTDEF(EHIDS_PRODUCT_NAME)
EHIDS_TXTDEF(EHIDS_DEVICE_NAME)
EHIDS_TXTDEF(EHIDS_SIM_NAME)
EHIDS_TXTDEF(EHIDS_PRODUCT_VERSION)
EHIDS_TXTDEF(EHIDS_LANGUAGE)

//EHIDS_TXTDEF(IDR_MAINFRAME)
EHIDS_TXTDEF(EHIDS_SHELLERROR1)
EHIDS_TXTDEF(EHIDS_SHELLERROR2)
EHIDS_TXTDEF(EHIDS_SHELLERROR3)


EHIDS_TXTDEF(EHIDS_SHELLERROR4)

EHIDS_TXTDEF(EHIDS_PIN_EMERGENCY)
EHIDS_TXTDEF(EHIDS_TOOLBAR_LINK)
EHIDS_TXTDEF(EHIDS_TOOLBAR_OPENIE)
EHIDS_TXTDEF(EHIDS_TOOLBAR_CALL)
EHIDS_TXTDEF(EHIDS_TOOLBAR_SMS)
EHIDS_TXTDEF(EHIDS_TOOLBAR_ADDRESSBOOK)
EHIDS_TXTDEF(EHIDS_TOOLBAR_CALLINFO)
EHIDS_TXTDEF(EHIDS_TOOLBAR_UNLINK)
EHIDS_TXTDEF(EHIDS_DS_INITDevice)
EHIDS_TXTDEF(EHIDS_DS_SetModemFailed)
EHIDS_TXTDEF(EHIDS_DS_Disconnecting)
EHIDS_TXTDEF(EHIDS_DS_FindCOM_FAILED)
EHIDS_TXTDEF(EHIDS_DS_FindModem_FAILED)
EHIDS_TXTDEF(EHIDS_DS_InitModem_Failed)
EHIDS_TXTDEF(EHIDS_DSS_HadDISCONNECTED)
EHIDS_TXTDEF(EHIDS_DS_EXIT)
EHIDS_TXTDEF(EHIDS_SHORT_SMS_EDIT_TITLE)
EHIDS_TXTDEF(EHIDS_SMS_EDIT_TITLE)
EHIDS_TXTDEF(EHIDS_PROMPT_SEARCH_NET_CANCELING)
EHIDS_TXTDEF(EHIDC_BTN_DS_DIAL)
//EHIDS_TXTDEF(EHIDCANCEL)
//EHIDS_TXTDEF(IDOK)
EHIDS_TXTDEF(EHIDC_ST_DS_INFO_DISP)
EHIDS_TXTDEF(EHIDC_BTN_DS_OPTION)
//EHIDS_TXTDEF(EHIDC_STATIC)
EHIDS_TXTDEF(EHIDC_RDO_NS_IP_DYN)
EHIDS_TXTDEF(EHIDC_RDO_NS_IP_STA)
EHIDS_TXTDEF(EHIDC_IP_NS_IP)
EHIDS_TXTDEF(EHIDC_RDO_AP_CHAP)
EHIDS_TXTDEF(EHIDC_RDO_NS_DNS_DYN)
EHIDS_TXTDEF(EHIDC_RDO_NS_DNS_STA)
EHIDS_TXTDEF(EHIDC_IP_NS_DNS1)
EHIDS_TXTDEF(EHIDC_IP_NS_DNS2)
EHIDS_TXTDEF(EHIDC_IP_NS_WINS1)
EHIDS_TXTDEF(EHIDC_IP_NS_WINS2)
EHIDS_TXTDEF(EHIDC_BTN_NS_NEW)
EHIDS_TXTDEF(EHIDC_BTN_NS_DEL)
EHIDS_TXTDEF(EHIDC_BTN_NS_SAVE)
EHIDS_TXTDEF(EHIDC_BTN_NS_CLOSE)
EHIDS_TXTDEF(EHIDC_BTN_NS_CANCEL)

//EHIDS_TXTDEF(IDOK)

//EHIDS_TXTDEF(EHIDCANCEL)
EHIDS_TXTDEF(EHIDC_ST_NS_PROFILE)
EHIDS_TXTDEF(EHIDC_ST_NS_IP)
EHIDS_TXTDEF(EHIDC_ST_NS_AUTH)
EHIDS_TXTDEF(EHIDC_ST_NS_NUM)
EHIDS_TXTDEF(EHIDC_ST_NS_USER)
EHIDS_TXTDEF(EHIDC_ST_NS_PS)
EHIDS_TXTDEF(EHIDC_ST_NS_DNS)
EHIDS_TXTDEF(EHIDC_ST_NS_DNS_PRI)
EHIDS_TXTDEF(EHIDC_ST_NS_DNS_SEC)
EHIDS_TXTDEF(EHIDC_ST_NS_WINS)
EHIDS_TXTDEF(EHIDC_ST_NS_WINS_PRI)
EHIDS_TXTDEF(EHIDC_ST_NS__SEC)
EHIDS_TXTDEF(EHIDC_ED_NS_PROFILE)
EHIDS_TXTDEF(EHIDC_ST_GROUP_AP)
EHIDS_TXTDEF(EHIDC_ST_GROUP_NS_IP)

//EHIDS_TXTDEF(EHIDS_TOOLBAR_LINK)
//EHIDS_TXTDEF(EHIDS_TOOLBAR_UNLINK)
EHIDS_TXTDEF(EHIDS_CALL_LINKING)
EHIDS_TXTDEF(EHIDS_CALL_END)
EHIDS_TXTDEF(EHIDS_CALL_MSG_CAPTION)
EHIDS_TXTDEF(EHIDS_CALL_WARN_CAPTION)
EHIDS_TXTDEF(EHIDS_CALL_ERROR_CAPTION)
EHIDS_TXTDEF(EHIDS_CALL_FAILED_END)

EHIDS_TXTDEF(EHIDS_NS_PROFILE_EMPTY)
EHIDS_TXTDEF(EHIDS_NS_PROFILE_ALREADYEXIST)
EHIDS_TXTDEF(EHIDS_NS_ANP_NOEMPTY)
EHIDS_TXTDEF(EHIDS_NS_IP_NOEMPTY)
EHIDS_TXTDEF(EHIDS_NS_DNS_NOEMPTY)
EHIDS_TXTDEF(EHIDS_NS_WINS_NOEMPTY)

EHIDS_TXTDEF(EHIDS_NS_ST_DEFAULT_PROFILE)

EHIDS_TXTDEF(EHIDS_NS_ST_PROFILE)
EHIDS_TXTDEF(EHIDS_NW_AUTO_SUCCESS)
EHIDS_TXTDEF(EHIDS_NW_AUTO_FAILED)
EHIDS_TXTDEF(EHIDS_NW_MANU_FAILED)
EHIDS_TXTDEF(EHIDS_NW_MANU_MSG_TITLE)
EHIDS_TXTDEF(EHIDS_NW_MANU_OPERATOR)
EHIDS_TXTDEF(EHIDS_NW_MANU_PROHIBIT)
EHIDS_TXTDEF(EHIDS_NW_MANU_PROHIBIT_YES)
EHIDS_TXTDEF(EHIDS_NW_MANU_PROHIBIT_NO)
EHIDS_TXTDEF(EHIDS_NW_MANU_REG_SUCCESS)
EHIDS_TXTDEF(EHIDS_NW_MANU_REG_FAILED)
EHIDS_TXTDEF(EHIDS_DS_CREATEPB_FAILED)
EHIDS_TXTDEF(EHIDS_DS_DIAL_FAILED)
EHIDS_TXTDEF(EHIDS_DSS_OPENPORT)
EHIDS_TXTDEF(EHIDS_DSS_PORTOPENED)
EHIDS_TXTDEF(EHIDS_DSS_CONNECTDEVICE)
EHIDS_TXTDEF(EHIDS_DSS_DEVICECONNECTED)
EHIDS_TXTDEF(EHIDS_DSS_ALLDEVICESCONNECTED)
EHIDS_TXTDEF(EHIDS_DSS_AUTHENTICATE)
EHIDS_TXTDEF(EHIDS_DSS_AUTHNOTIFY)
EHIDS_TXTDEF(EHIDS_DSS_AUTHRETRY)
EHIDS_TXTDEF(EHIDS_DSS_AUTHCALLBACK)
EHIDS_TXTDEF(EHIDS_DS_DIAL_SUCCESS)
EHIDS_TXTDEF(EHIDS_ERROR_PROMPT)
EHIDS_TXTDEF(EHIDS_DSS_AUTHCHANGEPASSWORD)
EHIDS_TXTDEF(EHIDS_PROMPT)	
EHIDS_TXTDEF(EHIDS_DS_NOPROFILE)
EHIDS_TXTDEF(EHIDS_DS_INIT)
EHIDS_TXTDEF(EHIDS_DSS_AUTHPROJECT)
EHIDS_TXTDEF(EHIDS_DSS_AUTHLINKSPEED)
EHIDS_TXTDEF(EHIDS_DSS_AUTHACK)
EHIDS_TXTDEF(EHIDS_DSS_REAUTHENTICATE)
EHIDS_TXTDEF(EHIDS_DSS_AUTHENTICATED)
EHIDS_TXTDEF(EHIDS_DSS_PREPAREFORCALLBACK)
EHIDS_TXTDEF(EHIDS_DSS_WAITFORMODEMRESET)
EHIDS_TXTDEF(EHIDS_DSS_WAITFORCALLBACK)
EHIDS_TXTDEF(EHIDS_DSS_INTERACTIVE)
EHIDS_TXTDEF(EHIDS_DSS_RETRYAUTHENTICATION)
EHIDS_TXTDEF(EHIDS_DSS_CALLBACKSETBYCALLER)
EHIDS_TXTDEF(EHIDS_DSS_PASSWORDEXPIRED)
EHIDS_TXTDEF(EHIDS_DSS_CONNECTED)
EHIDS_TXTDEF(EHIDS_DSS_DISCONNECTED)
EHIDS_TXTDEF(EHIDS_DS_DISCONN_FAILED)
EHIDS_TXTDEF(EHIDS_DS_DISCONN_CONFIRM)
EHIDS_TXTDEF(EHIDS_CANNOT_SAVE_UNICODE)
EHIDS_TXTDEF(EHIDS_NS_PROFILE_ERROR)
EHIDS_TXTDEF(EHIDS_ADRBK_ERROR_CHECK)
EHIDS_TXTDEF(EHIDS_NEED_LOGO)
EHIDS_TXTDEF(EHIDS_NetConnect_Name)

EHIDS_TXTDEF(EHIDS_NS_NUM_NOEMPTY)
EHIDS_TXTDEF(EHIDS_NS_USERNAME_NOEMPTY)

EHIDS_TXTDEF(EHIDS_PortHardWareID_98_Name)
EHIDS_TXTDEF(EHIDS_PortHardWareID_XP_Name)
EHIDS_TXTDEF(EHIDS_ModemHardWareID_Name)
EHIDS_TXTDEF(EHIDS_2KModemHardWareID_Name)    // A0000VISTA caohepu 2008-03-03 BEGIN

EHIDS_TXTDEF(EHIDS_DS_Connecting)
EHIDS_TXTDEF(EHIDS_DSS_CONNECTfAILED)

//FONCOS名称
EHIDS_TXTDEF(EHIDS_SERV_FONCOS)
EHIDS_TXTDEF(EHIDS_DOMAIN_FONCOS)
//MULTIFON_KIT名称
EHIDS_TXTDEF(EHIDS_SERV_MULTIFON_KIT)
EHIDS_TXTDEF(EHIDS_DOMAIN_MULTIFON_KIT)

//POSTPAID名称
EHIDS_TXTDEF(EHIDS_SERV_POSTPAID)
EHIDS_TXTDEF(EHIDS_DOMAIN_POSTPAID)

//MULTFON名称
EHIDS_TXTDEF(EHIDS_SERV_MULTFON)
EHIDS_TXTDEF(EHIDS_DOMAIN_MULTFON)

//软件版本
EHIDS_TXTDEF(EHIDR_VERSION)

//软件名称
EHIDS_TXTDEF(EHIDR_WIZNAME)

//退出提示语句
EHIDS_TXTDEF(EHIDS_CANCEL_PROMPT)

//退出提示语句
EHIDS_TXTDEF(EHIDS_EXIT_PROMPT)

//保存提示语句
EHIDS_TXTDEF(EHIDS_SAVE_PROMPT)

//保存提示语句
EHIDS_TXTDEF(EHIDS_CONNECT_PROMPT)

//帮助名称;
EHIDS_TXTDEF(EHIDS_HELP_WINDOW_CAPTION)



EHIDD_RESDEF(EHIDB_SERVICE_FOS)
EHIDD_RESDEF(EHIDB_SERVICE_MFKIT)

EHIDD_RESDEF(EHIDB_SERVICE_POSTPAID)
EHIDD_RESDEF(EHIDB_SERVICE_MULTIFON)

//foncos类型的提示语句
EHIDS_TXTDEF(EHIDB_SERVICE_FOS_CAPTION)
EHIDS_TXTDEF(EHIDB_SERVICE_FOS_NOTE)

//MFKIT类型的提示语句
EHIDS_TXTDEF(EHIDB_SERVICE_MFKIT_CAPTION)
EHIDS_TXTDEF(EHIDB_SERVICE_MFKIT_NOTE)

//POSTPAID类型的提示语句
EHIDS_TXTDEF(EHIDB_SERVICE_POSTPAID_CAPTION)
EHIDS_TXTDEF(EHIDB_SERVICE_POSTPAID_NOTE)

//MULTIFON类型的提示语句
EHIDS_TXTDEF(EHIDB_SERVICE_MULTIFON_CAPTION)
EHIDS_TXTDEF(EHIDB_SERVICE_MULTIFON_NOTE)


//BUTTON Next
EHIDS_TXTDEF(EHIDB_BUTTON_NEXT)

//BUTTON Reset
EHIDS_TXTDEF(EHIDB_BUTTON_RESET)

//BUTTON Back
EHIDS_TXTDEF(EHIDB_BUTTON_BACK)

//BUTTON Connect
EHIDS_TXTDEF(EHIDB_BUTTON_CONNECT)

//BUTTON Cancel
EHIDS_TXTDEF(EHIDB_BUTTON_CANCEL)

//BUTTON help
EHIDS_TXTDEF(EHIDB_BUTTON_HELP)

//BUTTON about
EHIDS_TXTDEF(EHIDB_BUTTON_ABOUT)

//BUTTON help topics
EHIDS_TXTDEF(EHIDB_BUTTON_HELP_TOPICS)

//Service page caption
EHIDS_TXTDEF(EHIDB_SERVICE_CAPTION);

//Service page description
EHIDS_TXTDEF(EHIDB_SERVICE_DESCRIPTION);

//set page caption
EHIDS_TXTDEF(EHIDB_SET_CAPTION);

//set page description
EHIDS_TXTDEF(EHIDB_SET_DESCRIPTION);

//Connect page caption
EHIDS_TXTDEF(EHIDB_CONNECT_CAPTION);

//Connect page description
EHIDS_TXTDEF(EHIDB_CONNECT_DESCRIPTION);

//Rate page caption
EHIDS_TXTDEF(EHIDB_RATE_CAPTION);

//Rate page description
EHIDS_TXTDEF(EHIDB_RATE_DESCRIPTION);

EHIDS_TXTDEF(EHIDS_POWER_SUSPEND_TEXT);

//USB Device HardWareID
EHIDS_TXTDEF(EHIDS_USBHardWareID_Name);

EHIDS_TXTDEF(EHIDS_DS_DISCONNING_PROMPT);

//网络设置的大小模式;
EHIDS_TXTDEF(EHIDS_NETWORK_SET_MODE);
#endif


.h文件

#ifndef _INC_DATACARD_CRESMGR_H_
#define _INC_DATACARD_CRESMGR_H_

#include "..\commbase\CCRCIniFile.h"

#define RESMGR_REGDLG \
CResMgr::Instance().LoadWndStrings(this, IDD)

#define RESMGR_REGMENU(pMenu, uMenuID)  \
CResMgr::Instance().LoadMenuStrings(pMenu, uMenuID)

#define LOAD_BITMAP(lpszBmpID, Bmp) \
CResMgr::Instance().LoadBitmap(lpszBmpID, Bmp)


class CResMgr
{
public:
    ~CResMgr();
    static CResMgr& Instance();
    
    DWORD Initialize();

    void CreateIniFile(const CWnd* pWnd, UINT uID);

    void CreateIniFile(CMenu* pMenu, UINT uMenuID);

    BOOL LoadBitmap(LPCTSTR lpszBmpID, CBitmap* pBmp) const;

    HICON LoadIcon(LPCTSTR lpszIconID) const;
    
    const CString LoadString(LPCTSTR lpszTxtID) const;

    const CString LoadStringWithOEMInfo(LPCTSTR lpszTextID, LPCTSTR lpszOEMDataID) const;
    const CString LoadStringWithProductName(LPCTSTR lpszTxtID) const;
    
    void LoadWndStrings(CWnd* pWnd, UINT uID) const;

    void LoadMenuStrings(CMenu* pMenu, UINT uMenuID);

    const CString GetResFileName(LPCTSTR lpszResID) const;

    void UpdateWndTextWithOEMInfo(CWnd* pWnd, LPCTSTR lpszOEMInfoID) const;
    void UpdateWndTextWithOEMInfo(const CDialog* pDlg, UINT uWndID, LPCTSTR lpszOEMInfoID) const;
    
    void UpdateMenuTextWithOEMInfo(CMenu* pMenu, UINT uMenuItemID, LPCTSTR lpszOEMInfoID) const;
    
    const CString GetOEMInfo(LPCTSTR lpszOEMInfoID) const;

    CResMgr();
    
private:
    
	const CString FormatLoadString(const CString &strSource,
		const CString &strFormat) const;
	

    void DoUpdateMenuStrings(CMenu* pMenu, const CString& strMenuPath, UINT uMenuID, BOOL bSave);

    HANDLE LoadImage(LPCTSTR lpszImageID, UINT uType) const;

    BOOL LoadAllData();
    
private:
    CCRCIniFile m_IniTxt;
    CCRCIniFile m_IniData;
    CCRCIniFile m_IniOem;

    CMapStringToPtr m_mapRes;

    CMapStringToString m_ProductInfo;
};

#endif


.cpp文件

 

#include "stdafx.h"

#include "..\commbase\CSysInfo.h"
#include "CResMgr.h"
#include "..\commbase\GlobalDefine.h"
#include "ResDef.h"

#define EMPTY_STRING _T("")

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//------------------------------------------------------------------------
// Function    : CResMgr::CResMgr()
// Description : constructor
// Input       : 
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
CResMgr::CResMgr()
    :m_IniTxt(PROFILE_FILENAME_TXT), m_IniData(PROFILE_FILENAME_DATA), 
     m_IniOem(PROFILE_FILENAME_OEM)
{
}

//------------------------------------------------------------------------
// Function    : CResMgr::~CResMgr()
// Description : Destructor
// Input       : 
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
CResMgr::~CResMgr()
{
    POSITION pos;

    try
    {
        pos = m_mapRes.GetStartPosition();
        while (NULL != pos)
        {
            CString strId;
            HANDLE hRes = NULL;
            m_mapRes.GetNextAssoc(pos, strId, hRes);
            ::DeleteObject((HGDIOBJ)hRes);
        }
        m_mapRes.RemoveAll();

        m_ProductInfo.RemoveAll();
    }
    catch(...)
    {

    }

   
}

//------------------------------------------------------------------------
// Function    : CResMgr& Instance()
// Description : 返回ResMgr的一个实例句柄
// Input       : 
// Output      : 
// Return      : CResMgr的一个实例
// Others      : 
//------------------------------------------------------------------------
CResMgr& CResMgr::Instance()
{
    static CResMgr theResMgr;
    return theResMgr;
}

//------------------------------------------------------------------------
// Function    : DWORD Initialize()
// Description : 初始化
// Input       : 
// Output      : 
// Return      : ERR_INVALID_MAGICNUM - CRC校验失败
//				 ERR_SUCCESS		  - 成功
// Others      : 
//------------------------------------------------------------------------
DWORD CResMgr::Initialize()
{
    if (!m_IniTxt.CheckMagic())
    {
        return ERR_INVALID_MAGICNUM;
    }

    if (!m_IniData.CheckMagic())
    {
        return ERR_INVALID_MAGICNUM;
    }

    if (!m_IniOem.CheckMagic())
    {
        return ERR_INVALID_MAGICNUM;
    }

    CCRCIniFile IniSchema(PROFILE_FILENAME_SCHEMA);
    if (!IniSchema.CheckMagic())
    {
        return ERR_INVALID_MAGICNUM;
    }

    CCRCIniFile IniSysConfig(SYSTEM_PATHNAME + SYSTEM_CONFIG);
    if (!IniSysConfig.CheckMagic())
    {
        return ERR_INVALID_MAGICNUM;
    }

    CString strProductVer = IniSysConfig.GetProfileStr(EHIDS_PRODUCT_VERSION, PROFILE_RESENTRY_VALUE, EMPTY_STRING);
    m_ProductInfo.SetAt(EHIDS_PRODUCT_VERSION, strProductVer);
    CString strLanguage = m_IniTxt.GetProfileStr(EHIDS_LANGUAGE, PROFILE_RESENTRY_VALUE, EMPTY_STRING);
    m_ProductInfo.SetAt(EHIDS_LANGUAGE, strLanguage);
    
    if (!LoadAllData())
    {
        return ERR_RESFILE_ERROR;
    }

    //TODO:sysconfig.dat -> checkmagic

    return ERR_SUCCESS;
}

//------------------------------------------------------------------------
// Function    : void CreateIniFile(CWnd* pWnd, UINT uID)
// Description : 根据当前窗口创建相应Ini文件内容
// Input       : pWnd - 窗口指针
//				 uID -  窗口ID
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
void CResMgr::CreateIniFile(const CWnd* pWnd, UINT uID)
{
    ASSERT(NULL != pWnd);
    
    //根据ID构造SECTION的名字
    CString strID; 
    strID.Format(_T("IDD%u_Title"), uID);
    
    //写INI文件
    CString strText;
    pWnd->GetWindowText(strText);

    (void)m_IniTxt.SetProfileStr(strID, PROFILE_RESENTRY_COMMENT, strText);
    (void)m_IniTxt.SetProfileStr(strID, PROFILE_RESENTRY_VALUE, strText);
    
    //得到当前窗口的子窗口
    CWnd* pChildWnd = pWnd->GetWindow(GW_CHILD);
    
    while(pChildWnd != NULL)
    {
        //根据ID构造SECTION的名字
        strID.Format(_T("IDD%u_%u"), uID, pChildWnd->GetDlgCtrlID());
        
        pChildWnd->GetWindowText(strText);

        //写INI文件
        (void)m_IniTxt.SetProfileStr(strID, PROFILE_RESENTRY_COMMENT, strText);
        (void)m_IniTxt.SetProfileStr(strID, PROFILE_RESENTRY_VALUE, strText);    
        
        //得到当前窗口的兄弟窗口
        pChildWnd = pChildWnd->GetWindow(GW_HWNDNEXT);
    }
}

//------------------------------------------------------------------------
// Function    : void LoadWndStrings(CWnd* pWnd, UINT uID)
// Description : 加载相应窗口的字符串
// Input       : pWnd - 窗口指针
//				 uID -  窗口ID
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
void CResMgr::LoadWndStrings(CWnd* pWnd, UINT uID) const
{
    ASSERT(NULL != pWnd);
    
    CString strID;
    strID.Format(_T("IDD%u_Title"), uID);
    
    //根据ID获得窗口文字
    CString strTitle; 
    strTitle = LoadStringWithProductName(strID);
    
    //设置窗口文字
    pWnd->SetWindowText(strTitle);

    //得到当前窗口的子窗口
    CWnd* pChildWnd = pWnd->GetWindow(GW_CHILD);
    
    while(pChildWnd != NULL)
    {
        //得到窗口文字的ID
        strID.Format(_T("IDD%u_%u"), uID, pChildWnd->GetDlgCtrlID());
        
        //根据ID获得窗口文字
        CString strText = LoadString(strID);
        
        //设置窗口文字
        pChildWnd->SetWindowText(strText);
        
        //得到当前窗口的兄弟窗口
        pChildWnd = pChildWnd->GetWindow(GW_HWNDNEXT);
    }
}

//------------------------------------------------------------------------
// Function    : void CreateIniFile(CMenu* pMenu, UINT uMenuID)
// Description : 创建指定菜单的INI文件内容
// Input       : pMenu   - 菜单指针
//				 uMenuID - 菜单ID
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
void CResMgr::CreateIniFile(CMenu* pMenu, UINT uMenuID)
{
    ASSERT(NULL != pMenu);

    CString strMenuPath;
    strMenuPath.Format(_T("IDM%u"), uMenuID);

    DoUpdateMenuStrings(pMenu, strMenuPath, uMenuID, TRUE);
}

//------------------------------------------------------------------------
// Function    : void LoadMenuStrings(CMenu* pMenu, UINT uMenuID)
// Description : 加载指定菜单的字符串
// Input       : pMenu   - 菜单指针
//				 uMenuID - 菜单ID
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
void CResMgr::LoadMenuStrings(CMenu* pMenu, UINT uMenuID)
{
    ASSERT(NULL != pMenu);
    
    CString strMenuPath;
    strMenuPath.Format(_T("IDM%u"), uMenuID);
    
    DoUpdateMenuStrings(pMenu, strMenuPath, uMenuID, FALSE);
}

//------------------------------------------------------------------------
// Function    : void DoUpdateMenuStrings(CMenu* pMenu, 
//										  const CString& strMenuPath, 
//										  UINT uMenuID, BOOL bSave)
// Description : pMenu       - 菜单指针
//				 strMenuPath -  菜单路径
//				 uMenuID     - 菜单ID
//				 bSave		 - 是否保存
// Input       : 
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
void CResMgr::DoUpdateMenuStrings(CMenu* pMenu, const CString& strMenuPath, UINT uMenuID, BOOL bSave)
{
    //根据ID构造菜单SECTION的名字
    int iItemCount = (int)pMenu->GetMenuItemCount();
    
    //遍历所有的子菜单或菜单项
    for(int i = 0; i < iItemCount; i++)
    {
        int uID = (int)pMenu->GetMenuItemID(i);
        // 为分割符菜单
        if (0 == uID)
        {
            continue;
        }
        
        CString strSecName;
        strSecName.Format(_T("_%u"), i);

        if (-1 != uID)
        {
            // 对普通菜单使用ID作为标识
            strSecName.Format(_T("IDM%u_%u"), uMenuID, uID);
        }
        else
        {
            // 对有子菜单的菜单使用位置作为标识
            strSecName = strMenuPath + strSecName;
        }
        
        if (bSave)
        {
            CString strText;
            (void)pMenu->GetMenuString((UINT)i, strText, MF_BYPOSITION);
            
            //写INI文件
            (void)m_IniTxt.SetProfileStr(strSecName, PROFILE_RESENTRY_COMMENT, strText);
            (void)m_IniTxt.SetProfileStr(strSecName, PROFILE_RESENTRY_VALUE, strText); 
        }
        else
        {
            CString strText = m_IniTxt.GetProfileStr(strSecName, PROFILE_RESENTRY_VALUE, EMPTY_STRING);
            if (-1 != uID)
            {
                (void)pMenu->ModifyMenu((UINT)uID, MF_BYCOMMAND|MF_STRING, (UINT)uID, strText);
            }
            else
            {
                (void)pMenu->ModifyMenu((UINT)i, MF_BYPOSITION|MF_STRING, (UINT)i, strText);
            }
        }
        
        // 表示有子菜单
        if (-1 == uID)
        {
            CMenu* pSubMenu = pMenu->GetSubMenu(i);
            DoUpdateMenuStrings(pSubMenu, strSecName, uMenuID, bSave);
        }
    }
}

//------------------------------------------------------------------------
// Function    : BOOL LoadBitmap(LPCTSTR lpszBmpID, CBitmap* pBmp)
// Description : 加载图片
// Input       : lpszBmpID - 图片ID
//				 pBmp	   - 目标图片指针
// Output      : 
// Return      : TRUE - OK FALSE - Failed
// Others      : 
//------------------------------------------------------------------------
BOOL CResMgr::LoadBitmap(LPCTSTR lpszBmpID, CBitmap* pBmp) const
{
    ASSERT(NULL != pBmp);

    /*判断是否多次设置图片*/
    if (pBmp->m_hObject != NULL)
    {
        (void)pBmp->Detach();
        (void)pBmp->DeleteObject();
    }
    

    HANDLE hnd = NULL;
    if (!m_mapRes.Lookup(lpszBmpID, hnd))
    {
   
        ASSERT(FALSE);
        return FALSE;
    }


    (void)pBmp->Attach((HBITMAP)hnd);

    return TRUE;
}

//------------------------------------------------------------------------
// Function    : const CString LoadString(LPCTSTR lpszTxtID)
// Description : 加载ID字符串对应指针内容
// Input       : lpszTxtID - ID字符串
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
const CString CResMgr::LoadString(LPCTSTR lpszTxtID) const
{
    CString strProductInfo;
    if (m_ProductInfo.Lookup(lpszTxtID, strProductInfo))
    {
        return strProductInfo;
    }

    CString strSource = m_IniTxt.GetProfileStr(lpszTxtID, 
		PROFILE_RESENTRY_VALUE, EMPTY_STRING);

	(void)strSource.Replace(_T("\\r"),_T("\r"));
	(void)strSource.Replace(_T("\\n"),_T("\n"));

	CString strFormat = m_IniTxt.GetProfileStr(lpszTxtID,
		PROFILE_RESENTRY_FMT, EMPTY_STRING);
	return FormatLoadString(strSource,strFormat);
	
}

//------------------------------------------------------------------------
// Function    : const CString LoadStringWithProductName(LPCTSTR lpszTxtID)
// Description : 将产品名称格式化到相应字符串中
// Input       : lpszTxtID - ID字符串
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
const CString CResMgr::LoadStringWithProductName(LPCTSTR lpszTxtID) const
{
    return LoadStringWithOEMInfo(lpszTxtID, EHIDS_PRODUCT_NAME);
}

//------------------------------------------------------------------------
// Function    : HICON LoadIcon(LPCTSTR lpszIconID)
// Description : 加载图标
// Input       : lpszIconID - 图标ID字符串
// Output      : 
// Return      : 图标句柄
// Others      : 
//------------------------------------------------------------------------
HICON CResMgr::LoadIcon(LPCTSTR lpszIconID) const
{

    HANDLE hIcon = NULL;
    if (!m_mapRes.Lookup(lpszIconID, hIcon))
    {
        ASSERT(FALSE);
       
        return NULL;
    }
    return (HICON)hIcon;

}

//------------------------------------------------------------------------
// Function    : HANDLE LoadImage(LPCTSTR lpszImageID, UINT uType)
// Description : 加载图像
// Input       : lpszImageID - 图片ID字符串
//				 uType		 - 图片类型
// Output      : 
// Return      : 图片Handle
// Others      : 
//------------------------------------------------------------------------
HANDLE CResMgr::LoadImage(LPCTSTR lpszImageID, UINT uType) const
{
    CString strFileName = GetResFileName(lpszImageID);
    
    HANDLE hnd = ::LoadImage(NULL, strFileName, uType, 0, 0, LR_LOADFROMFILE);
    ASSERT(NULL != hnd);

    return hnd;
}

//------------------------------------------------------------------------
// Function    : const CString GetResFileName(LPCTSTR lpszResID)
// Description : 从资源ID字符串获取文件名
// Input       : lpszResID - 资源ID字符串
// Output      : 
// Return      : 资源文件名
// Others      : 
//------------------------------------------------------------------------
const CString CResMgr::GetResFileName(LPCTSTR lpszResID) const
{
    CString strFileName = m_IniData.GetProfileStr(lpszResID, PROFILE_RESENTRY_VALUE, EMPTY_STRING);
    ASSERT(!strFileName.IsEmpty());
    strFileName = CSysInfo::GetSysPath() + strFileName;
    return strFileName;
}

//------------------------------------------------------------------------
// Function    : const CString LoadStringWithOEMInfo(LPCTSTR lpszTextID, 
//													 LPCTSTR lpszOEMDataID)
// Description : 加载并使用OEM 信息格式化字符串
// Input       : lpszTextID		- 格式化字符串
//				 lpszOEMDataID	- OEM信息
// Output      : 
// Return      : 格式化后的字符串
// Others      : 
//------------------------------------------------------------------------
const CString CResMgr::LoadStringWithOEMInfo(LPCTSTR lpszTextID, LPCTSTR lpszOEMDataID) const
{
    CString strFormat = LoadString(lpszTextID);
    CString strOEMData = GetOEMInfo(lpszOEMDataID);
    CString strText;
	
    strText.Format(strFormat, strOEMData);
    return strText;
}

//------------------------------------------------------------------------
// Function    : void UpdateWndTextWithOEMInfo(CWnd *pWnd, 
//											   LPCTSTR lpszOEMInfoID)
// Description : 使用OEM 信息格式化并更新windows字符串信息
// Input       : pWnd		- 窗口指针
//				 lpszOEMInfoID - OEM ID字符串
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
void CResMgr::UpdateWndTextWithOEMInfo(CWnd *pWnd, LPCTSTR lpszOEMInfoID) const
{
    CString strFormat;
    pWnd->GetWindowText(strFormat);
    CString strOEMInfo = GetOEMInfo(lpszOEMInfoID);
    CString strText;

    strText.Format(strFormat, strOEMInfo);
    pWnd->SetWindowText(strText);
}

//------------------------------------------------------------------------
// Function    : void UpdateWndTextWithOEMInfo(CDialog* pDlg, 
//											   UINT uWndID, 
//											   LPCTSTR lpszOEMInfoID)
// Description : 使用OEM 信息格式化并更新Dialog字符串信息
// Input       : pDlg			- Dialog指针
//				 uWndID 		- 窗口ID 
//				 lpszOEMInfoID  - OEM ID字符串指针
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
void CResMgr::UpdateWndTextWithOEMInfo(const CDialog* pDlg, UINT uWndID, LPCTSTR lpszOEMInfoID) const
{
    CWnd* pWnd = pDlg->GetDlgItem(uWndID);
    if (NULL != pWnd)
    {
        UpdateWndTextWithOEMInfo(pWnd, lpszOEMInfoID);
    }
}

//------------------------------------------------------------------------
// Function    : void UpdateMenuTextWithOEMInfo(CMenu *pMenu, 
//												UINT uMenuItemID, 
//												LPCTSTR lpszOEMInfoID)
// Description : 使用OEM ID字符串去格式化相关信息并更新菜单
// Input       : pMenu			- 菜单指针
//				 uMenuItemID	- 菜单ID
//				 lpszOEMInfoID	- OEM信息ID字符串 
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
void CResMgr::UpdateMenuTextWithOEMInfo(CMenu *pMenu, UINT uMenuItemID, 
										LPCTSTR lpszOEMInfoID) const
{
    CString strFormat;
    (void)pMenu->GetMenuString(uMenuItemID, strFormat, MF_BYCOMMAND);
    CString strOEMInfo = GetOEMInfo(lpszOEMInfoID);
    CString strText;

    strText.Format(strFormat, strOEMInfo);
    (void)pMenu->ModifyMenu(uMenuItemID, MF_BYCOMMAND|MF_STRING, uMenuItemID, strText);
}

//------------------------------------------------------------------------
// Function    : const CString GetOEMInfo(LPCTSTR lpszOEMInfoID)
// Description : 通过OEM ID字符串获取相应OEM信息
// Input       : lpszOEMInfoID - OEM ID字符串
// Output      : 
// Return      : 
// Others      : 
//------------------------------------------------------------------------
const CString CResMgr::GetOEMInfo(LPCTSTR lpszOEMInfoID) const
{
    CString strProductInfo;
    if (m_ProductInfo.Lookup(lpszOEMInfoID,strProductInfo ))
    {
        return strProductInfo;
    }

    return m_IniOem.GetProfileStr(lpszOEMInfoID, PROFILE_RESENTRY_VALUE, EMPTY_STRING);
}

//-----------------------------------------------------------------------------
//Function    : const CString CResMgr::FormatLoadString(CString strSource, 
//		CString strFormat)
//Description : 格式化装载字符串
//Calls       : 无
//Called By   : LoadString()
//Table Accessed : 无
//Table Updated  : 无
//Input       : 
	//strSource	: 装载字符串
	//strFormat: 格式化内容
//Output      : 格式化装载字符串
//Return      : 格式化后字符串
//Others      : 
//-----------------------------------------------------------------------------
const CString CResMgr::FormatLoadString(const CString &strSource, 
										 const CString &strFormat) const
{
	if (strSource.IsEmpty() || strFormat.IsEmpty()) 
	{
		return strSource;
	}

	const CString strInsteadTag(_T("%s:"));	// 被替换的字符串标识
	const CString strInstead(_T("%s"));		// 被替换的字符串

	CString strFmtLeft = strFormat;	// Format 剩余字符串
	CString strResult = strSource;	// Format 结果

	int iReplacePos = 0;			// 当前开始替换位置
	
	while (!strFmtLeft.IsEmpty())		// 循环查找每一个 %s
	{
		// 去除空格后,strInstead 应该在字符串开始
		strFmtLeft.TrimLeft();
		int iPos = strFmtLeft.Find(strInsteadTag);
		ASSERT(0 == iPos);
		
		// 查找第二个
		iPos = strFmtLeft.Find(strInsteadTag , iPos + 1);

		CString strParmID;

		// 只余最后一个 %s
		if (-1 == iPos) 
		{
			strParmID = strFmtLeft.Right(strFmtLeft.GetLength() 
				- strInsteadTag.GetLength());
			strFmtLeft.Empty();
		}
		else
		{
			// 获取参数字符串ID
			strParmID = strFmtLeft.Left(iPos + 1);
			strFmtLeft = strFmtLeft.Right(strFmtLeft.GetLength() 
				- strParmID.GetLength());
			strParmID = strParmID.Right(strParmID.GetLength() 
				- strInsteadTag.GetLength());
		}

		// 获取参数字符串
		CString strParm = LoadString(strParmID);

		if (strParm.IsEmpty()) 
		{
			strParm = strInstead;
		}

		// 将参数字符串替换 %s
		iReplacePos = strResult.Find(strInstead, iReplacePos);

		CString strResultLeft = strResult.Left(iReplacePos);
		CString strResultRight = strResult.Right(strResult.GetLength() 
			- iReplacePos);
		
		strResultRight = strResultRight.Right(strResultRight.GetLength() 
			- strInstead.GetLength());

		strResult = strResultLeft + strParm + strResultRight;

		iReplacePos += strParm.GetLength();
	}

	return strResult;
}


//-----------------------------------------------------------------------------
//Function    : LoadAllData 
//Description : 判断说有加载的数据文件是否存在
//Input       : 
//Output      : 
//Return      : 
//Others      : 
//-----------------------------------------------------------------------------
BOOL CResMgr::LoadAllData()
{
    for (m_IniData.FirstSection(); !m_IniData.IsDoneSection(); m_IniData.NextSection())
    {
        CString strSecName = m_IniData.GetCurSectionName();
        CString strFileName = GetResFileName(strSecName);
        if (!CSysInfo::IsFileExists(strFileName))
        {
            return FALSE;
        }
        strFileName.MakeUpper();
        strFileName.TrimRight();
        CString strExtName = strFileName.Right(3);
        HANDLE hRes = NULL;
        if (_T("BMP") == strExtName)
        {
            hRes = LoadImage(strSecName, IMAGE_BITMAP);
        }
        else if (_T("ICO") == strExtName)
        {
            hRes = LoadImage(strSecName, IMAGE_ICON);
        }

        if (NULL != hRes)
        {
            m_mapRes.SetAt(strSecName, hRes);
        }
    }
    return TRUE;
}


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值