user-0 提问: 文本编辑器问题（新手）---windows程序设计（第六章）TYPER程序

回复:
user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:问题1：在WM_CHAR:中  这3个事件中 的 case '\n':                    // line feed if (++yCaret == cyBuffer)     //★line feed的意思就是将光标位置往下挪一行，对应++yCaret,但如果已经挪到最下面一行的话yCaret == cyBuffer,就挪到最上面一行     yCaret = 0 ;                                              // if 语句  有什么作用 break ;  case '\r':                    // carriage return xCaret = 0 ;                  // 为什么还是对这 xCaret   yCaret    赋值0？★carriage return的意思就是将光标挪到最左边  if (++yCaret == cyBuffer)     //★这里是让'\r'完成和'\r\n'一样的功能     yCaret = 0 ; break ;  case '\x1B':                  // escape for (y = 0 ; y < cyBuffer ; y++)     for (x = 0 ; x < cxBuffer ; x++)         BUFFER (x, y) = ' ' ; //这个FOR语句    为什么要这样写★escape的功能是将光标挪到最左上角，并将以前输入的字符全部擦除  xCaret = 0 ; yCaret = 0;                     //为什么  要对这2个变量设置为0？  InvalidateRect (hwnd, NULL, FALSE) ; break ;     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 问题2：  case WM_KEYDOWN: case WM_CHAR:  为什么都要用SetCaretPos();  //★因为这两种消息都可能会改变当前光标所在位置。 获益良多

user: user-1
content: 问题1：在WM_CHAR:中  这3个事件中 的 case '\n':                    // line feed if (++yCaret == cyBuffer)     //★line feed的意思就是将光标位置往下挪一行，对应++yCaret,但如果已经挪到最下面一行的话yCaret == cyBuffer,就挪到最上面一行     yCaret = 0 ;                                              // if 语句  有什么作用 break ;  case '\r':                    // carriage return xCaret = 0 ;                  // 为什么还是对这 xCaret   yCaret    赋值0？★carriage return的意思就是将光标挪到最左边  if (++yCaret == cyBuffer)     //★这里是让'\r'完成和'\r\n'一样的功能     yCaret = 0 ; break ;  case '\x1B':                  // escape for (y = 0 ; y < cyBuffer ; y++)     for (x = 0 ; x < cxBuffer ; x++)         BUFFER (x, y) = ' ' ; //这个FOR语句    为什么要这样写★escape的功能是将光标挪到最左上角，并将以前输入的字符全部擦除  xCaret = 0 ; yCaret = 0;                     //为什么  要对这2个变量设置为0？  InvalidateRect (hwnd, NULL, FALSE) ; break ;     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 问题2：  case WM_KEYDOWN: case WM_CHAR:  为什么都要用SetCaretPos();  //★因为这两种消息都可能会改变当前光标所在位置。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:都是将编辑光标所在位置挪到最左边。 能详细点吗

user: user-1
content: 都是将编辑光标所在位置挪到最左边。

user: user-0
content: 问题1：在WM_CHAR:中    这3个事件中 的  case '\n':                    // line feed                     if (++yCaret == cyBuffer)                          yCaret = 0 ;     // if 语句  有什么作用                     break ;                                      case '\r':                    // carriage return                          xCaret = 0 ;                          [color=#0000FF]// 为什么还是对这 xCaret   yCaret    赋值0？                                                if (++yCaret == cyBuffer)                          yCaret = 0 ;[/color]                     break ;                                      case '\x1B':                  // escape                     for (y = 0 ; y < cyBuffer ; y++)                          for (x = 0 ; x < cxBuffer ; x++)                               BUFFER (x, y) = ' ' ;                                       [color=#0000FF] //这个FOR语句    为什么要这样写                                                xCaret = 0 ;                     yCaret = 0;                     //为什么  要对这2个变量设置为0？                                                InvalidateRect (hwnd, NULL, FALSE) ;                     break ;[/color]     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 问题2： case WM_KEYDOWN: case WM_CHAR:  为什么都要用SetCaretPos();