📄 csharedata.cpp
字号:
// $Id: CShareData.cpp,v 1.92 2005/04/22 23:27:32 genta Exp $
/*! @file
@brief プロセス間共有データへのアクセス
@author Norio Nakatani
@date 1998/05/26 新規作成
$Revision: 1.92 $
*/
/*
Copyright (C) 1998-2001, Norio Nakatani
Copyright (C) 2002, MIK
Copyright (C) 2003, MIK
This source code is designed for sakura editor.
Please contact the copyright holder to use this code for other purpose.
*/
#include <io.h>
#include "CShareData.h"
#include "CEditApp.h"
#include "mymessage.h"
#include "debug.h"
#include "global.h"
#include "etc_uty.h"
#include "CRunningTimer.h"
#include "my_icmp.h" // 2002/11/30 Moca 追加
#include "my_tchar.h" // 2003/01/06 Moca
struct ARRHEAD {
int nLength;
int nItemNum;
};
//! 共有メモリのバージョン
/*!
共有メモリのバージョン番号。共有メモリの形式を変更したときはここを1増やす。
この値は共有メモリのバージョンフィールドに格納され、異なる構造の共有メモリを
使うエディタが同時に起動しないようにする。
設定可能な値は 1~unsinged intの最大値
@sa Init()
Version 1~24:
いろいろ
Version 25:
m_bStopsBothEndsWhenSearchWord追加
Version 26:
MacroRecに、m_bReloadWhenExecuteを追加 2002/03/11 YAZAKI
FileInfoに、m_szDocType追加 Mar. 7, 2002 genta
Version 27:
Typesに、m_szOutlineRuleFilenameを追加 2002.04.01 YAZAKI
Version 28:
PRINTSETTINGに、m_bPrintKinsokuHead、m_bPrintKinsokuTailを追加 2002.04.09 MIK
Typesに、m_bKinsokuHead、m_bKinsokuTail、m_szKinsokuHead、m_szKinsokuTailを追加 2002.04.09 MIK
Version 29:
PRINTSETTINGに、m_bPrintKinsokuRetを追加 2002.04.13 MIK
Typesに、m_bKinsokuRetを追加 2002.04.13 MIK
Version 30:
PRINTSETTINGに、m_bPrintKinsokuKutoを追加 2002.04.17 MIK
Typesに、m_bKinsokuKutoを追加 2002.04.17 MIK
Version 31:
Commonに、m_bStopsBothEndsWhenSearchParagraphを追加 2002/04/26 YAZAKI
Version 32:
CommonからTypesへ、m_bAutoIndent、m_bAutoIndent_ZENSPACEを移動 2002/04/30 YAZAKI
Version 33:
Commonに、m_lf_khを追加 2002/05/21 ai
m_nDiffFlgOptを追加 2002.05.27 MIK
Types-ColorにCOLORIDX_DIFF_APPEND,COLORIDX_DIFF_CHANGE,COLORIDX_DIFF_DELETEを追加
Version 34:
Typesにm_bUseDocumentIcon 追加. 2002.09.10 genta
Version 35:
Commonにm_nLineNumRightSpace 追加.2002.09.18 genta
Version 36:
Commonのm_bGrepKanjiCode_AutoDetectを削除、m_nGrepCharSetを追加 2002/09/21 Moca
Version 37:
TypesのLineComment関連をm_cLineCommentに変更. @@@ 2002.09.23 YAZAKI
TypesのBlockComment関連をm_cBlockCommentに変更.@@@ 2002.09.23 YAZAKI
Version 38:
Typesにm_bIndentLayoutを追加. @@@ 2002.09.29 YAZAKI
2002.10.01 genta m_nIndentLayoutに名前変更
Version 39:
Commonにm_nFUNCKEYWND_GroupNumを追加. 2002/11/04 Moca
Version 40:
ファイル名簡易表記関連を追加. 2002/12/08~2003/01/15 Moca
Version 41:
Typesのm_szTabViewStringサイズ拡張
m_nWindowSizeX/Y m_nWindowOriginX/Y追加 2003.01.26 aroka
Version 42:
Typesに独自TABマークフラグ追加 2003.03.28 MIK
Version 43:
最近使ったファイル?フォルダにお気に入りを追加 2003.04.08 MIK
Version 44:
Window Caption文字列領域をCommonに追加 2003.04.05 genta
Version 45:
タグファイル作成用コマンドオプション保存領域(m_nTagsOpt,m_szTagsCmdLine)を追加 2003.05.12 MIK
Version 46:
編集ウインドウ数修正、タブウインドウ用情報追加
Version 47:
ファイルからの補完をTypesに追加 2003.06.28 Moca
Version 48:
Grepリアルタイム表示追加 2003.06.28 Moca
Version 49:
ファイル情報にIsDebug追加 (タブ表示用) 2003.10.13 MIK
Version 50:
ウィンドウ位置固定?継承を追加 2004.05.13 Moca
Version 51:
タグジャンプ機能追加 2004/06/21 novice
Version 52:
前回と異なる文字コードのときに問い合わせを行うかどうかのフラグ追加 2004.10.03 genta
Version 53:
存在しないファイルを開こうとした場合に警告するフラグの追加 2004.10.09 genta
Version 54:
マウスサイドボタン対応 2004/10/10 novice
Version 55:
マウス中ボタン対応 2004/10/11 novice
Version 56:
インクリメンタルサーチ(Migemo path用) 2004/10/13 isearch
Version 57:
強調キーワード指定拡大 2005/01/13 MIK
Version 58:
強調キーワードセット可変長割り当て 2005/01/25 Moca
Version 59:
マクロ数を増やした 2005/01/30 genta
Version 60:
キーワード指定タグジャンプ履歴保存 2005/04/03 MIK
*/
const unsigned int uShareDataVersion = 60;
/*
|| Singleton風
*/
CShareData* CShareData::_instance = NULL;
CShareData* CShareData::getInstance()
{
return _instance;
}
/*!
共有メモリ領域がある場合はプロセスのアドレス空間から?
すでにマップされているファイル ビューをアンマップする。
*/
CShareData::~CShareData()
{
if( NULL != m_pShareData ){
/* プロセスのアドレス空間から? すでにマップされているファイル ビューをアンマップします */
::UnmapViewOfFile( m_pShareData );
m_pShareData = NULL;
}
return;
}
//! CShareDataクラスの初期化処理
/*!
CShareDataクラスを利用する前に必ず呼び出すこと。
@retval true 初期化成功
@retval false 初期化失敗
@note 既に存在する共有メモリのバージョンがこのエディタが使うものと
異なる場合は致命的エラーを防ぐためにfalseを返します。CProcess::Initialize()
でInit()に失敗するとメッセージを出してエディタの起動を中止します。
*/
bool CShareData::Init( void )
{
MY_RUNNINGTIMER(cRunningTimer,"CShareData::Init" );
if (CShareData::_instance == NULL) // Singleton風
CShareData::_instance = this;
int i;
int j;
char szExeFolder[_MAX_PATH + 1];
char szPath[_MAX_PATH + 1];
/* exeのあるフォルダ */
::GetModuleFileName(
::GetModuleHandle( NULL ),
szPath, sizeof( szPath )
);
/* ファイルのフルパスを、フォルダとファイル名に分割 */
/* [c:\work\test\aaa.txt] → [c:\work\test] + [aaa.txt] */
::SplitPath_FolderAndFile( szPath, szExeFolder, NULL );
strcat( szExeFolder, "\\" );
/* ファイルマッピングオブジェクト */
m_hFileMap = ::CreateFileMapping(
INVALID_HANDLE_VALUE, // Sep. 6, 2003 wmlhq
NULL,
PAGE_READWRITE | SEC_COMMIT,
0,
sizeof( DLLSHAREDATA ),
GSTR_CSHAREDATA
);
if( NULL == m_hFileMap ){
::MessageBox(
NULL,
"CreateFileMapping()に失敗しました",
"予期せぬエラー",
MB_OK | MB_APPLMODAL | MB_ICONSTOP
);
return false;
}
if( GetLastError() != ERROR_ALREADY_EXISTS ){
/* オブジェクトが存在していなかった場合 */
/* ファイルのビューを? 呼び出し側プロセスのアドレス空間にマップします */
m_pShareData = (DLLSHAREDATA*)::MapViewOfFile(
m_hFileMap,
FILE_MAP_ALL_ACCESS,
0,
0,
0
);
m_pShareData->m_vStructureVersion = uShareDataVersion;
// m_pShareData->m_CKeyMacroMgr.Clear(); /* キーワードマクロのバッファ */
strcpy(m_pShareData->m_szKeyMacroFileName, ""); /* キーワードマクロのファイル名 */ //@@@ 2002.1.24 YAZAKI
m_pShareData->m_bRecordingKeyMacro = FALSE; /* キーボードマクロの記録中 */
m_pShareData->m_hwndRecordingKeyMacro = NULL; /* キーボードマクロを記録中のウィンドウ */
// 2004.05.13 Moca リソースから製品バージョンの取得
GetAppVersionInfo( NULL, VS_VERSION_INFO,
&m_pShareData->m_dwProductVersionMS, &m_pShareData->m_dwProductVersionLS );
m_pShareData->m_hwndTray = NULL;
m_pShareData->m_hAccel = NULL;
m_pShareData->m_hwndDebug = NULL;
m_pShareData->m_nSequences = 0; /* ウィンドウ連番 */
m_pShareData->m_nEditArrNum = 0;
//From Here 2003.05.31 MIK
//タブウインドウ情報
m_pShareData->m_TabWndWndpl.length = 0;
//To Here 2003.05.31 MIK
m_pShareData->m_Common.m_nMRUArrNum_MAX = 15; /* ファイルの履歴MAX */ //Oct. 14, 2000 JEPRO 少し増やした(10→15)
//@@@ 2001.12.26 YAZAKI MRUリストは、CMRUに依頼する
CMRU cMRU;
cMRU.ClearAll();
m_pShareData->m_Common.m_nOPENFOLDERArrNum_MAX = 15; /* フォルダの履歴MAX */ //Oct. 14, 2000 JEPRO 少し増やした(10→15)
//@@@ 2001.12.26 YAZAKI OPENFOLDERリストは、CMRUFolderにすべて依頼する
CMRUFolder cMRUFolder;
cMRUFolder.ClearAll();
m_pShareData->m_nSEARCHKEYArrNum = 0;
for( i = 0; i < MAX_SEARCHKEY; ++i ){
strcpy( m_pShareData->m_szSEARCHKEYArr[i], "" );
//m_pShareData->m_bSEARCHKEYArrFavorite[i] = false; //お気に入り //@@@ 2003.04.08 MIK
}
m_pShareData->m_nREPLACEKEYArrNum = 0;
for( i = 0; i < MAX_REPLACEKEY; ++i ){
strcpy( m_pShareData->m_szREPLACEKEYArr[i], "" );
//m_pShareData->m_bREPLACEKEYArrFavorite[i] = false; //お気に入り //@@@ 2003.04.08 MIK
}
m_pShareData->m_nGREPFILEArrNum = 0;
for( i = 0; i < MAX_GREPFILE; ++i ){
strcpy( m_pShareData->m_szGREPFILEArr[i], "" );
//m_pShareData->m_bGREPFILEArrFavorite[i] = false; //お気に入り //@@@ 2003.04.08 MIK
}
m_pShareData->m_nGREPFILEArrNum = 1;
strcpy( m_pShareData->m_szGREPFILEArr[0], "*.*" );
//m_pShareData->m_bSEARCHKEYArrFavorite[0] = true; //お気に入り //@@@ 2003.04.08 MIK
m_pShareData->m_nGREPFOLDERArrNum = 0;
for( i = 0; i < MAX_GREPFOLDER; ++i ){
strcpy( m_pShareData->m_szGREPFOLDERArr[i], "" );
//m_pShareData->m_bGREPFOLDERArrFavorite[i] = false; //お気に入り //@@@ 2003.04.08 MIK
}
strcpy( m_pShareData->m_szMACROFOLDER, szExeFolder ); /* マクロ用フォルダ */
strcpy( m_pShareData->m_szIMPORTFOLDER, szExeFolder ); /* 設定インポート用フォルダ */
for( i = 0; i < MAX_TRANSFORM_FILENAME; ++i ){
strcpy( m_pShareData->m_szTransformFileNameFrom[i], "" );
strcpy( m_pShareData->m_szTransformFileNameTo[i], "" );
}
strcpy( m_pShareData->m_szTransformFileNameFrom[0], "%DeskTop%\\" );
strcpy( m_pShareData->m_szTransformFileNameTo[0], "デスクトップ\\" );
strcpy( m_pShareData->m_szTransformFileNameFrom[1], "%Personal%\\" );
strcpy( m_pShareData->m_szTransformFileNameTo[1], "マイドキュメント\\" );
strcpy( m_pShareData->m_szTransformFileNameFrom[2], "%Cache%\\Content.IE5\\" );
strcpy( m_pShareData->m_szTransformFileNameTo[2], "IEキャッシュ\\" );
strcpy( m_pShareData->m_szTransformFileNameFrom[3], "%TEMP%\\" );
strcpy( m_pShareData->m_szTransformFileNameTo[3], "TEMP\\" );
strcpy( m_pShareData->m_szTransformFileNameFrom[4], "%Common DeskTop%\\" );
strcpy( m_pShareData->m_szTransformFileNameTo[4], "共有デスクトップ\\" );
strcpy( m_pShareData->m_szTransformFileNameFrom[5], "%Common Documents%\\" );
strcpy( m_pShareData->m_szTransformFileNameTo[5], "共有ドキュメント\\" );
m_pShareData->m_nTransformFileNameArrNum = 6;
/* m_PrintSettingArr[0]を設定して、残りの1~7にコピーする。
必要になるまで遅らせるために、CPrintに、CShareDataを操作する権限を与える。
YAZAKI.
*/
CPrint::Initialize(); // 初期化命令。
// Jan. 30, 2005 genta 関数として独立
InitKeyAssign( m_pShareData );
// From Here Sept. 19, 2000 JEPRO コメントアウトになっていた初めのブロックを復活しその下をコメントアウト
// MS ゴシック標準スタイル10ptに設定
// /* LOGFONTの初期化 */
memset( &m_pShareData->m_Common.m_lf, 0, sizeof( LOGFONT ) );
m_pShareData->m_Common.m_lf.lfHeight = -13;
m_pShareData->m_Common.m_lf.lfWidth = 0;
m_pShareData->m_Common.m_lf.lfEscapement = 0;
m_pShareData->m_Common.m_lf.lfOrientation = 0;
m_pShareData->m_Common.m_lf.lfWeight = 400;
m_pShareData->m_Common.m_lf.lfItalic = 0x0;
m_pShareData->m_Common.m_lf.lfUnderline = 0x0;
m_pShareData->m_Common.m_lf.lfStrikeOut = 0x0;
//m_pShareData->m_Common.m_lf.lfCharSet = 0x80;
m_pShareData->m_Common.m_lf.lfCharSet = GB2312_CHARSET;
m_pShareData->m_Common.m_lf.lfOutPrecision = 0x3;
m_pShareData->m_Common.m_lf.lfClipPrecision = 0x2;
m_pShareData->m_Common.m_lf.lfQuality = 0x1;
m_pShareData->m_Common.m_lf.lfPitchAndFamily = 0x31;
//strcpy( m_pShareData->m_Common.m_lf.lfFaceName, "MS ゴシック" );
strcpy( m_pShareData->m_Common.m_lf.lfFaceName, "Fixedsys" );
// キーワードヘルプのフォント ai 02/05/21 Add S
::SystemParametersInfo(
SPI_GETICONTITLELOGFONT, // system parameter to query or set
sizeof(LOGFONT), // depends on action to be taken
(PVOID)&m_pShareData->m_Common.m_lf_kh, // depends on action to be taken
NULL // user profile update flag
);
// ai 02/05/21 Add E
// To Here Sept. 19,2000
m_pShareData->m_Common.m_bFontIs_FIXED_PITCH = TRUE; /* 現在のフォントは固定幅フォントである */
/* バックアップ */
m_pShareData->m_Common.m_bBackUp = FALSE; /* バックアップの作成 */
m_pShareData->m_Common.m_bBackUpDialog = TRUE; /* バックアップの作成前に確認 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -