.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;
}