📄 etc_uty.cpp
字号:
nBgn = *pnBgn;
if( nBgn >= nTextLen ){
return NULL;
}
for( i = nBgn; i + 1 < nTextLen; ++i ){
nCharChars = CMemory::MemCharNext( pText, nTextLen, &pText[i] ) - &pText[i];
if( 0 == nCharChars ){
nCharChars = 1;
}
if( i + nCharChars - nBgn >= nLimitLen ){
break;
}
i += ( nCharChars - 1 );
}
*pnBgn = i;
*pnLineLen = i - nBgn;
return &pText[nBgn];
}
/* データを指定バイト数以内に切り詰める */
int LimitStringLengthB( const char* pszData, int nDataLength, int nLimitLengthB, CMemory& cmemDes )
{
int i;
int nCharChars;
int nDesLen;
nDesLen = 0;
for( i = 0; i < nDataLength; ){
nCharChars = CMemory::MemCharNext( pszData, nDataLength, &pszData[i] ) - &pszData[i];
if( 0 == nCharChars ){
nCharChars = 1;
}
if( nDesLen + nCharChars > nLimitLengthB ){
break;
}
nDesLen += nCharChars;
i += nCharChars;
}
cmemDes.SetData( pszData, nDesLen );
return nDesLen;
}
/* フォルダの最後が半角かつ'\\'の場合は、取り除く "c:\\"等のルートは取り除かない */
void CutLastYenFromDirectoryPath( char* pszFolder )
{
if( 3 == strlen( pszFolder )
&& pszFolder[1] == ':'
&& pszFolder[2] == '\\'
){
/* ドライブ名:\ */
}else{
/* フォルダの最後が半角かつ'\\'の場合は、取り除く */
int nFolderLen;
int nCharChars;
nFolderLen = strlen( pszFolder );
if( 0 < nFolderLen ){
nCharChars = &pszFolder[nFolderLen] - CMemory::MemCharPrev( pszFolder, nFolderLen, &pszFolder[nFolderLen] );
if( 1 == nCharChars && '\\' == pszFolder[nFolderLen - 1] ){
pszFolder[nFolderLen - 1] = '\0';
}
}
}
return;
}
/* フォルダの最後が半角かつ'\\'でない場合は、付加する */
void AddLastYenFromDirectoryPath( char* pszFolder )
{
if( 3 == strlen( pszFolder )
&& pszFolder[1] == ':'
&& pszFolder[2] == '\\'
){
/* ドライブ名:\ */
}else{
/* フォルダの最後が半角かつ'\\'でない場合は、付加する */
int nFolderLen;
int nCharChars;
nFolderLen = strlen( pszFolder );
if( 0 < nFolderLen ){
nCharChars = &pszFolder[nFolderLen] - CMemory::MemCharPrev( pszFolder, nFolderLen, &pszFolder[nFolderLen] );
if( 1 == nCharChars && '\\' == pszFolder[nFolderLen - 1] ){
}else{
pszFolder[nFolderLen] = '\\';
pszFolder[nFolderLen + 1] = '\0';
}
}
}
return;
}
/*! 文字列が指定された文字で終わっていなかった場合には
末尾にその文字を付加する.
@param pszPath [i/o]操作する文字列
@param nMaxLen [in]バッファ長
@param c [in]追加したい文字
@retval 0 \が元から付いていた
@retval 1 \を付加した
@retval -1 バッファが足りず、\を付加できなかった
@date 2003.06.24 Moca 新規作成
*/
int AddLastChar( char* pszPath, int nMaxLen, char c ){
int pos = strlen( pszPath );
// 何もないときは\を付加
if( 0 == pos ){
if( nMaxLen <= pos + 1 ){
return -1;
}
pszPath[0] = c;
pszPath[1] = '\0';
return 1;
}
// 最後が\でないときも\を付加(日本語を考慮)
else if( *::CharPrev( pszPath, &pszPath[pos] ) != c ){
if( nMaxLen <= pos + 1 ){
return -1;
}
pszPath[pos] = c;
pszPath[pos + 1] = '\0';
return 1;
}
return 0;
}
/* ショートカット(.lnk)の解決 */
BOOL ResolveShortcutLink( HWND hwnd, LPCSTR lpszLinkFile, LPSTR lpszPath )
{
BOOL bRes;
HRESULT hRes;
IShellLink* pIShellLink;
IPersistFile* pIPersistFile;
char szGotPath[MAX_PATH];
char szDescription[MAX_PATH];
WIN32_FIND_DATA wfd;
WCHAR wsz[MAX_PATH];
/* 初期化 */
pIShellLink = NULL;
pIPersistFile = NULL;
*lpszPath = 0; // assume failure
bRes = FALSE;
szGotPath[0] = '\0';
// COMライブラリの初期化
hRes = ::CoInitialize( NULL );
if( hRes == E_OUTOFMEMORY
|| hRes == E_INVALIDARG
|| hRes == E_UNEXPECTED
){
return FALSE;
}
// Get a pointer to the IShellLink interface.
// hRes = 0;
if( SUCCEEDED( hRes = ::CoCreateInstance( CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID *)&pIShellLink ) ) ){
// Get a pointer to the IPersistFile interface.
if( SUCCEEDED(hRes = pIShellLink->QueryInterface( IID_IPersistFile, (void**)&pIPersistFile ) ) ){
// Ensure that the string is Unicode.
MultiByteToWideChar( CP_ACP, 0, lpszLinkFile, -1, wsz, MAX_PATH );
// Load the shortcut.
if( SUCCEEDED(hRes = pIPersistFile->Load( wsz, STGM_READ ) ) ){
// Resolve the link.
if( SUCCEEDED( hRes = pIShellLink->Resolve(hwnd, SLR_ANY_MATCH ) ) ){
// Get the path to the link target.
if( SUCCEEDED( hRes = pIShellLink->GetPath(szGotPath, MAX_PATH, (WIN32_FIND_DATA *)&wfd, SLGP_SHORTPATH ) ) ){
// Get the description of the target.
if( SUCCEEDED(hRes = pIShellLink->GetDescription(szDescription, MAX_PATH ) ) ){
if( '\0' != szGotPath[0] ){
/* 正常終了 */
lstrcpy( lpszPath, szGotPath );
bRes = TRUE;
}
}
}
}
}
}
}
// Release the pointer to the IPersistFile interface.
if( NULL != pIPersistFile ){
pIPersistFile->Release();
pIPersistFile = NULL;
}
// Release the pointer to the IShellLink interface.
if( NULL != pIShellLink ){
pIShellLink->Release();
pIShellLink = NULL;
}
// COMライブラリの後始末処理
::CoUninitialize();
return bRes;
}
/*!
処理中のユーザー操作を可能にする
ブロッキングフック(?)(メッセージ配送
@date 2003.07.04 genta 一回の呼び出しで複数メッセージを処理するように
*/
BOOL BlockingHook( HWND hwndDlgCancel )
{
MSG msg;
BOOL ret;
// Jun. 04, 2003 genta メッセージをあるだけ処理するように
while(( ret = (BOOL)::PeekMessage( &msg, NULL, 0, 0, PM_REMOVE )) != 0 ){
if ( msg.message == WM_QUIT ){
return FALSE;
}
if( NULL != hwndDlgCancel && IsDialogMessage( hwndDlgCancel, &msg ) ){
}else{
::TranslateMessage( &msg );
::DispatchMessage( &msg );
}
}
return TRUE/*ret*/;
}
//! 機能番号に応じてヘルプトピック番号を返す
/*!
@author Stonee
@date 2001/02/23
@param nFuncID 機能番号
@return ヘルプトピック番号。該当IDが無い場合には0を返す。
内容はcase文の羅列。
@par history
2001.12.22 YAZAKI sakura.hhを参照するように変更
*/
int FuncID_To_HelpContextID( int nFuncID )
{
switch( nFuncID ){
/* ファイル操作系 */
case F_FILENEW: return HLP000025; //新規作成
case F_FILEOPEN: return HLP000015; //開く
case F_FILEOPEN_DROPDOWN: return HLP000015; //開く(ドロップダウン) //@@@ 2002.06.15 MIK
case F_FILESAVE: return HLP000020; //上書き保存
case F_FILESAVEAS_DIALOG: return HLP000021; //名前を付けて保存
case F_FILECLOSE: return HLP000017; //閉じて(無題) //Oct. 17, 2000 jepro 「ファイルを閉じる」というキャプションを変更
case F_FILECLOSE_OPEN: return HLP000119; //閉じて開く
case F_FILE_REOPEN: return HLP000283; //開き直す //@@@ 2003.06.15 MIK
case F_FILE_REOPEN_SJIS: return HLP000156; //SJISで開き直す
case F_FILE_REOPEN_JIS: return HLP000157; //JISで開き直す
case F_FILE_REOPEN_EUC: return HLP000158; //EUCで開き直す
case F_FILE_REOPEN_UNICODE: return HLP000159; //Unicodeで開き直す
case F_FILE_REOPEN_UNICODEBE: return HLP000256; //UnicodeBEで開き直す
case F_FILE_REOPEN_UTF8: return HLP000160; //UTF-8で開き直す
case F_FILE_REOPEN_UTF7: return HLP000161; //UTF-7で開き直す
case F_PRINT: return HLP000162; //印刷 //Sept. 14, 2000 jepro 「印刷のページレイアウトの設定」から変更
case F_PRINT_PREVIEW: return HLP000120; //印刷プレビュー
case F_PRINT_PAGESETUP: return HLP000122; //印刷ページ設定 //Sept. 14, 2000 jepro 「印刷のページレイアウトの設定」から変更
case F_OPEN_HfromtoC: return HLP000192; //同名のC/C++ヘッダ(ソース)を開く //Feb. 7, 2001 JEPRO 追加
case F_OPEN_HHPP: return HLP000024; //同名のC/C++ヘッダファイルを開く //Feb. 9, 2001 jepro「.cまたは.cppと同名の.hを開く」から変更
case F_OPEN_CCPP: return HLP000026; //同名のC/C++ソースファイルを開く //Feb. 9, 2001 jepro「.hと同名の.c(なければ.cpp)を開く」から変更
case F_ACTIVATE_SQLPLUS: return HLP000132; /* Oracle SQL*Plusをアクティブ表示 */
case F_PLSQL_COMPILE_ON_SQLPLUS: return HLP000027; /* Oracle SQL*Plusで実行 */
case F_BROWSE: return HLP000121; //ブラウズ
case F_READONLY: return HLP000249; //読み取り専用
case F_PROPERTY_FILE: return HLP000022; /* ファイルのプロパティ */
// case IDM_EXITALL: return 28; //テキストエディタの全終了
case F_EXITALL: return HLP000028; //サクラエディタの全終了 //Dec. 26, 2000 JEPRO F_に変更
/* 編集系 */
case F_UNDO: return HLP000032; //元に戻す(Undo)
case F_REDO: return HLP000033; //やり直し(Redo)
case F_DELETE: return HLP000041; //削除
case F_DELETE_BACK: return HLP000042; //カーソル前を削除
case F_WordDeleteToStart: return HLP000166; //単語の左端まで削除
case F_WordDeleteToEnd: return HLP000167; //単語の右端まで削除
case F_WordCut: return HLP000169; //単語切り取り
case F_WordDelete: return HLP000168; //単語削除
case F_LineCutToStart: return HLP000172; //行頭まで切り取り(改行単位)
case F_LineCutToEnd: return HLP000173; //行末まで切り取り(改行単位)
case F_LineDeleteToStart: return HLP000170; //行頭まで削除(改行単位)
case F_LineDeleteToEnd: return HLP000171; //行末まで削除(改行単位)
case F_CUT_LINE: return HLP000174; //行切り取り(折り返し単位)
case F_DELETE_LINE: return HLP000137; //行削除(折り返し単位)
case F_DUPLICATELINE: return HLP000043; //行の二重化(折り返し単位)
case F_INDENT_TAB: return HLP000113; //TABインデント
case F_UNINDENT_TAB: return HLP000113; //逆TABインデント
case F_INDENT_SPACE: return HLP000114; //SPACEインデント
case F_UNINDENT_SPACE: return HLP000114; //逆SPACEインデント
case F_RECONVERT: return HLP000218; //再変換
// case ORDSREFERENCE: return ; //単語リファレンス
/* カーソル移動系 */
// case F_UP: return ; //カーソル上移動
// case F_DOWN: return ; //カーソル下移動
// case F_LEFT: return ; //カーソル左移動
// case F_RIGHT: return ; //カーソル右移動
case F_UP2: return HLP000220; //カーソル上移動(2行ごと)
case F_DOWN2: return HLP000221; //カーソル下移動(2行ごと)
case F_WORDLEFT: return HLP000222; //単語の左端に移動
case F_WORDRIGHT: return HLP000223; //単語の右端に移動
case F_GOLINETOP: return HLP000224; //行頭に移動(折り返し単位)
case F_GOLINEEND: return HLP000225; //行末に移動(折り返し単位)
// case F_ROLLDOWN: return ; //スクロールダウン
// case F_ROLLUP: return ; //スクロールアップ
case F_HalfPageUp: return HLP000245; //半ページアップ //Oct. 17, 2000 JEPRO 以下「1ページダウン」まで追加
case F_HalfPageDown: return HLP000246; //半ページダウン
case F_1PageUp: return HLP000226; //1ページアップ
case F_1PageDown: return HLP000227; //1ページダウン
case F_GOFILETOP: return HLP000228; //ファイルの先頭に移動
case F_GOFILEEND: return HLP000229; //ファイルの最後に移動
case F_CURLINECENTER: return HLP000230; //カーソル行をウィンドウ中央へ
case F_JUMP_SRCHSTARTPOS: return HLP000264; //検索開始位置へ戻る
case F_JUMPHIST_PREV: return HLP000231; //移動履歴: 前へ //Oct. 17, 2000 JEPRO 以下「移動履歴:次へ」まで追加
case F_JUMPHIST_NEXT: return HLP000232; //移動履歴: 次へ
case F_JUMPHIST_SET: return HLP000265; //現在位置を移動履歴に登録
case F_WndScrollDown: return HLP000198; //テキストを1行下へスクロール //Jul. 05, 2001 JEPRO 追加
case F_WndScrollUp: return HLP000199; //テキストを1行上へスクロール //Jul. 05, 2001 JEPRO 追加
case F_GONEXTPARAGRAPH: return HLP000262; //前の段落に移動
case F_GOPREVPARAGRAPH: return HLP000263; //前の段落に移動
/* 選択系 */ //Oct. 15, 2000 JEPRO 「カーソル移動系」から(選択)を移動
case F_SELECTWORD: return HLP000045; //現在位置の単語選択
case F_SELECTALL: return HLP000044; //すべて選択
case F_BEGIN_SEL: return HLP000233; //範囲選択開始
// case F_UP_SEL: return ; //(範囲選択)カーソル上移動
// case F_DOWN_SEL: return ; //(範囲選択)カーソル下移動
// case F_LEFT_SEL: return ; //(範囲選択)カーソル左移動
// case F_RIGHT_SEL: return ; //(範囲選択)カーソル右移動
case F_UP2_SEL: return HLP000234; //(範囲選択)カーソル上移動(2行ごと)
case F_DOWN2_SEL: return HLP000235; //(範囲選択)カーソル下移動(2行ごと)
case F_WORDLEFT_SEL: return HLP000236; //(範囲選択)単語の左端に移動
case F_WORDRIGHT_SEL: return HLP000237; //(範囲選択)単語の右端に移動
case F_GONEXTPARAGRAPH_SEL: return HLP000273; //(範囲選択)前の段落に移動 //@@@ 2003.06.15 MIK
case F_GOPREVPARAGRAPH_SEL: return HLP000274; //(範囲選択)前の段落に移動 //@@@ 2003.06.15 MIK
case F_GOLINETOP_SEL: return HLP000238; //(範囲選択)行頭に移動(折り返し単位)
case F_GOLINEEND_SEL: return HLP000239; //(範囲選択)行末に移動(折り返し単位)
// case F_ROLLDOWN_SEL: return ; //(範囲選択)スクロールダウン
// case F_ROLLUP_SEL: return ; //(範囲選択)スクロールアップ
case F_HalfPageUp_Sel: return HLP000247; //(範囲選択)半ページアップ //Oct. 17, 2000 JEPRO 以下「1ページダウン」まで追加
case F_HalfPageDown_Sel:return HLP000248; //(範囲選択)半ページダウン
case F_1PageUp_Sel: return HLP000240; //(範囲選択)1ページアップ
case F_1PageDown_Sel: return HLP000241; //(範囲選択)1ページダウン
case F_GOFILETOP_SEL: return HLP000242; //(範囲選択)ファイルの先頭に移動
case F_GOFILEEND_SEL: return HLP000243; //(範囲選択)ファイルの最後に移動
// case F_GONEXTPARAGRAPH_SEL: return HLP000262; //(範囲選択)次の段落へ
// case F_GOPREVPARAGRAPH_SEL: return HLP000263; //(範囲選択)前の段落へ
/* 矩形選択系 */ //Oct. 17, 2000 JEPRO (矩形選択)が新設され次第ここにおく
// case F_BOXSELALL: return ; //矩形ですべて選択
case F_BEGIN_BOX: return HLP000244; //矩形範囲選択開始
/*
case F_UP_BOX: return ; //(矩形選択)カーソル上移動 //Oct. 17, 2000 JEPRO 以下「ファイルの最後に移動」まで追加
case F_DOWN_BOX: return ; //(矩形選択)カーソル下移動
case F_LEFT_BOX: return ; /(矩形選択)カーソル左移動
case F_RIGHT_BOX: return ; //(矩形選択)カーソル右移動
case F_UP2_BOX: return ; //(矩形選択)カーソル上移動(2行ごと)
case F_DOWN2_BOX: return ; //(矩形選択)カーソル下移動(2行ごと)
case F_WORDLEFT_BOX: return ; //(矩形選択)単語の左端に移動
case F_WORDRIGHT_BOX: return ; //(矩形選択)単語の右端に移動
case F_GOLINETOP_BOX: return ; //(矩形選択)行頭に移動(折り返し単位)
case F_GOLINEEND_BOX: return ; //(矩形選択)行末に移動(折り返し単位)
case F_HalfPageUp_Box: return ; //(矩形選択)半ページアップ
case F_HalfPageDown_Box:return ; //(矩形選択)半ページダウン
case F_1PageUp_Box: return ; //(矩形選択)1ページアップ
case F_1PageDown_Box: return ; //(矩形選択)1ページダウン
case F_GOFILETOP_BOX: return ; //(矩形選択)ファイルの先頭に移動
case F_GOFILEEND_BOX: return ; //(矩形選択)ファイルの最後に移動
*/
/* 整形系 2002/04/17 YAZAKI */
case F_LTRIM: return HLP000210; //左(先頭)の空白を削除
case F_RTRIM: return HLP000211; //右(末尾)の空白を削除
case F_SORT_ASC: return HLP000212; //選択行の昇順ソート
case F_SORT_DESC: return HLP000213; //選択行の降順ソート
case F_MERGE: return HLP000214; //選択行のマージ
/* クリップボード系 */
case F_CUT: return HLP000034; //切り取り(選択範囲をクリップボードにコピーして削除)
case F_COPY: return HLP000035; //コピー(選択範囲をクリップボードにコピー)
case F_COPY_ADDCRLF: return HLP000219; //折り返し位置に改行をつけてコピー(選択範囲をクリップボードにコピー)
case F_COPY_CRLF: return HLP000163; //CRLF改行でコピー(選択範囲をクリップボードにコピー) //Feb. 23, 2001 JEPRO 抜けていたので追加
case F_PASTE: return HLP000039; //貼り付け(クリップボードから貼り付け)
case F_PASTEBOX: return HLP000040; //矩形貼り付け(クリップボードから矩形貼り付け)
// case F_INSTEXT: return ; // テキストを貼り付け
case F_COPYLINES: return HLP000036; //選択範囲内全行コピー
case F_COPYLINESASPASSAGE: return HLP000037; //選択範囲内全行引用符付きコピー
case F_COPYLINESWITHLINENUMBER: return HLP000038; //選択範囲内全行行番号付きコピー
case F_COPYPATH: return HLP000056; //このファイルのパス名をクリップボードにコピー
case F_COPYTAG: return HLP000175; //このファイルのパス名とカーソル位置をコピー //Oct. 17, 2000 JEPRO 追加
case F_COPYFNAME: return HLP000303; //このファイル名をクリップボードにコピー // 2002/2/3 aroka
// case IDM_TEST_CREATEKEYBINDLIST: return 57; //キー割り当て一覧をクリップボードへコピー //Sept. 15, 2000 jepro「リスト」を「一覧」に変更
case F_CREATEKEYBINDLIST: return HLP000057; //キー割り当て一覧をクリップボードへコピー //Sept. 15, 2000 JEPRO 「リスト」を「一覧」に変更、IDM_TESTをFに変更したがうまくいかないので殺してある //Dec. 25, 2000 復活
/* 挿入系 */
case F_INS_DATE: return HLP000164; // 日付挿入
case F_INS_TIME: return HLP000165; // 時刻挿入
case F_CTRL_CODE_DIALOG: return HLP000255; /* コントロールコード入力 */
/* 変換系 */
case F_TOLOWER: return HLP000047; //英大文字→英小文字
case F_TOUPPER: return HLP000048; //英小文字→英大文字
case F_TOHANKAKU: return HLP000049; /* 全角→半角 */
case F_TOHANKATA: return HLP000258; //全角カタカナ→半角カタカナ
case F_TOZENKAKUKATA: return HLP000050; /* 半角+全ひら→全角?カタカナ */ //Sept. 17, 2000 jepro 説明を「半角→全角カタカナ」から変更
case F_TOZENKAKUHIRA: return HLP000051; /* 半角+全カタ→全角?ひらがな */ //Sept. 17, 2000 jepro 説明を「半角→全角ひらがな」から変更
case F_HANKATATOZENKAKUKATA: return HLP000123; /* 半角カタカナ→全角カタカナ */
case F_HANKATATOZENKAKUHIRA: return HLP000124; /* 半角カタカナ→全角ひらがな */
case F_TOZENEI: return HLP000200; /* 半角英数→全角英数 */ //July. 30, 2001 Misaka //Stonee, 2001/09/26 番号修正
case F_TOHANEI: return HLP000215; /* 全角英数→半角英数 */ //@@@ 2002.2.11 YAZAKI
case F_TABTOSPACE: return HLP000182; /* TAB→空白 */
case F_SPACETOTAB: return HLP000196; /* 空白→TAB */ //#### Stonee, 2001/05/27 //Jul. 03, 2001 JEPRO 番号修正
case F_CODECNV_AUTO2SJIS: return HLP000178; /* 自動判別→SJISコード変換 */
case F_CODECNV_EMAIL: return HLP000052; //E-Mail(JIS→SJIS)コード変換
case F_CODECNV_EUC2SJIS: return HLP000053; //EUC→SJISコード変換
case F_CODECNV_UNICODE2SJIS: return HLP000179; //Unicode→SJISコード変換
case F_CODECNV_UNICODEBE2SJIS: return HLP000257; //UnicodeBE→SJISコード変換
case F_CODECNV_UTF82SJIS: return HLP000142; /* UTF-8→SJISコード変換 */
case F_CODECNV_UTF72SJIS: return HLP000143; /* UTF-7→SJISコード変換 */
case F_CODECNV_SJIS2JIS: return HLP000117; /* SJIS→JISコード変換 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -