_wrapon() Prevents Text Mode Text Window from Scrolling

Last reviewed: July 17, 1997
Article ID: Q66774
5.10 6.00 6.00a 6.00ax 7.00 | 6.00 6.00a | 1.00
MS-DOS                      | OS/2       | WINDOWS
kbprg kbcode

The information in this article applies to:

  • The C Run-time (CRT), included with:

        - Microsoft C for MS-DOS, versions 5.1, 6.0, 6.0a, and 6.0ax
        - Microsoft C for OS/2, versions 6.0, and 6.0a
        - Microsoft C/C++ for MS-DOS, version 7.0
        - Microsoft Visual C++ for Windows, version 1.0
    

SUMMARY

In an application developed with Microsoft C that uses text mode, a text window filled with characters scrolls when the user places a character into the last position in the lower-right corner of the window. To prevent the window from scrolling in this situation, use the _wrapon() function.

MORE INFORMATION

Functions that display text, such as _outtext(), are designed with the assumption that the current cursor position is one character beyond the last output position. Therefore, when the cursor is on, it blinks just beyond the most recently displayed character.

When the application enables text wrap and writes a character to the last position in a line, the cursor blinks in the first position of the next line. On the last line of a window in text mode, this behavior causes the window to scroll. In graphics mode, or when the application uses _outgtext(), this does not occur.

To work around this behavior, use the _wrapon() function to turn off text wrap when the application draws the final character in the window. The _wrapon() function accepts either of two wrap conditions: _GWRAPOFF or _GRAPON.

The code example below demonstrates this condition and addressing it with the _wrapon() function.

Sample Code

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <graph.h>
#include <conio.h>
#include <string.h>

void main(void)
{
   int i, response;
   char ch[11];

   _clearscreen(_GCLEARSCREEN);

   printf("\n\nDo you want text wrap on? (y/n)");
   response = getch();
   if (_toupper(response) == 'Y')
      _wrapon(_GWRAPON);
   else
      _wrapon(_GWRAPOFF);

   // Label screen grid for easy reference

   _clearscreen(_GCLEARSCREEN);
   _outtext("123456789");
   for (i = 2; i <= 9; i++)
   {
      _settextposition(i, 1);
      _outtext(itoa(i, ch, 10));
   }

   // Set a text window and fill all but last line

   _settextwindow(3, 3, 9, 9);
   for (i = 1; i <= 6; i++)
   {
      _settextposition(i, 1);
      memset(ch, i + '0', 10);
      _outmem(ch, 7);
   }

   // Fill last line, all but last character

   _settextposition(i, 1);
   memset(ch, i + '0', 10);
   _outmem(ch, 6);
   getch();

   // Fill last character in window -- the entire window will scroll
   //   if text wrap was specified

   _outmem(ch, 1);
   getch();
   _clearscreen(_GCLEARSCREEN);
}

Note: This sample program uses the _outmem() function, which is not available in the C version 5.1 or Microsoft QuickC version 2.0 run- time libraries. To build this program with either of these compilers, you must rewrite the code to remove the _outmem() function.


Additional reference words: kbinf 5.00 5.10 6.00 6.00a 6.00ax 7.00 1.00
KBCategory: kbprg kbcode
KBSubcategory: CRTIss GraphicsIss
Keywords : kb16bitonly


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: July 17, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.