You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.0 KiB
156 lines
4.0 KiB
/******************************************************************************
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
LocRes.cpp
|
|
|
|
Abstract:
|
|
This file contains the implementation of functions to ease localization.
|
|
|
|
Revision History:
|
|
Davide Massarenti (Dmassare) 06/17/2000
|
|
created
|
|
|
|
******************************************************************************/
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define ENSURE_MODULE() \
|
|
if(g_hModule == NULL) \
|
|
{ \
|
|
HRESULT hr; \
|
|
\
|
|
if(FAILED(hr = LocalizeInit())) return hr; \
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static HINSTANCE g_hModule;
|
|
|
|
HRESULT MPC::LocalizeInit( LPCWSTR szFile )
|
|
{
|
|
g_hModule = ::LoadLibraryW( szFile ? szFile : L"HCAppRes.dll" );
|
|
if(g_hModule == NULL)
|
|
{
|
|
return HRESULT_FROM_WIN32(::GetLastError());
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT MPC::LocalizeString( /*[in]*/ UINT uID ,
|
|
/*[in]*/ LPSTR lpBuf ,
|
|
/*[in]*/ int nBufMax ,
|
|
/*[in]*/ bool fMUI )
|
|
{
|
|
MPC::Impersonation imp;
|
|
|
|
ENSURE_MODULE();
|
|
|
|
if(fMUI)
|
|
{
|
|
if(SUCCEEDED(imp.Initialize())) imp.Impersonate();
|
|
}
|
|
|
|
if(::LoadStringA( g_hModule, uID, lpBuf, nBufMax ) == 0) return E_FAIL;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT MPC::LocalizeString( /*[in]*/ UINT uID ,
|
|
/*[in]*/ LPWSTR lpBuf ,
|
|
/*[in]*/ int nBufMax ,
|
|
/*[in]*/ bool fMUI )
|
|
{
|
|
MPC::Impersonation imp;
|
|
|
|
ENSURE_MODULE();
|
|
|
|
if(fMUI)
|
|
{
|
|
if(SUCCEEDED(imp.Initialize())) imp.Impersonate();
|
|
}
|
|
|
|
if(::LoadStringW( g_hModule, uID, lpBuf, nBufMax ) == 0) return E_FAIL;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT MPC::LocalizeString( /*[in ]*/ UINT uID ,
|
|
/*[out]*/ MPC::string& szStr ,
|
|
/*[in ]*/ bool fMUI )
|
|
{
|
|
CHAR rgTmp[512];
|
|
HRESULT hr;
|
|
|
|
if(SUCCEEDED(hr = LocalizeString( uID, rgTmp, MAXSTRLEN(rgTmp), fMUI )))
|
|
{
|
|
szStr = rgTmp;
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT MPC::LocalizeString( /*[in ]*/ UINT uID ,
|
|
/*[out]*/ MPC::wstring& szStr ,
|
|
/*[in ]*/ bool fMUI )
|
|
{
|
|
WCHAR rgTmp[512];
|
|
HRESULT hr;
|
|
|
|
if(SUCCEEDED(hr = LocalizeString( uID, rgTmp, MAXSTRLEN(rgTmp), fMUI )))
|
|
{
|
|
szStr = rgTmp;
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT MPC::LocalizeString( /*[in ]*/ UINT uID ,
|
|
/*[out]*/ CComBSTR& bstrStr ,
|
|
/*[in ]*/ bool fMUI )
|
|
{
|
|
WCHAR rgTmp[512];
|
|
HRESULT hr;
|
|
|
|
if(SUCCEEDED(hr = LocalizeString( uID, rgTmp, MAXSTRLEN(rgTmp), fMUI )))
|
|
{
|
|
bstrStr = rgTmp;
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
int MPC::LocalizedMessageBox( UINT uID_Title, UINT uID_Msg, UINT uType )
|
|
{
|
|
MPC::wstring szTitle; MPC::LocalizeString( uID_Title, szTitle );
|
|
MPC::wstring szMsg; MPC::LocalizeString( uID_Msg , szMsg );
|
|
|
|
return ::MessageBoxW( NULL, szMsg.c_str(), szTitle.c_str(), uType );
|
|
}
|
|
|
|
int MPC::LocalizedMessageBoxFmt( UINT uID_Title, UINT uID_Msg, UINT uType, ... )
|
|
{
|
|
MPC::wstring szTitle; MPC::LocalizeString( uID_Title, szTitle );
|
|
MPC::wstring szMsg; MPC::LocalizeString( uID_Msg , szMsg );
|
|
|
|
WCHAR rgLine[512];
|
|
va_list arglist;
|
|
|
|
|
|
//
|
|
// Format the log line.
|
|
//
|
|
va_start( arglist, uID_Msg );
|
|
StringCchVPrintfW( rgLine, ARRAYSIZE(rgLine), szMsg.c_str(), arglist );
|
|
va_end( arglist );
|
|
|
|
|
|
return ::MessageBoxW( NULL, rgLine, szTitle.c_str(), uType );
|
|
}
|