📄 ceditwnd.cpp
字号:
if( m_hWnd != (HWND)lParam )
{
switch( wParam )
{
case MYBCN_TOOLBAR:
m_cEditDoc.HandleCommand( F_SHOWTOOLBAR );
break;
case MYBCN_FUNCKEY:
m_cEditDoc.HandleCommand( F_SHOWFUNCKEY );
break;
case MYBCN_TAB:
m_cEditDoc.HandleCommand( F_SHOWTAB );
break;
case MYBCN_STATUSBAR:
m_cEditDoc.HandleCommand( F_SHOWSTATUSBAR );
break;
}
}
return 0L;
*/
//by 鬼 (2) MYWM_CHECKSYSMENUDBLCLKは不要に, WM_LBUTTONDBLCLK追加
case WM_NCLBUTTONDOWN:
return OnNcLButtonDown(wParam, lParam);
case WM_NCLBUTTONUP:
return OnNcLButtonUp(wParam, lParam);
case WM_LBUTTONDBLCLK:
return OnLButtonDblClk(wParam, lParam);
default:
// << 20020331 aroka 再変換対応 for 95/NT
if( uMsg == m_uMSIMEReconvertMsg || uMsg == m_uATOKReconvertMsg){
return m_cEditDoc.DispatchEvent( hwnd, uMsg, wParam, lParam );
}
// >> by aroka
return DefWindowProc( hwnd, uMsg, wParam, lParam );
}
}
/*! 終了時の処理
@retval TRUE: 終了して良い / FALSE: 終了しない
*/
int CEditWnd::OnClose( void )
{
/* ウィンドウをアクティブにする */
/* アクティブにする */
// ActivateFrameWindow( m_hWnd ); //削除(必要ならOnFileClose内で) @@@ 2003.06.25 MIK
// if( ::IsIconic( m_hWnd ) ){
// ::ShowWindow( m_hWnd, SW_RESTORE );
// }else{
// ::ShowWindow( m_hWnd, SW_SHOW );
// }
// ::SetForegroundWindow( m_hWnd );
// ::SetActiveWindow( m_hWnd );
/* ファイルを閉じるときのMRU登録 & 保存確認 & 保存実行 */
return m_cEditDoc.OnFileClose();
}
void CEditWnd::OnCommand( WORD wNotifyCode, WORD wID , HWND hwndCtl )
{
// MYTRACE( "CEditWnd::OnCommand()\n" );
int nFuncCode;
HWND hwndWork;
switch( wNotifyCode ){
/* メニューからのメッセージ */
case 0:
switch( wID ){
case F_EXITALL: //Dec. 26, 2000 JEPRO F_に変更
/* サクラエディタの全終了 */
CEditApp::TerminateApplication();
break;
//Sept. 15, 2000→Nov. 25, 2000 JEPRO //ショートカットキーがうまく働かないので殺してあった下の2行を修正?復活
case F_HELP_CONTENTS:
/* ヘルプ目次 */
{
char szHelp[_MAX_PATH + 1];
/* ヘルプファイルのフルパスを返す */
::GetHelpFilePath( szHelp );
ShowWinHelpContents( m_hWnd, szHelp ); // 目次を表示する
}
break;
case F_HELP_SEARCH:
/* ヘルプキーワード検索 */
{
char szHelp[_MAX_PATH + 1];
/* ヘルプファイルのフルパスを返す */
::GetHelpFilePath( szHelp );
::WinHelp( m_hWnd, szHelp, HELP_KEY, (ULONG_PTR)"" );
}
break;
case F_ABOUT: //Dec. 25, 2000 JEPRO F_に変更
/* バージョン情報 */
{
CDlgAbout cDlgAbout;
cDlgAbout.DoModal( m_hInstance, m_hWnd );
}
break;
default:
if( wID - IDM_SELWINDOW >= 0 &&
wID - IDM_SELWINDOW < m_pShareData->m_nEditArrNum ){
hwndWork = m_pShareData->m_pEditArr[wID - IDM_SELWINDOW].m_hWnd;
//TabWnd_SucceedWindowPlacement( m_hWnd, hwndWork ); //@@@ 2003.06.13 MIK
/* アクティブにする */
ActivateFrameWindow( hwndWork );
}else
if( wID - IDM_SELMRU >= 0 &&
wID - IDM_SELMRU < 999
){
/* 指定ファイルが開かれているか調べる */
//@@@ 2001.12.26 YAZAKI MRUリストは、CMRUに依頼する
CMRU cMRU;
FileInfo checkFileInfo;
cMRU.GetFileInfo(wID - IDM_SELMRU, &checkFileInfo);
// Oct. 9, 2004 genta 共通関数化
m_cEditDoc.OpenFile( checkFileInfo.m_szPath );
}else
if( wID - IDM_SELOPENFOLDER >= 0 &&
wID - IDM_SELOPENFOLDER < 999
){
{
//Stonee, 2001/12/21 UNCであれば接続を試みる
//@@@ 2001.12.26 YAZAKI OPENFOLDERリストは、CMRUFolderにすべて依頼する
CMRUFolder cMRUFolder;
NetConnect( cMRUFolder.GetPath( wID - IDM_SELOPENFOLDER ) );
/* 「ファイルを開く」ダイアログ */
int nCharCode = CODE_AUTODETECT; /* 文字コード自動判別 */
BOOL bReadOnly = FALSE;
char szPath[_MAX_PATH + 3];
szPath[0] = '\0';
if( !m_cEditDoc.OpenFileDialog( m_hWnd, cMRUFolder.GetPath(wID - IDM_SELOPENFOLDER), szPath, &nCharCode, &bReadOnly ) ){
return;
}
// Oct. 9, 2004 genta 共通関数化
m_cEditDoc.OpenFile( szPath );
}
}else{
//ビューにフォーカスを移動しておく
if( wID != F_SEARCH_BOX && m_nCurrentFocus == F_SEARCH_BOX )
::SetFocus( m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].m_hWnd );
/* コマンドコードによる処理振り分け */
m_cEditDoc.HandleCommand( wID );
}
break;
}
break;
/* アクセラレータからのメッセージ */
case 1:
//ビューにフォーカスを移動しておく
if( wID != F_SEARCH_BOX && m_nCurrentFocus == F_SEARCH_BOX )
::SetFocus( m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].m_hWnd );
nFuncCode = CKeyBind::GetFuncCode(
wID,
m_pShareData->m_nKeyNameArrNum,
m_pShareData->m_pKeyNameArr
);
// MYTRACE( "CEditWnd::OnCommand() nFuncCode=%d\n", nFuncCode );
m_cEditDoc.HandleCommand( nFuncCode );
break;
case CBN_SETFOCUS:
if( NULL != m_hwndSearchBox && hwndCtl == m_hwndSearchBox )
{
m_nCurrentFocus = F_SEARCH_BOX;
}
break;
case CBN_KILLFOCUS:
if( NULL != m_hwndSearchBox && hwndCtl == m_hwndSearchBox )
{
m_nCurrentFocus = 0;
//フォーカスがはずれたときに検索キーにしてしまう。
//検索キーワードを取得
char szText[_MAX_PATH];
memset( szText, 0, sizeof(szText) );
::SendMessage( m_hwndSearchBox, WM_GETTEXT, _MAX_PATH - 1, (LPARAM)szText );
if( szText[0] ) //キー文字列がある
{
//検索キーを登録
CShareData::getInstance()->AddToSearchKeyArr( (const char*)szText );
}
}
break;
/* コントロールからのメッセージには通知コード */
default:
break;
}
return;
}
// キーワード:メニューバー順序
// Sept.14, 2000 Jepro note: メニューバーの項目のキャプションや順番設定などは以下で行っているらしい
// Sept.16, 2000 Jepro note: アイコンとの関連付けはCShareData_new2.cppファイルで行っている
void CEditWnd::InitMenu( HMENU hMenu, UINT uPos, BOOL fSystemMenu )
{
int cMenuItems;
int nPos;
UINT id;
UINT fuFlags;
int i;
BOOL bRet;
char szMemu[280];
int nRowNum;
EditNode* pEditNodeArr;
FileInfo* pfi;
HMENU hMenuPopUp;
HMENU hMenuPopUp_2;
const char* pszLabel;
if( hMenu != ::GetSubMenu( ::GetMenu( m_hWnd ), uPos ) ){
goto end_of_func_IsEnable;
}
if( fSystemMenu ){
}else{
// MYTRACE( "hMenu=%08xh uPos=%d, fSystemMenu=%s\n", hMenu, uPos, fSystemMenu ? "TRUE":"FALSE" );
switch( uPos ){
case 0:
/* 「ファイル」メニュー */
m_CMenuDrawer.ResetContents();
cMenuItems = ::GetMenuItemCount( hMenu );
for( i = cMenuItems - 1; i >= 0; i-- ){
bRet = ::DeleteMenu( hMenu, i, MF_BYPOSITION );
}
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILENEW , "新建(&N)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILEOPEN , "打开(&O)..." );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILESAVE , "保存(&S)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILESAVEAS_DIALOG , "另存为(&A)..." );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILESAVEALL , "所有文件保存(&Z)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL );
// Feb. 28, 2003 genta 保存して閉じるを追加.閉じるメニューを近くに移動
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILESAVECLOSE , "保存并关闭(&E)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_WINCLOSE , "关闭(&C)" ); //Feb. 18, 2001 JEPRO 追加
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILECLOSE , "关闭本文件 (&R)" ); //Oct. 17, 2000 jepro キャプションを「閉じる」から変更 //Feb. 18, 2001 JEPRO アクセスキー変更(C→B; Blankの意味)
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_FILECLOSE_OPEN , "关闭并打开(&L)..." );
// 「文字コードセット」ポップアップメニュー
// Aug. 19. 2003 genta アクセスキー表記を統一
hMenuPopUp_2 = ::CreatePopupMenu(); // Jan. 29, 2002 genta
// Dec. 4, 2002 genta
m_CMenuDrawer.MyAppendMenu( hMenuPopUp_2, MF_BYPOSITION | MF_STRING, F_FILE_REOPEN , "重新打开(&W)" );
m_CMenuDrawer.MyAppendMenu( hMenuPopUp_2, MF_BYPOSITION | MF_SEPARATOR, 0, NULL );
m_CMenuDrawer.MyAppendMenu( hMenuPopUp_2, MF_BYPOSITION | MF_STRING, F_FILE_REOPEN_SJIS, "SJISで開き直す(&S)" ); //Nov. 7, 2000 jepro キャプションに'で開き直す'を追加
m_CMenuDrawer.MyAppendMenu( hMenuPopUp_2, MF_BYPOSITION | MF_STRING, F_FILE_REOPEN_JIS, "JISで開き直す(&J)" ); //Nov. 7, 2000 jepro キャプションに'で開き直す'を追加
m_CMenuDrawer.MyAppendMenu( hMenuPopUp_2, MF_BYPOSITION | MF_STRING, F_FILE_REOPEN_EUC, "EUCで開き直す(&E)" ); //Nov. 7, 2000 jepro キャプションに'で開き直す'を追加
m_CMenuDrawer.MyAppendMenu( hMenuPopUp_2, MF_BYPOSITION | MF_STRING, F_FILE_REOPEN_UNICODE, "Unicodeで開き直す(&U)" ); //Nov. 7, 2000 jepro キャプションに'で開き直す'を追加
m_CMenuDrawer.MyAppendMenu( hMenuPopUp_2, MF_BYPOSITION | MF_STRING, F_FILE_REOPEN_UNICODEBE, "UnicodeBEで開き直す(&N)" );
m_CMenuDrawer.MyAppendMenu( hMenuPopUp_2, MF_BYPOSITION | MF_STRING, F_FILE_REOPEN_UTF8, "UTF-8で開き直す(&8)" ); //Nov. 7, 2000 jepro キャプションに'で開き直す'を追加
m_CMenuDrawer.MyAppendMenu( hMenuPopUp_2, MF_BYPOSITION | MF_STRING, F_FILE_REOPEN_UTF7, "UTF-7で開き直す(&7)" ); //Nov. 7, 2000 jepro キャプションに'で開き直す'を追加
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT)hMenuPopUp_2 , "重新打开(&W)" );//Oct. 11, 2000 JEPRO アクセスキー変更(M→H)
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_PRINT , "打印(&P)..." );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_PRINT_PREVIEW , "打印预览(&V)..." );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_PRINT_PAGESETUP , "页面设置(&U)..." );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL );
// 「ファイル操作」ポップアップメニュー
//hMenuPopUp = ::CreatePopupMenu(); // Jan. 29, 2002 genta
//m_CMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_SEPARATOR, 0, NULL );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_PROPERTY_FILE , "文件属性(&T)" ); //Nov. 7, 2000 jepro キャプションに'ファイルの'を追加
//m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT)hMenuPopUp , "ファイル操作(&R)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_BROWSE , "浏览(&B)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL );
/* 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 );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_WIN_CLOSEALL , "关闭所有窗口(&Q)" ); //Feb/ 19, 2001 JEPRO 追加
// Jun. 9, 2001 genta ソフトウェア名改称
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_EXITALL , "关闭SAKURA(&X)" ); //Sept. 11, 2000 jepro キャプションを「アプリケーション終了」から変更 //Dec. 26, 2000 JEPRO F_に変更
break;
case 1:
/* 「編集」メニュー */
m_CMenuDrawer.ResetContents();
cMenuItems = ::GetMenuItemCount( hMenu );
for( i = cMenuItems - 1; i >= 0; i-- ){
bRet = ::DeleteMenu( hMenu, i, MF_BYPOSITION );
}
// Aug. 19. 2003 genta アクセスキー表記を統一
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_UNDO , "撤消(&U)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_REDO , "恢复(&R)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_CUT , "剪切(&T)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_COPY , "复制(&C)" );
// Jul, 3, 2000 genta
// m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_COPYLINESASPASSAGE, "全行引用コピー(&N)" );
// Sept. 14, 2000 JEPRO キャプションに「記号付き」を追加、アクセスキー変更(N→.)
// m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_COPYLINESASPASSAGE, "选择範囲内全行引用符付きコピー(&.)" );
// Sept. 30, 2000 JEPRO 引用符付きコピーのアイコンを作成したので上記メニューは重複を避けて「高度な操作」内におくだけにする
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_PASTE , "粘贴(&P)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_DELETE , "删除(&D)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_SELECTALL , "全选(&A)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL ); /* メニューからの再変換対応 minfu 2002.04.09 */
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_RECONVERT , "再变换(&R)" ); /* メニューからの再変換対応 minfu 2002.04.09 */
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL );
// Aug. 19. 2003 genta アクセスキー表記を統一
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_COPY_CRLF , "复制当前行(换行符)(&L)" ); //Nov. 9, 2000 JEPRO 追加
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_COPY_ADDCRLF , "复制当前行(&H)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_PASTEBOX , "矩形粘贴(&X)" ); //Sept. 13, 2000 JEPRO 移動に伴いアクセスキー付与 //Oct. 22, 2000 JEPRO アクセスキー変更(P→X)
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING, F_DELETE_BACK , "删除前一字符(&B)" );
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_SEPARATOR, 0, NULL );
// 「挿入」ポップアップメニュー
hMenuPopUp = ::CreatePopupMenu(); // Jan. 29, 2002 genta
m_CMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_INS_DATE, "日期(&D)" );
m_CMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_INS_TIME, "时间(&T)" );
m_CMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_CTRL_CODE_DIALOG, "控制符(&C)..." ); // 2004.05.06 MIK ...追加
m_CMenuDrawer.MyAppendMenu( hMenu, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT)hMenuPopUp , "插入(&I)" );
// 「高度な操作」ポップアップメニュー
hMenuPopUp = ::CreatePopupMenu(); // Jan. 29, 2002 genta
m_CMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_WordDeleteToStart , "删除至单词左端(&L)" ); //Sept. 13, 2000 JEPRO アクセスキー付与
m_CMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_WordDeleteToEnd , "删除至单词右端(&R)" ); //Sept. 13, 2000 JEPRO アクセスキー付与
m_CMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_SEPARATOR, 0, NULL );
m_CMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_SELECTWORD , "选择当
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -