📄 csmacromgr.cpp
字号:
}
// else {
//m_cSavedKeyMacro[idx]->Append( nFuncID, lParam1, pcEditView );
// }
return TRUE;
}
/*! @brief キーボードマクロの実行
CShareDataからファイル名を取得し、実行する。
@param hInstance [in] インスタンス
@param hwndParent [in] 親ウィンドウの
@param pViewClass [in] macro実行対象のView
@param idx [in] マクロ番号。
*/
BOOL CSMacroMgr::Exec( int idx , HINSTANCE hInstance, CEditView* pcEditView )
{
if( idx == STAND_KEYMACRO ){
// Jun. 16, 2002 genta
// キーマクロ以外のサポートによりNULLの可能性が出てきたので判定追加
if( m_pKeyMacro != NULL ){
m_pKeyMacro->ExecKeyMacro( pcEditView );
return TRUE;
}
else {
return FALSE;
}
}
if( idx < 0 || MAX_CUSTMACRO <= idx ) // 範囲チェック
return FALSE;
/* 読み込み前か、毎回読み込む設定の場合は、ファイルを読み込みなおす */
// Apr. 29, 2002 genta
if( m_cSavedKeyMacro[idx] == NULL || CShareData::getInstance()->BeReloadWhenExecuteMacro( idx )){
// CShareDataから、マクロファイル名を取得
// Jun. 08, 2003 Moca 呼び出し側でパス名を用意
// Jun. 16, 2003 genta 書式をちょっと変更
char ptr[_MAX_PATH * 2];
int n = CShareData::getInstance()->GetMacroFilename( idx, ptr, sizeof(ptr) );
if ( n <= 0 ){
return FALSE;
}
if( !Load( idx, hInstance, ptr ) )
return FALSE;
}
m_cSavedKeyMacro[idx]->ExecKeyMacro(pcEditView);
pcEditView->Redraw(); // 必要?
return TRUE;
}
/*! キーボードマクロの読み込み
@param idx [in] 読み込み先マクロバッファ番号
@param pszPath [in] マクロファイル名
読み込みに失敗したときはマクロバッファのオブジェクトは解放され,
NULLが設定される.
@author Norio Nakatani, YAZAKI, genta
*/
BOOL CSMacroMgr::Load( int idx/* CSMacroMgr::Macro1& mbuf */, HINSTANCE hInstance, const char* pszPath )
{
CMacroManagerBase** ppMacro = Idx2Ptr( idx );
if( ppMacro == NULL ){
#ifdef _DEBUG
MYTRACE( "CSMacroMgr::Load() Out of range: idx=%d Path=%s\n", idx, pszPath);
#endif
}
// バッファクリア
delete *ppMacro;
*ppMacro = NULL;
const char *ext = strrchr( pszPath, '.');
// Feb. 02, 2004 genta .が無い場合にext==NULLとなるのでNULLチェック追加
if( ext != NULL ){
const char *chk = strrchr( ext, '\\' );
if( chk != NULL ){ // .のあとに\があったらそれは拡張子の区切りではない
// \が漢字の2バイト目の場合も拡張子ではない。
ext = NULL;
}
}
if(ext != NULL){
++ext;
}
*ppMacro = CMacroFactory::Instance()->Create(ext);
if( *ppMacro == NULL )
return FALSE;
// From Here Jun. 16, 2002 genta
// 読み込みエラー時はインスタンス削除
if( (*ppMacro)->LoadKeyMacro(hInstance, pszPath )){
return TRUE;
}
else {
delete *ppMacro;
*ppMacro = NULL;
}
// To Here Jun. 16, 2002 genta
return FALSE;
}
/*! キーボードマクロの保存
@param idx [in] 読み込み先マクロバッファ番号
@param pszPath [in] マクロファイル名
@param hInstance [in] インスタンスハンドル
@author YAZAKI
*/
BOOL CSMacroMgr::Save( int idx/* CSMacroMgr::Macro1& mbuf */, HINSTANCE hInstance, const char* pszPath )
{
assert( idx == STAND_KEYMACRO );
if ( idx == STAND_KEYMACRO ){
CKeyMacroMgr* pKeyMacro = dynamic_cast<CKeyMacroMgr*>( m_pKeyMacro );
if( pKeyMacro != NULL ){
return pKeyMacro->SaveKeyMacro(hInstance, pszPath );
}
// Jun. 27, 2002 genta
// 空マクロの場合は正常終了と見なす.
if( m_pKeyMacro == NULL ){
return TRUE;
}
}
// else if ( 0 <= idx && idx < MAX_CUSTMACRO ){
// return m_cSavedKeyMacro[idx]->SaveKeyMacro(hInstance, pszPath );
// }
return FALSE;
}
/*
指定されたマクロをクリアする
@param idx [in] マクロ番号(0-), STAND_KEYMACROは標準キーマクロバッファを表す.
*/
void CSMacroMgr::Clear( int idx )
{
CMacroManagerBase **ppMacro = Idx2Ptr( idx );
if( ppMacro != NULL ){
delete *ppMacro;
*ppMacro = NULL;
}
}
/*
|| Attributes & Operations
*/
/*
指定されたIDに対応するMacroInfo構造体へのポインタを返す.
該当するIDに対応する構造体がなければNULLを返す.
@param nFuncID [in] 機能番号
@return 構造体へのポインタ.見つからなければNULL
@date 2002.06.16 genta
@data 2003.02.24 m_MacroFuncInfoNotCommandArrも検索対象にする
*/
const MacroFuncInfo* CSMacroMgr::GetFuncInfoByID( int nFuncID )
{
int i;
// Jun. 27, 2002 genta
// 番人をコード0として拾ってしまうので,配列サイズによる判定をやめた.
for( i = 0; m_MacroFuncInfoArr[i].m_pszFuncName != NULL; ++i ){
if( m_MacroFuncInfoArr[i].m_nFuncID == nFuncID ){
return &m_MacroFuncInfoArr[i];
}
}
for( i = 0; m_MacroFuncInfoNotCommandArr[i].m_pszFuncName != NULL; ++i ){
if( m_MacroFuncInfoNotCommandArr[i].m_nFuncID == nFuncID ){
return &m_MacroFuncInfoNotCommandArr[i];
}
}
return NULL;
}
/*!
機能番号から関数名と機能名日本語を取得
@param hInstance [in] リソース取得のためのInstance Handle
@param nFuncID [in] 機能番号
@param pszFuncName [out] 関数名.この先には最長関数名+1バイトのメモリが必要.
@param pszFuncNameJapanese [out] 機能名日本語.この先には256バイトのメモリが必要.
@return 成功したときはpszFuncName.見つからなかったときはNULL.
@note
それぞれ,文字列格納領域の指す先がNULLの時は文字列を格納しない.
ただし,pszFuncNameをNULLにしてしまうと戻り値が常にNULLになって
成功判定が行えなくなる.
@date 2002.06.16 genta 新設のGetFuncInfoById(int)を内部で使うように.
*/
char* CSMacroMgr::GetFuncInfoByID( HINSTANCE hInstance, int nFuncID, char* pszFuncName, char* pszFuncNameJapanese )
{
const MacroFuncInfo* MacroInfo = GetFuncInfoByID( nFuncID );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -