📄 ceditwnd.cpp
字号:
case SC_CLOSE:
//case SC_MOVE:
//case SC_SIZE:
//case SC_MINIMIZE:
//case SC_MAXIMIZE:
m_pShareData->m_TabWndWndpl.length = sizeof( m_pShareData->m_TabWndWndpl );
::GetWindowPlacement( m_hWnd, &(m_pShareData->m_TabWndWndpl) );
break;
}
return DefWindowProc( hwnd, uMsg, wParam, lParam );
//To here 2003.06.25 MIK
*/
case WM_IME_COMPOSITION:
if ( lParam & GCS_RESULTSTR ) {
/* メッセージの配送 */
return m_cEditDoc.DispatchEvent( hwnd, uMsg, wParam, lParam );
}else{
return DefWindowProc( hwnd, uMsg, wParam, lParam );
}
case WM_KILLFOCUS:
case WM_CHAR:
case WM_IME_CHAR:
case WM_KEYUP:
case WM_SYSKEYUP: // 2004.04.28 Moca ALT+キーのキーリピート処理のため追加
case WM_ENTERMENULOOP:
case MYWM_IME_REQUEST: /* 再変換対応 by minfu 2002.03.27 */ // 20020331 aroka
/* メッセージの配送 */
return m_cEditDoc.DispatchEvent( hwnd, uMsg, wParam, lParam );
case WM_EXITMENULOOP:
// MYTRACE( "WM_EXITMENULOOP\n" );
if( NULL != m_hwndStatusBar ){
::SendMessage( m_hwndStatusBar, SB_SETTEXT, 0 | SBT_NOBORDERS, (LPARAM) (LPINT)"" );
}
/* メッセージの配送 */
return m_cEditDoc.DispatchEvent( hwnd, uMsg, wParam, lParam );
case WM_SETFOCUS:
// MYTRACE( "WM_SETFOCUS\n" );
// Aug. 29, 2003 wmlhq & ryojiファイルのタイムスタンプのチェック処理 OnTimer に移行
m_nTimerCount = 9;
/* 編集ウィンドウリストへの登録 */
CShareData::getInstance()->AddEditWndList( m_hWnd );
/* メッセージの配送 */
lRes = m_cEditDoc.DispatchEvent( hwnd, uMsg, wParam, lParam );
//@@@ 2002.01.14 YAZAKI 印刷プレビューをCPrintPreviewに独立させたことによる変更
/* 印刷プレビューモードのときは、キー操作は全部PrintPreviewBarへ転送 */
if( m_pPrintPreview ){
m_pPrintPreview->SetFocusToPrintPreviewBar();
}
//検索ボックスを更新
if( m_hwndSearchBox )
{
int i;
::SendMessage( m_hwndSearchBox, CB_RESETCONTENT, 0, 0 );
for( i = 0; i < m_pShareData->m_nSEARCHKEYArrNum; i++ )
{
::SendMessage( m_hwndSearchBox, CB_ADDSTRING, 0, (LPARAM)m_pShareData->m_szSEARCHKEYArr[i] );
}
::SendMessage( m_hwndSearchBox, CB_SETCURSEL, 0, 0 );
}
return lRes;
case WM_NOTIFY:
idCtrl = (int) wParam;
pnmh = (LPNMHDR) lParam;
// From Here Feb. 15, 2004 genta
// ステータスバーのダブルクリックでモード切替ができるようにする
if( m_hwndStatusBar && pnmh->hwndFrom == m_hwndStatusBar ){
if( pnmh->code == NM_DBLCLK ){
LPNMMOUSE mp = (LPNMMOUSE) lParam;
if( mp->dwItemSpec == 6 ){ // 上書き/挿入
m_cEditDoc.HandleCommand( F_CHGMOD_INS );
}
else if( mp->dwItemSpec == 5 ){ // マクロの記録開始?終了
m_cEditDoc.HandleCommand( F_RECKEYMACRO );
}
else if( mp->dwItemSpec == 1 ){ // 桁位置→行番号ジャンプ
m_cEditDoc.HandleCommand( F_JUMP_DIALOG );
}
}
else if( pnmh->code == NM_RCLICK ){
LPNMMOUSE mp = (LPNMMOUSE) lParam;
if( mp->dwItemSpec == 2 ){ // 入力改行モード
m_CMenuDrawer.ResetContents();
HMENU hMenuPopUp = ::CreatePopupMenu();
m_CMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_CHGMOD_EOL_CRLF,
"入力改行コード指定(&CRLF)" ); // 入力改行コード指定(CRLF)
m_CMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_CHGMOD_EOL_LF,
"入力改行コード指定(&LF)" ); // 入力改行コード指定(LF)
m_CMenuDrawer.MyAppendMenu( hMenuPopUp, MF_BYPOSITION | MF_STRING, F_CHGMOD_EOL_CR,
"入力改行コード指定(C&R)" ); // 入力改行コード指定(CR)
// mp->ptはステータスバー内部の座標なので,スクリーン座標への変換が必要
POINT po = mp->pt;
::ClientToScreen( m_hwndStatusBar, &po );
int nId = ::TrackPopupMenu(
hMenuPopUp,
TPM_CENTERALIGN
| TPM_BOTTOMALIGN
| TPM_RETURNCMD
| TPM_LEFTBUTTON
,
po.x,
po.y,
0,
m_hWnd,
NULL
);
::DestroyMenu( hMenuPopUp );
m_cEditDoc.HandleCommand( nId );
}
}
return 0L;
}
// To Here Feb. 15, 2004 genta
switch( pnmh->code ){
case TTN_NEEDTEXT:
lptip = (LPTOOLTIPTEXT)pnmh;
{
/* ツールバーのツールチップのテキストをセット */
CMemory** ppcAssignedKeyList;
int nAssignedKeyNum;
int j;
char* pszKey;
char szLabel[1024];
// From Here Oct. 15, 2001 genta
// 機能文字列の取得にLookupを使うように変更
if( !m_cEditDoc.m_cFuncLookup.Funccode2Name( lptip->hdr.idFrom, szLabel, 1024 )){
szLabel[0] = '\0';
}
// To Here Oct. 15, 2001 genta
/* 機能に対応するキー名の取得(複数) */
nAssignedKeyNum = CKeyBind::GetKeyStrList(
m_hInstance, m_pShareData->m_nKeyNameArrNum,
(KEYDATA*)m_pShareData->m_pKeyNameArr, &ppcAssignedKeyList, lptip->hdr.idFrom
);
if( 0 < nAssignedKeyNum ){
for( j = 0; j < nAssignedKeyNum; ++j ){
strcat( szLabel, "\n " );
pszKey = ppcAssignedKeyList[j]->GetPtr();
strcat( szLabel, pszKey );
delete ppcAssignedKeyList[j];
}
delete [] ppcAssignedKeyList;
}
lptip->hinst = NULL;
lptip->lpszText = szLabel;
}
break;
case TBN_DROPDOWN:
{
int nId;
nId = CreateFileDropDownMenu( pnmh->hwndFrom );
if( nId != 0 ) OnCommand( (WORD)0 /*メニュー*/, (WORD)nId, (HWND)0 );
}
return FALSE;
// From Here Jul. 21, 2003 genta
case NM_CUSTOMDRAW:
if( pnmh->hwndFrom == m_hwndToolBar ){
// ツールバーのOwner Draw
return ToolBarOwnerDraw( (LPNMCUSTOMDRAW)pnmh );
}
break;
// To Here Jul. 21, 2003 genta
}
return 0L;
case WM_COMMAND:
OnCommand( HIWORD(wParam), LOWORD(wParam), (HWND) lParam );
return 0L;
case WM_INITMENUPOPUP:
InitMenu( (HMENU)wParam, (UINT)LOWORD( lParam ), (BOOL)HIWORD( lParam ) );
return 0L;
case WM_DROPFILES:
/* ファイルがドロップされた */
OnDropFiles( (HDROP) wParam );
return 0L;
case WM_QUERYENDSESSION:
if( OnClose() ){
DestroyWindow( hwnd );
return TRUE;
}else{
return FALSE;
}
case WM_CLOSE:
if( OnClose() ){
DestroyWindow( hwnd );
}
return 0L;
case WM_DESTROY:
if( m_pShareData->m_bRecordingKeyMacro ){ /* キーボードマクロの記録中 */
if( m_pShareData->m_hwndRecordingKeyMacro == m_hWnd ){ /* キーボードマクロを記録中のウィンドウ */
m_pShareData->m_bRecordingKeyMacro = FALSE; /* キーボードマクロの記録中 */
m_pShareData->m_hwndRecordingKeyMacro = NULL; /* キーボードマクロを記録中のウィンドウ */
}
}
/* タイマーを削除 */
::KillTimer( m_hWnd, IDT_TOOLBAR );
/* ドロップされたファイルを受け入れるのを解除 */
::DragAcceptFiles( hwnd, FALSE );
/* 編集ウィンドウリストからの削除 */
CShareData::getInstance()->DeleteEditWndList( m_hWnd );
if( m_pShareData->m_hwndDebug == m_hWnd ){
m_pShareData->m_hwndDebug = NULL;
}
m_hWnd = NULL;
/* 編集ウィンドウオブジェクトからのオブジェクト削除要求 */
::PostMessage( m_pShareData->m_hwndTray, MYWM_DELETE_ME, 0, 0 );
/* Windows にスレッドの終了を要求します */
::PostQuitMessage( 0 );
return 0L;
case MYWM_CLOSE:
/* エディタへの全終了要求 */
if( FALSE != ( nRet = OnClose()) ){ // Jan. 23, 2002 genta 警告抑制
DestroyWindow( hwnd );
}
return nRet;
case MYWM_GETFILEINFO:
/* トレイからエディタへの編集ファイル名要求通知 */
pfi = (FileInfo*)&m_pShareData->m_FileInfo_MYWM_GETFILEINFO;
/* 編集ファイル情報を格納 */
m_cEditDoc.SetFileInfo( pfi );
return 0L;
case MYWM_CHANGESETTING:
/* 設定変更の通知 */
// Oct 10, 2000 ao
/* 設定変更時、ツールバーを再作成するようにする */
if( NULL != m_hwndToolBar ){
DestroyToolBar();
CreateToolBar();
}
// Oct 10, 2000 ao ここまで
if( NULL != m_CFuncKeyWnd.m_hWnd ){
BOOL bSizeBox;
if( m_pShareData->m_Common.m_nFUNCKEYWND_Place == 0 ){ /* ファンクションキー表示位置/0:上 1:下 */
/* サイズボックスの表示/非表示切り替え */
bSizeBox = FALSE;
}else{
bSizeBox = TRUE;
/* ステータスパーを表示している場合はサイズボックスを表示しない */
if( NULL != m_hwndStatusBar ){
bSizeBox = FALSE;
}
}
m_CFuncKeyWnd.SizeBox_ONOFF( bSizeBox );
}
// Aug, 21, 2000 genta
m_cEditDoc.ReloadAutoSaveParam();
//1999.09.03 なーんかうまく動かんので、やめた。運用でカバーしてほしい。
//
//ファンクションキー窓位置変更したとき、サイズボックスの位置を変更
// m_cEditDoc.m_cSplitterWnd.DoSplit( -1, -1);
//ファンクションキー窓位置変更したとき、ファンクションキー窓位置変更
// ::GetWindowRect( hwnd, &rc );
// ::SetWindowPos( hwnd, 0, 0, 0, rc.right - rc.left, rc.bottom - rc.top + 1, SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER );
// ::SetWindowPos( hwnd, 0, 0, 0, rc.right - rc.left, rc.bottom - rc.top, SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER );
m_cEditDoc.SetDocumentIcon(); // Sep. 10, 2002 genta 文書アイコンの再設定
m_cEditDoc.OnChangeSetting(); /* ビューに設定変更を反映させる */
return 0L;
case MYWM_SETACTIVEPANE:
if( -1 == (int)wParam ){
if( 0 == lParam ){
nPane = m_cEditDoc.m_cSplitterWnd.GetFirstPane();
}else{
nPane = m_cEditDoc.m_cSplitterWnd.GetLastPane();
}
}
m_cEditDoc.SetActivePane( nPane );
return 0L;
case MYWM_SETCARETPOS: /* カーソル位置変更通知 */
ppoCaret = (POINT*)m_pShareData->m_szWork;
/* 範囲选择中か */
if( m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].IsTextSelected() ){ /* テキストが选择されているか */
/* 現在の选择範囲を非选择状態に戻す */
m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].DisableSelectArea( TRUE );
}
/*
カーソル位置変換
物理位置(行頭からのバイト数、折り返し無し行位置)
→
レイアウト位置(行頭からの表示桁位置、折り返しあり行位置)
*/
m_cEditDoc.m_cLayoutMgr.CaretPos_Phys2Log(
ppoCaret->x,
ppoCaret->y,
&nCaretPosX,
&nCaretPosY
);
/* カーソル移動 */
if( nCaretPosY >= m_cEditDoc.m_cLayoutMgr.GetLineCount() ){
/*ファイルの最後に移動 */
m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].HandleCommand( F_GOFILEEND, FALSE, 0, 0, 0, 0 );
}else{
m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].MoveCursor( nCaretPosX, nCaretPosY, TRUE, _CARETMARGINRATE / 3 );
m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].m_nCaretPosX_Prev =
m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].m_nCaretPosX;
}
return 0L;
case MYWM_GETCARETPOS: /* カーソル位置取得要求 */
ppoCaret = (POINT*)m_pShareData->m_szWork;
/*
カーソル位置変換
レイアウト位置(行頭からの表示桁位置、折り返しあり行位置)
→
物理位置(行頭からのバイト数、折り返し無し行位置)
*/
m_cEditDoc.m_cLayoutMgr.CaretPos_Log2Phys(
m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].m_nCaretPosX,
m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].m_nCaretPosY,
(int*)&ppoCaret->x,
(int*)&ppoCaret->y
);
return 0L;
case MYWM_GETLINEDATA: /* 行(改行単位)データの要求 */
pLine = m_cEditDoc.m_cDocLineMgr.GetLineStr( (int)wParam, &nLineLen );
if( NULL == pLine ){
return 0;
}
if( nLineLen > sizeof( m_pShareData->m_szWork ) ){
memcpy( m_pShareData->m_szWork, pLine, sizeof( m_pShareData->m_szWork ) );
}else{
memcpy( m_pShareData->m_szWork, pLine, nLineLen );
}
return nLineLen;
case MYWM_ADDSTRING:
// MYTRACE( "MYWM_ADDSTRING[%s]\n", m_pShareData->m_szWork );
m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].HandleCommand( F_ADDTAIL, TRUE, (LPARAM)m_pShareData->m_szWork, (LPARAM)lstrlen( m_pShareData->m_szWork ), 0, 0 );
m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].HandleCommand( F_GOFILEEND, TRUE, 0, 0, 0, 0 );
return 0L;
// 2004/06/21 novice タグジャンプ機能追加
#if 0
case MYWM_SETREFERER:
ppoCaret = (POINT*)m_pShareData->m_szWork;
m_cEditDoc.SetReferer( (HWND)wParam, ppoCaret->x, ppoCaret->y );
return 0L;
#endif
//タブウインドウ //@@@ 2003.05.31 MIK
case MYWM_TAB_WINDOW_NOTIFY:
m_cTabWnd.TabWindowNotify( wParam, lParam );
return 0L;
/* 無限ループになるので削除
//バーの表示?非表示 //@@@ 2003.06.10 MIK
case MYWM_BAR_CHANGE_NOTIFY:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -