📄 ceditapp.cpp
字号:
{
char pszCmdLine[1024];
DLLSHAREDATA* pShareData;
int nPos = 0; // 引数作成用ポインタ
/* 共有データ構造体のアドレスを返す */
pShareData = CShareData::getInstance()->GetShareData();
/* 編集ウィンドウの上限チェック */
if( pShareData->m_nEditArrNum >= MAX_EDITWINDOWS ){ //最大値修正 //@@@ 2003.05.31 MIK
char szMsg[512];
wsprintf( szMsg, "編集ウィンドウ数の上限は%dです。\nこれ以上は同時に開けません。", MAX_EDITWINDOWS );
::MessageBox( NULL, szMsg, GSTR_APPNAME, MB_OK );
return false;
}
if( pfi != NULL ){
if( pfi->m_szPath != NULL ){
if( strlen( pfi->m_szPath ) > 0 ){
nPos += wsprintf( pszCmdLine + nPos, " \"%s\"", pfi->m_szPath );
}
}
if( pfi->m_nX >= 0 ){
nPos += wsprintf( pszCmdLine + nPos, " -X=%d", pfi->m_nX +1 );
}
if( pfi->m_nY >= 0 ){
nPos += wsprintf( pszCmdLine + nPos, " -Y=%d", pfi->m_nY +1 );
}
if( pfi->m_nViewLeftCol >= 0 ){
nPos += wsprintf( pszCmdLine + nPos, " -VX=%d", pfi->m_nViewLeftCol +1 );
}
if( pfi->m_nViewTopLine >= 0 ){
nPos += wsprintf( pszCmdLine + nPos, " -VY=%d", pfi->m_nViewTopLine +1 );
}
if( pfi->m_nCharCode >= 0 && pfi->m_nCharCode != CODE_AUTODETECT ){
nPos += wsprintf( pszCmdLine + nPos, " -CODE=%d", pfi->m_nCharCode );
}
if( bReadOnly ){
nPos += wsprintf( pszCmdLine + nPos, " -R" );
}
//: do error check nPos
}
// ::MessageBox( NULL, pszCmdLine, "OpenNewEditor", MB_OK );
return OpenNewEditor( hInstance, hWndParent, pszCmdLine, CODE_AUTODETECT, bReadOnly, sync );
}
// To Here Oct. 24, 2000 genta
/*! サクラエディタの全終了
@date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。
*/
void CEditApp::TerminateApplication( void )
{
DLLSHAREDATA* pShareData;
/* 共有データ構造体のアドレスを返す */
pShareData = CShareData::getInstance()->GetShareData();
/* 現在の編集ウィンドウの数を調べる */
if( pShareData->m_Common.m_bExitConfirm ){ //終了時の確認
if( 0 < CShareData::getInstance()->GetEditorWindowsNum() ){
if( IDYES != ::MYMESSAGEBOX(
NULL,
MB_YESNO | MB_APPLMODAL | MB_ICONQUESTION,
GSTR_APPNAME,
"現在開いている編集用のウィンドウをすべて閉じて終了しますか?"
) ){
return;
}
}
}
/* 「すべてのウィンドウを閉じる」要求 */ //Oct. 7, 2000 jepro 「編集ウィンドウの全終了」という説明を左記のように変更
if( CloseAllEditor() ){
::PostMessage( pShareData->m_hwndTray, WM_CLOSE, 0, 0 );
}
return;
}
/*! すべてのウィンドウを閉じる
@date Oct. 7, 2000 jepro 「編集ウィンドウの全終了」という説明を左記のように変更
@date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。
*/
BOOL CEditApp::CloseAllEditor( void )
{
/* 全編集ウィンドウへ終了要求を出す */
if( !CShareData::getInstance()->RequestCloseAllEditor() ){
return FALSE;
}else{
return TRUE;
}
}
/*! ポップアップメニュー(トレイ左ボタン) */
int CEditApp::CreatePopUpMenu_L( void )
{
int i;
int j;
int nId;
HMENU hMenuTop;
HMENU hMenu;
HMENU hMenuPopUp;
char szMemu[100 + MAX_PATH * 2]; // Jan. 19, 2001 genta
char szMenu2[MAX_PATH * 2]; // Jan. 19, 2001 genta
POINT po;
RECT rc;
// HWND hwndDummy;
int nMenuNum;
FileInfo* pfi;
//本当はセマフォにしないとだめ
if( m_bUseTrayMenu ) return -1;
m_bUseTrayMenu = true;
m_CMenuDrawer.ResetContents();
CShareData::getInstance()->TransformFileName_MakeCache();
hMenuTop = ::LoadMenu( m_hInstance, MAKEINTRESOURCE( IDR_TRAYMENU_L ) );
hMenu = ::GetSubMenu( hMenuTop, 0 );
nMenuNum = ::GetMenuItemCount( hMenu )/* - 1*/;
for( i = nMenuNum - 1; i >= 0; i-- ){
::DeleteMenu( hMenu, i, MF_BYPOSITION );
}
//m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILENEW, "新規作成(&N)", FALSE );
//m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILEOPEN, "開く(&O)...", FALSE );
//m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_GREP_DIALOG, "Grep(&G)...", FALSE );
char buff[100];
int size = sizeof(buff);
::memset(buff,0,size);
int len = LoadString(m_hInstance,F_FILENEW,buff,size);
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILENEW,buff , FALSE );
len = LoadString(m_hInstance,F_FILEOPEN,buff,size);
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILEOPEN, buff, FALSE );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_GREP_DIALOG, "Grep(&G)...", FALSE );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL, FALSE );
/* MRUリストのファイルのリストをメニューにする */
//@@@ 2001.12.26 YAZAKI MRUリストは、CMRUに依頼する
CMRU cMRU;
hMenuPopUp = cMRU.CreateMenu( &m_CMenuDrawer ); // ファイルメニュー
if ( cMRU.Length() > 0 ){
// アクティブ
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT)hMenuPopUp , "最近打开的文件(&F)" );
}
else {
// 非アクティブ
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_POPUP | MF_GRAYED, (UINT)hMenuPopUp , "最近打开的文件(&F)" );
}
/* 最近使ったフォルダのメニューを作成 */
//@@@ 2001.12.26 YAZAKI OPENFOLDERリストは、CMRUFolderにすべて依頼する
CMRUFolder cMRUFolder;
hMenuPopUp = cMRUFolder.CreateMenu( &m_CMenuDrawer );
if ( cMRUFolder.Length() > 0 ){
// アクティブ
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT)hMenuPopUp, "最近打开的文件夹(&D)" );
}
else {
// 非アクティブ
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_POPUP | MF_GRAYED, (UINT)hMenuPopUp, "最近打开的文件夹(&D)" );
}
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL, FALSE );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILESAVEALL, "全部保存(&Z)", FALSE ); // Jan. 24, 2005 genta
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_WIN_CLOSEALL, "关闭所有窗口(&Q)", FALSE ); //Oct. 17, 2000 JEPRO 名前を変更(F_FILECLOSEALL→F_WIN_CLOSEALL) //Feb. 18, 2001 JEPRO アクセスキー変更(L→Q)
/* 現在開いている編集窓のリストをメニューにする */
j = 0;
for( i = 0; i < m_pShareData->m_nEditArrNum; ++i ){
if( CShareData::IsEditWnd( m_pShareData->m_pEditArr[i].m_hWnd ) ){
++j;
}
}
if( j > 0 ){
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL, FALSE );
j = 0;
for( i = 0; i < m_pShareData->m_nEditArrNum; ++i ){
if( CShareData::IsEditWnd( m_pShareData->m_pEditArr[i].m_hWnd ) ){
/* トレイからエディタへの編集ファイル名要求通知 */
::SendMessage( m_pShareData->m_pEditArr[i].m_hWnd, MYWM_GETFILEINFO, 0, 0 );
// pfi = (FileInfo*)m_pShareData->m_szWork;
pfi = (FileInfo*)&m_pShareData->m_FileInfo_MYWM_GETFILEINFO;
if( pfi->m_bIsGrep ){
/* データを指定バイト数以内に切り詰める */
CMemory cmemDes;
// int nDesLen;
// const char* pszDes;
LimitStringLengthB( pfi->m_szGrepKey, lstrlen( pfi->m_szGrepKey ), 64, cmemDes );
// Jan. 19, 2002 genta
// メニュー文字列の&を考慮
dupamp( cmemDes.GetPtr(), szMenu2 );
// From Here Oct. 4, 2000 JEPRO commented out & modified
// j >= 10 + 26 の時の考慮を省いた(に近い)が開くファイル数が36個を越えることはまずないので事実上OKでしょう
// Jan. 19, 2002 genta
// &の重複処理を追加したため継続判定を若干変更
wsprintf( szMemu, "&%c 【Grep】\"%s%s\"", ((1 + i) <= 9)?('1' + i):('A' + i - 9),
szMenu2, ( (int)lstrlen( pfi->m_szGrepKey ) > cmemDes.GetLength() ) ? "…":""
);
}else{
char szFileName[_MAX_PATH];
// 2003/01/27 Moca ファイル名の簡易表示
CShareData::getInstance()->GetTransformFileNameFast( pfi->m_szPath, szFileName, MAX_PATH );
// Jan. 19, 2002 genta
// メニュー文字列の&を考慮
dupamp( szFileName, szMenu2 );
wsprintf( szMemu, "&%c %s %s", ((1 + i) <= 9)?('1' + i):('A' + i - 9),
(0 < lstrlen( szMenu2 ))? szMenu2:"(未命名)",
pfi->m_bIsModified ? "*":" "
);
// To Here Oct. 4, 2000
// gm_pszCodeNameArr_3 からコピーするように変更
if( 0 < pfi->m_nCharCode && pfi->m_nCharCode < CODE_CODEMAX ){
strcat( szMemu, gm_pszCodeNameArr_3[pfi->m_nCharCode] );
}
}
// ::InsertMenu( hMenu, IDM_EXITALL, MF_BYCOMMAND | MF_STRING, IDM_SELWINDOW + i, szMemu );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, IDM_SELWINDOW + i, szMemu, FALSE );
++j;
}
}
}
if( j == 0 ){
::EnableMenuItem( hMenu, F_WIN_CLOSEALL, MF_BYCOMMAND | MF_GRAYED ); //Oct. 17, 2000 JEPRO 名前を変更(F_FILECLOSEALL→F_WIN_CLOSEALL)
::EnableMenuItem( hMenu, F_FILESAVEALL, MF_BYCOMMAND | MF_GRAYED ); // Jan. 24, 2005 genta
}
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL, FALSE );
// Jun. 9, 2001 genta ソフトウェア名改称
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_EXITALL, "关闭SAKURA(&X)", FALSE ); //Dec. 26, 2000 JEPRO F_に変更
po.x = 0;
po.y = 0;
::GetCursorPos( &po );
po.y -= 4;
rc.left = 0;
rc.right = 0;
rc.top = 0;
rc.bottom = 0;
::SetForegroundWindow( m_hWnd );
nId = ::TrackPopupMenu(
hMenu,
TPM_BOTTOMALIGN
| TPM_RIGHTALIGN
| TPM_RETURNCMD
| TPM_LEFTBUTTON
/*| TPM_RIGHTBUTTON*/
,
po.x,
po.y,
0,
m_hWnd,
&rc
);
::PostMessage( m_hWnd, WM_USER + 1, 0, 0 );
::DestroyMenu( hMenuTop );
// MYTRACE( "nId=%d\n", nId );
m_bUseTrayMenu = false;
return nId;
}
//キーワード:トレイ右クリックメニュー順序
// Oct. 12, 2000 JEPRO ポップアップメニュー(トレイ左ボタン) を参考にして新たに追加した部分
/*! ポップアップメニュー(トレイ右ボタン) */
int CEditApp::CreatePopUpMenu_R( void )
{
int i;
int nId;
HMENU hMenuTop;
HMENU hMenu;
POINT po;
RECT rc;
int nMenuNum;
//本当はセマフォにしないとだめ
if( m_bUseTrayMenu ) return -1;
m_bUseTrayMenu = true;
m_CMenuDrawer.ResetContents();
hMenuTop = ::LoadMenu( m_hInstance, MAKEINTRESOURCE( IDR_TRAYMENU_L ) );
hMenu = ::GetSubMenu( hMenuTop, 0 );
nMenuNum = ::GetMenuItemCount( hMenu )/* - 1*/;
for( i = nMenuNum - 1; i >= 0; i-- ){
::DeleteMenu( hMenu, i, MF_BYPOSITION );
}
#if 0
2002/04/26 YAZAKI 使えないものは表示しない
/* トレイ右クリックの「オプション」メニュー */
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_GRAYED, F_TYPE_LIST, "文件类型设置一览(&L)...", FALSE ); //Jan. 12, 2001 JEPRO このメニュー項目を無効化した
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_GRAYED, F_OPTION_TYPE, "设置(&Y)...", FALSE ); //Jan. 12, 2001 JEPRO このメニュー項目を無効化した
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_GRAYED, F_OPTION, "共通设置(&C)...", FALSE ); //Jan. 12, 2001 JEPRO このメニュー項目を無効化した
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_GRAYED, F_FONT, "字体设置(&F)...", FALSE ); //Jan. 12, 2001 JEPRO このメニュー項目を無効化した
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL, FALSE );
#endif
/* トレイ右クリックの「ヘルプ」メニュー */
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_HELP_CONTENTS , "帮助(&O)", FALSE );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_HELP_SEARCH , "关键字检索(&S)", FALSE ); //Nov. 25, 2000 JEPRO 「トピックの」→「キーワード」に変更
// m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL, FALSE );
// m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_MENU_ALLFUNC , "コマンド一覧(&M)", FALSE ); //Jan. 12, 2001 JEPRO まずコメントアウト第一号 (T_T)
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL, FALSE );
#if 0
2002/04/26 YAZAKI 使えないものは表示しない
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_GRAYED, F_EXTHELP1 , "外部ヘルプ1(&E)", FALSE ); //Jan. 12, 2001 JEPRO このメニュー項目を無効化した
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_GRAYED, F_EXTHTMLHELP , "外部HTMLヘルプ(&H)", FALSE ); //Jan. 12, 2001 JEPRO このメニュー項目を無効化した
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL, FALSE );
#endif
// m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, IDM_ABOUT, "バージョン情報(&A)", FALSE );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_ABOUT, "版本信息(&A)", FALSE ); //Dec. 25, 2000 JEPRO F_に変更
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL, FALSE );
// m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, IDM_EXITALL, "テキストエディタの全終了(&X)", FALSE );
// m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_EXITALL, "テキストエディタの全終了(&X)", FALSE ); //Dec. 26, 2000 JEPRO F_に変更
// Jun. 18, 2001 genta ソフトウェア名改称
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_EXITALL, "关闭SAKURA(&X)", FALSE ); //De
po.x = 0;
po.y = 0;
::GetCursorPos( &po );
po.y -= 4;
rc.left = 0;
rc.right = 0;
rc.top = 0;
rc.bottom = 0;
::SetForegroundWindow( m_hWnd );
nId = ::TrackPopupMenu(
hMenu,
TPM_BOTTOMALIGN
| TPM_RIGHTALIGN
| TPM_RETURNCMD
| TPM_LEFTBUTTON
/*| TPM_RIGHTBUTTON*/
,
po.x,
po.y,
0,
m_hWnd,
&rc
);
::PostMessage( m_hWnd, WM_USER + 1, 0, 0 );
::DestroyMenu( hMenuTop );
// MYTRACE( "nId=%d\n", nId );
m_bUseTrayMenu = false;
return nId;
}
/*[EOF]*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -