There are some differences between ncurses and the behavior of older curses implementations that are undocumented. These arise from ambiguities or omissions in the application programming interface (API) documentation. This topic discusses some of these differences.
Note that the mouse interfacing features found in the ncurses source are not enabled for Interix.
If you define two overlapping windows, A and B, and then alternately scribble on and refresh them, you might find that changes made to the overlapping region under historic curses versions are not precisely documented. This is a problem because screen updates are calculated between two representations of the entire display. The documentation says that when you refresh a window, it is first copied to the virtual screen, and changes are then calculated to update the physical screen (and are applied to the terminal). But "copied to" is not very specific. As a result, subtle differences in how copying works can produce different behaviors if two overlapping windows are each being refreshed at unpredictable intervals.
What happens to the overlapping region depends on what wnoutrefresh() does with its argument; that is, which portions of the argument window it copies to the virtual screen. Some implementations perform a "change copy," copying down only locations in the window that have changed (or have been marked changed with wtouchln() or related functions). Some implementations perform an "entire copy," copying all window locations to the virtual screen, whether or not they have changed.
The ncurses library has not always been consistent in this regard. Due to a bug, versions 1.8.7 to 1.9.8a perform an "entire copy." Versions 1.8.6 and older, and versions 1.9.9 and newer, perform a "change copy."
For most commercial curses implementations, it is not documented and not certain (at least not to the those who maintain ncurses) whether they do a "change copy" or an "entire copy." System V release 3 curses contains logic that appears to be an attempt to do "change copy," but the surrounding logic and data representations are sufficiently complex that it is hard to determine whether this is reliable.
It is not clear what the System V release 4 documentation and the XSI standard intend. The XSI curses standard mentions wnoutrefresh() only briefly; the System V release 4 documents seem to be describing "entire copy," but it is possible to read them differently.
It can be unwise, therefore, to rely on either behavior in programs that might have to be linked with other curses implementations. Instead, you can do an explicit touchwin() before the wnoutrefresh() call to guarantee an entire-contents copy anywhere.
The best way to handle this is to use the panels library. If, when you want a screen update, you do update_panels(), it will do all the necessary wnoutrfresh() calls for the panel-stacking order you have defined. You can then preform one doupdate(), and a single burst of physical input/output (I/O) will then do all your updates.
The ncurses library is intended to be base-level conformant with the XSI curses standard from X/Open. Many extended-level features (almost all features not directly concerned with wide characters and internationalization) are also supported.
Erased areas of a window are filled with a blank with the normal attribute, unless and until they are modified by the functions bkgdset() or wbkgdset().
In addition, ncurses meets the XSI requirement that every macro entry point have a corresponding function that can be linked (and will be prototype-checked) if the macro definition is disabled with #undef.