📄 ceditview_command.cpp
字号:
::PostMessage( ::GetParent( m_hwndParent ), WM_COMMAND, MAKELONG( nFuncID, 0 ), (LPARAM)NULL );
}
break;
/* ウィンドウ系 */
case F_SPLIT_V: Command_SPLIT_V();break; /* 上下に分割 */ //Sept. 17, 2000 jepro 説明の「縦」を「上下に」に変更
case F_SPLIT_H: Command_SPLIT_H();break; /* 左右に分割 */ //Sept. 17, 2000 jepro 説明の「横」を「左右に」に変更
case F_SPLIT_VH: Command_SPLIT_VH();break; /* 縦横に分割 */ //Sept. 17, 2000 jepro 説明に「に」を追加
case F_WINCLOSE: Command_WINCLOSE();break; //ウィンドウを閉じる
case F_WIN_CLOSEALL: /* すべてのウィンドウを閉じる */ //Oct. 7, 2000 jepro 「編集ウィンドウの全終了」を左記のように変更
//Oct. 17, 2000 JEPRO 名前を変更(F_FILECLOSEALL→F_WIN_CLOSEALL)
/* 再帰処理対策 */
if( NULL != m_pcOpeBlk ){ /* 操作ブロック */
delete m_pcOpeBlk;
m_pcOpeBlk = NULL;
}
Command_FILECLOSEALL();
break;
case F_BIND_WINDOW: Command_BIND_WINDOW();break; //結合して表示 2004.07.14 Kazika 新規追加
case F_CASCADE: Command_CASCADE();break; //重ねて表示
case F_TILE_V: Command_TILE_V();break; //上下に並べて表示
case F_TILE_H: Command_TILE_H();break; //左右に並べて表示
case F_MAXIMIZE_V: Command_MAXIMIZE_V();break; //縦方向に最大化
case F_MAXIMIZE_H: Command_MAXIMIZE_H();break; //横方向に最大化 //2001.02.10 by MIK
case F_MINIMIZE_ALL: Command_MINIMIZE_ALL();break; /* すべて最小化 */ // Sept. 17, 2000 jepro 説明の「全て」を「すべて」に統一
case F_REDRAW: Command_REDRAW();break; /* 再描画 */
case F_WIN_OUTPUT: Command_WIN_OUTPUT();break; //アウトプットウィンドウ表示
case F_TOPMOST: Command_WINTOPMOST( lparam1 );break; //常に手前に表示 Moca
/* 支援 */
case F_HOKAN: Command_HOKAN();break; //入力補完
case F_HELP_CONTENTS: Command_HELP_CONTENTS();break; /* ヘルプ目次 */ //Nov. 25, 2000 JEPRO 追加
case F_HELP_SEARCH: Command_HELP_SEARCH();break; /* ヘルプトキーワード検索 */ //Nov. 25, 2000 JEPRO 追加
case F_MENU_ALLFUNC: /* コマンド一覧 */
/* 再帰処理対策 */
if( NULL != m_pcOpeBlk ){ /* 操作ブロック */
delete m_pcOpeBlk;
m_pcOpeBlk = NULL;
}
Command_MENU_ALLFUNC();break;
case F_EXTHELP1: Command_EXTHELP1();break; /* 外部ヘルプ1 */
case F_EXTHTMLHELP: /* 外部HTMLヘルプ */
// Jul. 5, 2002 genta
Command_EXTHTMLHELP( (const char*)lparam1, (const char*)lparam2 ); break;
case F_ABOUT: Command_ABOUT();break; /* バージョン情報 */ //Dec. 24, 2000 JEPRO 追加
/* その他 */
// case F_SENDMAIL: Command_SENDMAIL();break; /* メール送信 */
}
/* アンドゥバッファの処理 */
if( NULL != m_pcOpeBlk ){
if( 0 < m_pcOpeBlk->GetNum() ){ /* 操作の数を返す */
/* 操作の追加 */
m_pcEditDoc->m_cOpeBuf.AppendOpeBlk( m_pcOpeBlk );
m_pcEditDoc->RedrawInactivePane(); // 他のペインの表示
#if 0
// 2001/06/21 Start by asa-o: 他のペインの表示状態を更新
m_pcEditDoc->m_cEditViewArr[m_nMyIndex^1].Redraw();
m_pcEditDoc->m_cEditViewArr[m_nMyIndex^2].Redraw();
m_pcEditDoc->m_cEditViewArr[(m_nMyIndex^1)^2].Redraw();
DrawCaretPosInfo();
// 2001/06/21 End
#endif
}else{
delete m_pcOpeBlk;
}
m_pcOpeBlk = NULL;
}
return bRet;
}
/////////////////////////////////// 以下はコマンド群 (Oct. 17, 2000 jepro note) ///////////////////////////////////////////
/*! カーソル上移動 */
int CEditView::Command_UP( int bSelect, BOOL bRepeat, int lines )
{
// From Here Oct. 24, 2001 genta
if( lines != 0 ){
Cursor_UPDOWN( lines, FALSE );
return 1;
}
// To Here Oct. 24, 2001 genta
int i;
int nRepeat;
nRepeat = 0;
//m_pShareData->m_Common.m_nRepeatedScrollLineNum; /* キーリピート時のスクロール行数 */
//m_pShareData->m_Common.m_nRepeatedScroll_Smooth; /* キーリピート時のスクロールを滑らかにするか */
/* キーリピート時のスクロールを滑らかにするか */
if( !m_pShareData->m_Common.m_nRepeatedScroll_Smooth ){
if( !bRepeat ){
i = -1;
}else{
i = -1 * m_pShareData->m_Common.m_nRepeatedScrollLineNum; /* キーリピート時のスクロール行数 */
}
Cursor_UPDOWN( i, bSelect );
nRepeat = -1 * i;
}else{
++nRepeat;
if( Cursor_UPDOWN( -1, bSelect ) && bRepeat ){
for( i = 0; i < m_pShareData->m_Common.m_nRepeatedScrollLineNum - 1; ++i ){ /* キーリピート時のスクロール行数 */
::UpdateWindow( m_hWnd ); // YAZAKI
Cursor_UPDOWN( -1, bSelect );
++nRepeat;
}
}
}
return nRepeat;
}
/* カーソル下移動 */
int CEditView::Command_DOWN( int bSelect, BOOL bRepeat )
{
int i;
int nRepeat;
nRepeat = 0;
/* キーリピート時のスクロールを滑らかにするか */
if( !m_pShareData->m_Common.m_nRepeatedScroll_Smooth ){
if( !bRepeat ){
i = 1;
}else{
i = m_pShareData->m_Common.m_nRepeatedScrollLineNum; /* キーリピート時のスクロール行数 */
}
Cursor_UPDOWN( i, bSelect );
nRepeat = i;
}else{
++nRepeat;
if( Cursor_UPDOWN( 1, bSelect ) && bRepeat ){
for( i = 0; i < m_pShareData->m_Common.m_nRepeatedScrollLineNum - 1; ++i ){ /* キーリピート時のスクロール行数 */
// ここで再描画。
::UpdateWindow( m_hWnd ); // YAZAKI
Cursor_UPDOWN( 1, bSelect );
++nRepeat;
}
}
}
return nRepeat;
}
/*! @brief カーソル左移動
@date 2004.03.28 Moca EOFだけの行以降の途中にカーソルがあると落ちるバグ修正.
pcLayout == NULLかつキャレット位置が行頭以外の場合は
2つのifのどちらにも当てはまらないが,そのあとのMoveCursorにて適正な
位置に移動させられる.
*/
int CEditView::Command_LEFT( int bSelect, BOOL bRepeat )
{
int nRepCount;
int nRepeat;
int nRes;
if( bRepeat ){
nRepeat = 2;
}else{
nRepeat = 1;
}
for( nRepCount = 0; nRepCount < nRepeat; ++nRepCount ){
int nPosX = 0;
int nPosY = m_nCaretPosY;
RECT rcSel;
const CLayout* pcLayout;
if( bSelect ){
if( !IsTextSelected() ){ /* テキストが選択されているか */
/* 現在のカーソル位置から選択を開始する */
BeginSelectArea();
}
}else{
if( IsTextSelected() ){ /* テキストが選択されているか */
/* 矩形範囲選択中か */
if( m_bBeginBoxSelect ){
/* 2点を対角とする矩形を求める */
TwoPointToRect(
&rcSel,
m_nSelectLineFrom, /* 範囲選択開始行 */
m_nSelectColmFrom, /* 範囲選択開始桁 */
m_nSelectLineTo, /* 範囲選択終了行 */
m_nSelectColmTo /* 範囲選択終了桁 */
);
/* 現在の選択範囲を非選択状態に戻す */
DisableSelectArea( TRUE );
/* カーソルを選択開始位置に移動 */
MoveCursor( rcSel.left, rcSel.top, TRUE );
m_nCaretPosX_Prev = m_nCaretPosX;
}else{
nPosX = m_nSelectColmFrom;
nPosY = m_nSelectLineFrom;
/* 現在の選択範囲を非選択状態に戻す */
DisableSelectArea( TRUE );
/* カーソルを選択開始位置に移動 */
MoveCursor( nPosX, nPosY, TRUE );
m_nCaretPosX_Prev = m_nCaretPosX;
}
nRes = 1;
goto end_of_func;
}
}
/* 現在行のデータを取得 */
pcLayout = m_pcEditDoc->m_cLayoutMgr.Search( m_nCaretPosY );
/* カーソルが左端にある */
if( m_nCaretPosX == (pcLayout ? pcLayout->GetIndent() : 0)){
if( m_nCaretPosY > 0 ){
pcLayout = m_pcEditDoc->m_cLayoutMgr.Search( m_nCaretPosY - 1 );
CMemoryIterator<CLayout> it( pcLayout, m_pcEditDoc->m_cLayoutMgr.GetTabSpace() );
while( !it.end() ){
it.scanNext();
if ( it.getIndex() + it.getIndexDelta() > pcLayout->GetLengthWithoutEOL() ){
nPosX += it.getColumnDelta();
break;
}
it.addDelta();
}
nPosX += it.getColumn() - it.getColumnDelta();
nPosY --;
}else{
nRes = 0;
goto end_of_func;
}
}
// 2004.03.28 Moca EOFだけの行以降の途中にカーソルがあると落ちるバグ修正
else if( pcLayout ){
CMemoryIterator<CLayout> it( pcLayout, m_pcEditDoc->m_cLayoutMgr.GetTabSpace() );
while( !it.end() ){
it.scanNext();
if ( it.getColumn() + it.getColumnDelta() > m_nCaretPosX - 1 ){
nPosX += it.getColumnDelta();
break;
}
it.addDelta();
}
nPosX += it.getColumn() - it.getColumnDelta();
// Oct. 18, 2002 YAZAKI
if( it.getIndex() >= pcLayout->GetLengthWithEOL() ){
nPosX = m_nCaretPosX - 1;
}
}
MoveCursor( nPosX, nPosY, TRUE );
m_nCaretPosX_Prev = m_nCaretPosX;
if( bSelect ){
/* 現在のカーソル位置によって選択範囲を変更.
2004.04.02 Moca
キャレット位置が不正だった場合にMoveCursorの移動結果が
引数で与えた座標とは異なることがあるため,
nPosX, nPosYの代わりに実際の移動結果を使うように.
*/
ChangeSelectAreaByCurrentCursor( m_nCaretPosX, m_nCaretPosY );
}
nRes = 1;
goto end_of_func;
end_of_func:;
}
return nRes;
}
/* カーソル右移動 */
void CEditView::Command_RIGHT( int bSelect, int bIgnoreCurrentSelection, BOOL bRepeat )
{
int nRepCount;
int nRepeat;
if( bRepeat ){
nRepeat = 2;
}else{
nRepeat = 1;
}
for( nRepCount = 0; nRepCount < nRepeat; ++nRepCount ){
int nPosX;
int nPosY = m_nCaretPosY;
RECT rcSel;
const CLayout* pcLayout;
// 2003.06.28 Moca [EOF]のみの行にカーソルがあるときに右を押しても選択を解除できない問題に
// 対応するため、現在行のデータを取得を移動
if( !bIgnoreCurrentSelection ){
if( bSelect ){
if( !IsTextSelected() ){ /* テキストが選択されているか */
/* 現在のカーソル位置から選択を開始する */
BeginSelectArea();
}
}else{
if( IsTextSelected() ){ /* テキストが選択されているか */
/* 矩形範囲選択中か */
if( m_bBeginBoxSelect ){
/* 2点を対角とする矩形を求める */
TwoPointToRect(
&rcSel,
m_nSelectLineFrom, /* 範囲選択開始行 */
m_nSelectColmFrom, /* 範囲選択開始桁 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -