画面の高さを3ライン以下にした時に、カーソルが上にはみ出す問題の修正です。
コメントも追加しました。左右キーにも対応しています。
--- コピー ~ CEditView.cpp Sun May 30 02:23:20 2004
+++ CEditView.cpp Sun Aug 08 01:23:50 2004
@@ -2697,23 +2697,30 @@
m_nViewLeftCol -= nScrollColNum;
- /* 垂直スクロール量(行数)の算出 */
+ /* 垂直スクロール量(行数)の算出 */ // 移動先は、画面の最大行数-2より下か?(下スクロール)
+ if( nWk_CaretPosY >= m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY + 2 ) ){
+/* if( nWk_CaretPosY > m_pcEditDoc->m_cLayoutMgr.GetLineCount() - ( nCaretMarginY + 2 ) ){
+ * if( m_pcEditDoc->m_cLayoutMgr.GetLineCount() + 2 > m_nViewRowNum ){
+ * nScrollRowNum = m_nViewTopLine - ( m_pcEditDoc->m_cLayoutMgr.GetLineCount() + 2 - m_nViewRowNum );
+ * }else{
+ * nScrollRowNum = 0;
+ * }
+ * }else{ */
+ if( m_nViewRowNum <= nCaretMarginY + 2 ){
+ nScrollRowNum = m_nViewTopLine - nWk_CaretPosY;
+ }else{
+ nScrollRowNum =
+ m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY + 2 ) - nWk_CaretPosY;
+ }
+ }else // 移動先は、画面のスクロールラインより上か?(上スクロール)
if( nWk_CaretPosY < m_nViewTopLine + ( nCaretMarginY ) ){
- if( nWk_CaretPosY < ( nCaretMarginY ) ){
+ if( m_nViewRowNum == ( nCaretMarginY + 2 ) ){ // 画面が3行の時の処理を追加
+ nScrollRowNum = m_nViewTopLine - nWk_CaretPosY;
+ }else
+ if( nWk_CaretPosY <= ( nCaretMarginY ) ){
nScrollRowNum = m_nViewTopLine;
}else{
nScrollRowNum = m_nViewTopLine + ( nCaretMarginY ) - nWk_CaretPosY;
}
- }else
- if( nWk_CaretPosY >= m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY + 2 ) ){
- if( nWk_CaretPosY > m_pcEditDoc->m_cLayoutMgr.GetLineCount() - ( nCaretMarginY + 2 ) ){
- if( m_pcEditDoc->m_cLayoutMgr.GetLineCount() + 2 > m_nViewRowNum ){
- nScrollRowNum = m_nViewTopLine - ( m_pcEditDoc->m_cLayoutMgr.GetLineCount() + 2 - m_nViewRowNum );
- }else{
- nScrollRowNum = 0;
- }
- }else{
- nScrollRowNum =
- m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY ) - ( nWk_CaretPosY + 2 );
- }
+
}
if( bDraw ){
以上[修正しました]