for (i = 0 ; i < (int) LOWORD (lParam) ; i++)
        //我删掉上一句程序还能运行,那他到底起到了什么作用呢?答:循环作用SendMessage (hwnd, WM_CHAR, ' ', 1) ;
                        //发送消息自身什么意思
问:什么?不明白题目,呵呵while (xCaret % 8 != 0) ;//这句话不明白答:大概写错了应该是while(xCaret++ % 8 != 0) ; 吧如果xCaret除以8除不净就做空操作并将xCaret 加 1。

解决方案 »

  1.   

    WM_CHAR理论上可能一次包含一个字符的多个重复,重复次数就在LPARAM中,所以for就是重复处理这些重复的字符。但是由于现在机器太快了,所以一般WM_CHAR中只包括一个字符。所以你去掉了也没有问题(只处理一次)。找台386说不定就能看出差别。
      

  2.   

    将tab转换为空格。空格的个数为当前的位置道下一个8的倍数的位置之间的差。
      

  3.   

    for (i = 0 ; i < (int) LOWORD (lParam) ; i++)
    是循环,可是也不应该去掉以后不影响效果吧
    SendMessage (hwnd, WM_CHAR, ' ', 1) ;
    如何实现TAB的功能的,看不懂啊?
    while (xCaret % 8 != 0) ;
    应该没有错误,因为程序运行很正常
      

  4.   

    for是循环,去掉后就是不循环,就是只执行一次,就是循环了一次。所以当只执行一次时有没有for没有区别。你再看不懂我都要胡涂了。
    SendMessage(hwnd, WM_CHAR, ' ', 1)就时告诉自己输入了一个空格。如果一开始插入点在一行的开头,(xCaret = 1),就循环8次,就是告诉自己输入了8个空格。如果在中间,就输入少一点的空格。这样就相当于输入了一个tab
      

  5.   

    1。因为按一下键,lParam为1,所以for语句加不加无所谓,但是如果你按住键不放,lParam就不等于1了,这时候有没有for语句就不一样了。2。do
    {
           SendMessage (hwnd, WM_CHAR, ' ', 1) ;
           //发送一个空格
    }
        while (xCaret % 8 != 0) ;//如果xCaret除以8除不净,就执行do部分,执行了之后xCaret会加1。