Setting _settextcolor() to Zero Gives Unexpected Results

Last reviewed: July 17, 1997
Article ID: Q68865
5.10 6.00 6.00a 6.00ax 7.00 | 1.00
MS-DOS                      | WINDOWS
kbprg

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/C++ for MS-DOS, version 7.0
        - Microsoft Visual C/C++ for Windows, version 1.0
    

SUMMARY

When in a graphics mode, using the function _settextcolor(), _setcolor(), or outgtext() with an argument of "0" to select black does not work as expected. For example, the code below sets the background color to _WHITE, sets the text color to 0 (Black), and tries to print text to the screen.

In this example, the resultant foreground and background colors are the same. Remember that _setbkcolor() sets the color for index 0. When _settextcolor() is called with the same index, nothing will seem to appear because the _setbkcolor() function resets color index 0 to the new color. When _settextcolor() is called with index 0, the foreground and background colors are the same, and therefore, nothing appears on the screen.

To work around the problem, just call _remappallette() to move the desired color off index 0. The comments in the following code illustrate this:

Sample Code

#include <stdio.h>
#include <conio.h>
#include <graph.h>

void main()
{
   _setvideomode(_MAXRESMODE);

   // _remappalette(1,0);    // Uncomment for the workaround.

   _setbkcolor(_WHITE);

   _settextcolor(0);

   // _settextcolor(1);      // Uncomment for the workaround.
   _outtext("mystring");
   getch();

   _setvideomode(_DEFAULTMODE);
}


Additional reference words: kbinf 5.10 6.00 6.00a 6.00ax 7.00 1.00
KBCategory: kbprg
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.