📄 csharedata.cpp
字号:
}
return false;
}
/*! 設定されている外部Winヘルプのファイル名を返す。
タイプ別設定にファイル名が設定されていれば、そのファイル名を返します。
そうでなければ、共通設定のファイル名を返します。
*/
char* CShareData::GetExtWinHelp( int nTypeNo )
{
if (0 <= nTypeNo && nTypeNo < MAX_TYPES && m_pShareData->m_Types[nTypeNo].m_szExtHelp[0] != '\0'){
return m_pShareData->m_Types[nTypeNo].m_szExtHelp;
}
return m_pShareData->m_Common.m_szExtHelp;
}
/*! 外部HTMLヘルプが設定されているか確認。
*/
bool CShareData::ExtHTMLHelpIsSet( int nTypeNo )
{
if (m_pShareData->m_Common.m_szExtHtmlHelp[0] != '\0'){
return true; // 共通設定に設定されている
}
if (nTypeNo < 0 || MAX_TYPES <= nTypeNo ){
return false; // 共通設定に設定されていない&nTypeNoが範囲外。
}
if (m_pShareData->m_Types[nTypeNo].m_szExtHtmlHelp[0] != '\0'){
return true; // タイプ別設定に設定されている。
}
return false;
}
/*! 設定されている外部Winヘルプのファイル名を返す。
タイプ別設定にファイル名が設定されていれば、そのファイル名を返します。
そうでなければ、共通設定のファイル名を返します。
*/
char* CShareData::GetExtHTMLHelp( int nTypeNo )
{
if (0 <= nTypeNo && nTypeNo < MAX_TYPES && m_pShareData->m_Types[nTypeNo].m_szExtHtmlHelp[0] != '\0'){
return m_pShareData->m_Types[nTypeNo].m_szExtHtmlHelp;
}
return m_pShareData->m_Common.m_szExtHtmlHelp;
}
/*! ビューアを複数起動しないがONかを返す。
*/
bool CShareData::HTMLHelpIsSingle( int nTypeNo )
{
if (0 <= nTypeNo && nTypeNo < MAX_TYPES && m_pShareData->m_Types[nTypeNo].m_szExtHtmlHelp[0] != '\0'){
return (m_pShareData->m_Types[nTypeNo].m_bHtmlHelpIsSingle != FALSE);
}
return (m_pShareData->m_Common.m_bHtmlHelpIsSingle != FALSE);
}
/*! 日付をフォーマット
systime:時刻データ
pszDest:フォーマット済みテキスト格納用バッファ
nDestLen:pszDestの長さ
pszDateFormat:
カスタムのときのフォーマット
*/
const char* CShareData::MyGetDateFormat( SYSTEMTIME& systime, char* pszDest, int nDestLen )
{
return MyGetDateFormat( systime, pszDest, nDestLen, m_pShareData->m_Common.m_nDateFormatType, m_pShareData->m_Common.m_szDateFormat );
}
const char* CShareData::MyGetDateFormat( SYSTEMTIME& systime, char* pszDest, int nDestLen, int nDateFormatType, char* szDateFormat )
{
const char* pszForm;
DWORD dwFlags;
if( 0 == nDateFormatType ){
dwFlags = DATE_LONGDATE;
pszForm = NULL;
}else{
dwFlags = 0;
pszForm = szDateFormat;
}
::GetDateFormat( LOCALE_USER_DEFAULT, dwFlags, &systime, pszForm, pszDest, nDestLen );
return pszDest;
}
/* 時刻をフォーマット */
const char* CShareData::MyGetTimeFormat( SYSTEMTIME& systime, char* pszDest, int nDestLen )
{
return MyGetTimeFormat( systime, pszDest, nDestLen, m_pShareData->m_Common.m_nTimeFormatType, m_pShareData->m_Common.m_szTimeFormat );
}
/* 時刻をフォーマット */
const char* CShareData::MyGetTimeFormat( SYSTEMTIME& systime, char* pszDest, int nDestLen, int nTimeFormatType, char* szTimeFormat )
{
const char* pszForm;
DWORD dwFlags;
if( 0 == nTimeFormatType ){
dwFlags = 0;
pszForm = NULL;
}else{
dwFlags = 0;
pszForm = szTimeFormat;
}
::GetTimeFormat( LOCALE_USER_DEFAULT, dwFlags, &systime, pszForm, pszDest, nDestLen );
return pszDest;
}
/*! 共有データの設定に従ってパスを縮小表記に変換する
@param pszSrc [in] ファイル名
@param pszDest [out] 変換後のファイル名の格納先
@param nDestLen [in] 終端のNULLを含むpszDestのTCHAR単位の長さ _MAX_PATH まで
@date 2002.11.27 Moca 新規作成
*/
/**************** 未使用
LPTSTR CShareData::GetTransformFileName( LPCTSTR pszSrc, LPTSTR pszDest, int nDestLen )
{
int i;
TCHAR pszBuf[ _MAX_PATH + 8 ];
TCHAR szFrom[ _MAX_PATH ];
bool bTransform = false;
#ifdef _DEBUG
if( _MAX_PATH + 8 < nDestLen ){
nDestLen = _MAX_PATH + 8;
}
#endif
_tcsncpy( pszBuf, pszSrc, _MAX_PATH + 7 );
pszBuf[_MAX_PATH + 7] = '\0';
for( i = 0; i < m_pShareData->m_nTransformFileNameArrNum; i++ ){
if( '\0' != m_pShareData->m_szTransformFileNameFrom[i][0] ){
if( ExpandMetaToFolder( m_pShareData->m_szTransformFileNameFrom[i], szFrom, _MAX_PATH ) ){
GetFilePathFormat( pszBuf, pszDest, nDestLen, szFrom, m_pShareData->m_szTransformFileNameTo[i] );
_tcscpy( pszBuf, pszDest );
bTransform = true;
}
}
}
if( !bTransform ){
_tcsncpy( pszDest, pszBuf, nDestLen - 1 ); // 1回も変換しないときのために
pszDest[nDestLen - 1] = '\0';
}
return pszDest;
}
****************/
/*! 共有データの設定に従ってパスを縮小表記に変換する
@param pszSrc [in] ファイル名
@param pszDest [out] 変換後のファイル名の格納先
@param nDestLen [in] 終端のNULLを含むpszDestのTCHAR単位の長さ _MAX_PATH まで
@date 2003.01.27 Moca 新規作成
@note 連続して呼び出す場合のため、展開済みメタ文字列をキャッシュして高速化している。
*/
LPTSTR CShareData::GetTransformFileNameFast( LPCTSTR pszSrc, LPTSTR pszDest, int nDestLen )
{
int i;
TCHAR szBuf[_MAX_PATH + 1];
if( -1 == m_nTransformFileNameCount ){
TransformFileName_MakeCache();
}
if( 0 < m_nTransformFileNameCount ){
GetFilePathFormat( pszSrc, pszDest, nDestLen,
m_szTransformFileNameFromExp[0],
m_pShareData->m_szTransformFileNameTo[m_nTransformFileNameOrgId[0]] );
for( i = 1; i < m_nTransformFileNameCount; i++ ){
_tcscpy( szBuf, pszDest );
GetFilePathFormat( szBuf, pszDest, nDestLen,
m_szTransformFileNameFromExp[i],
m_pShareData->m_szTransformFileNameTo[m_nTransformFileNameOrgId[i]] );
}
}else{
// 変換する必要がない コピーだけする
_tcsncpy( pszDest, pszSrc, nDestLen - 1 );
pszDest[nDestLen - 1] = '\0';
}
return pszDest;
}
/*! 展開済みメタ文字列のキャッシュを作成?更新する
@retval 有効な展開済み置換前文字列の数
@date 2003.01.27 Moca 新規作成
@date 2003.06.23 Moca 関数名変更
*/
int CShareData::TransformFileName_MakeCache( void ){
int i;
int nCount = 0;
for( i = 0; i < m_pShareData->m_nTransformFileNameArrNum; i++ ){
if( '\0' != m_pShareData->m_szTransformFileNameFrom[i][0] ){
if( ExpandMetaToFolder( m_pShareData->m_szTransformFileNameFrom[i],
m_szTransformFileNameFromExp[nCount], _MAX_PATH ) ){
// m_szTransformFileNameToとm_szTransformFileNameFromExpの番号がずれることがあるので記録しておく
m_nTransformFileNameOrgId[nCount] = i;
nCount++;
}
}
}
m_nTransformFileNameCount = nCount;
return nCount;
}
/*! ファイル?フォルダ名を置換して、簡易表示名を取得する
@param pszSrc [in] ファイル名
@param pszDest [out] 変換後のファイル名の格納先
@param nDestLen [in] 終端のNULLを含むpszDestのTCHAR単位の長さ
@param pszFrom [in] 置換前文字列
@param pszTo [in] 置換後文字列
@date 2002.11.27 Moca 新規作成
@note 大小文字を区別しない。nDestLenに達したときは後ろを切り捨てられる
*/
LPCTSTR CShareData::GetFilePathFormat( LPCTSTR pszSrc, LPTSTR pszDest, int nDestLen, LPCTSTR pszFrom, LPCTSTR pszTo )
{
int i, j;
int nSrcLen;
int nFromLen, nToLen;
int nCopy;
nSrcLen = _tcslen( pszSrc );
nFromLen = _tcslen( pszFrom );
nToLen = _tcslen( pszTo );
nDestLen--;
for( i = 0, j = 0; i < nSrcLen && j < nDestLen; i++ ){
#if defined(_MBCS)
if( 0 == strnicmp( &pszSrc[i], pszFrom, nFromLen ) )
#else
if( 0 == _tcsncicmp( &pszSrc[i], pszFrom, nFromLen ) )
#endif
{
nCopy = min( nToLen, nDestLen - j );
memcpy( &pszDest[j], pszTo, nCopy * sizeof( TCHAR ) );
j += nCopy;
i += nFromLen - 1;
}else{
#if defined(_MBCS)
// SJIS 専用処理
if( _IS_SJIS_1( (unsigned char)pszSrc[i] ) && i + 1 < nSrcLen && _IS_SJIS_2( (unsigned char)pszSrc[i + 1] ) ){
if( j + 1 < nDestLen ){
pszDest[j] = pszSrc[i];
j++;
i++;
}else{
// SJISの先行バイトだけコピーされるのを防ぐ
break;// goto end_of_func;
}
}
#endif
pszDest[j] = pszSrc[i];
j++;
}
}
// end_of_func:;
pszDest[j] = '\0';
return pszDest;
}
/*! %MYDOC%などのパラメータ指定を実際のパス名に変換する
@param pszSrc [in] 変換前文字列
@param pszDes [out] 変換後文字列
@param nDesLen [in] pszDesのNULLを含むTCHAR単位の長さ
@retval true 正常に変換できた
@retval false バッファが足りなかった,またはエラー。pszDesは不定
@date 2002.11.27 Moca 作成開始
*/
bool CShareData::ExpandMetaToFolder( LPCTSTR pszSrc, LPTSTR pszDes, int nDesLen )
{
LPCTSTR ps;
LPTSTR pd, pd_end;
LPTSTR pStr;
#define _USE_META_ALIAS
#ifdef _USE_META_ALIAS
struct MetaAlias{
LPTSTR szAlias;
int nLenth;
LPTSTR szOrig;
};
static const MetaAlias AliasList[] = {
{ _T("COMDESKTOP"), 10, _T("Common Desktop") },
{ _T("COMMUSIC"), 8, _T("CommonMusic") },
{ _T("COMVIDEO"), 8, _T("CommonVideo") },
{ _T("MYMUSIC"), 7, _T("My Music") },
{ _T("MYVIDEO"), 7, _T("Video") },
{ _T("COMPICT"), 7, _T("CommonPictures") },
{ _T("MYPICT"), 6, _T("My Pictures") },
{ _T("COMDOC"), 6, _T("Common Documents") },
{ _T("MYDOC"), 5, _T("Personal") },
{ NULL, 0 , NULL }
};
#endif
pd_end = pszDes + ( nDesLen - 1 );
for( ps = pszSrc, pd = pszDes; '\0' != *ps; ps++ ){
if( pd_end <= pd ){
if( pd_end == pd ){
*pd = '\0';
}
return false;
}
if( '%' != *ps ){
*pd = *ps;
pd++;
continue;
}
// %% は %
if( '%' == ps[1] ){
*pd = '%';
pd++;
ps++;
continue;
}
if( '\0' != ps[1] ){
TCHAR szMeta[_MAX_PATH];
TCHAR szPath[_MAX_PATH + 1];
int nMetaLen;
int nPathLen;
bool bFolderPath;
ps++;
// %SAKURA%
if( 0 == my_tcsnicmp( _T("SAKURA%"), ps, 7 ) ){
// exeのあるフォルダ
GetExecutableDir( szPath );
nMetaLen = 6;
// メタ文字列っぽい
}else if( NULL != (pStr = _tcschr( (LPTSTR)ps, '%' ) )){
nMetaLen = pStr - ps;
if( nMetaLen < _MAX_PATH ){
_tmemcpy( szMeta, ps, nMetaLen );
szMeta[nMetaLen] = '\0';
}else{
*pd = '\0';
return false;
}
#ifdef _USE_META_ALIAS
// メタ文字列がエイリアス名なら書き換える
const MetaAlias* pAlias;
for( pAlias = &AliasList[0]; nMetaLen < pAlias->nLenth; pAlias++ )
; // 読み飛ばす
for( ; nMetaLen == pAlias->nLenth; pAlias++ ){
if( 0 == my_tcsicmp( pAlias->szAlias, szMeta ) ){
_tcscpy( szMeta, pAlias->szOrig );
break;
}
}
#endif
// 直接レジストリで調べる
szPath[0] = '\0';
bFolderPath = ReadRegistry( HKEY_CURRENT_USER,
_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"),
szMeta, szPath, sizeof( szPath ) );
if( false == bFolderPath || '\0' == szPath[0] ){
bFolderPath = ReadRegistry( HKEY_LOCAL_MACHINE,
_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"),
szMeta, szPath, sizeof( szPath ) );
}
if( false == bFolderPath || '\0' == szPath[0] ){
pStr = _tgetenv( szMeta );
// 環境変数
if( NULL != pStr ){
nPathLen = _tcslen( pStr )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -