TX Library Help – Version: 00173a, Revision: 165
 ALL  Windows graphics in a sandbox

TX Library Документация


Библиотека Тупого Художника (The Dumb Artist Library, TX Library, TXLib)

Version:
00173a, Revision: 166
Date:
2020-05-15 02:05:14 +0400
Copyright:
(C) Ded (Ilya Dedinsky, http://txlib.ru) <mail@txlib.ru>

Назначение

TX Library - компактная графическая библиотека для Win32 на С++. Это небольшая "песочница" для начинающих реализована с целью помочь им в изучении простейших принципов программирования. Документация на русском языке.

Философия TX Library - облегчить первые шаги в программировании и подтолкнуть к творчеству и самостоятельности.

TX Library is a tiny graphics library for Win32 written in C++. It is a small sandbox for the very beginners to help them to learn basic programming principles. The documentation is currently in Russian.


Разделы системы помощи

Примеры:

Представительство в Интернет

Официальный сайт библиотеки: txlib.ru.

См. также страницу проекта на SourceForge. Короткая ссылка на онлайн-документацию: gg.gg/TXLib.

Баг-трекер: Сообщить об ошибке

Аналогичный проект для Linux/MacOS: txlin.roveramd.com.

Предупреждения:
Это альфа-версия. Для использования библиотеки требуется согласование с ее автором.

Правила использования материалов библиотеки и сайта см. на официальном сайте TXLib.
Ссылки:

Скриншоты

Example03.png

Example03.cpp: Простейшая программа

  
Movie.png

Movie.cpp: Мультфильм

Shaker.png

Shaker.cpp: Простая физическая модель движения

  
Phong.jpg

Phong.cpp: Модель освещения сферы

Tree.png

Tree.cpp: Простая рекурсия: Дерево

  
Tennis.jpg

Tennis.cpp: Использование картинок


Предупреждение, или TXLib – это всего лишь инструмент

Библиотека TXLib – это всего лишь инструмент для того, чтобы облегчить первые шаги в программировании. Однако этот инструмент, как и любой другой, может быть применен неправильно. (Тем не менее, в основу TXLib заложены некоторые принципы, помогающие конструктивному неиллюзорному обучению.)

Сама по себе любая библиотека или язык программирования не научит начинающего писать программы грамотно. Научит этому разработка своих, достаточно больших проектов, в сочетании с тесным общением профессионалов, желающих помочь начинающим. Такие профессионалы должны обладать и опытом разработки больших программ, и педагогическими навыками, чтобы передать свой опыт начинающим. К сожалению, не всегда это совпадает. Профессионалы-программисты зачастую не хотят лезть в обучение, где хватает своих проблем. С другой стороны, недобросовестные учителя, иногда даже в сильных школах и курсах, хватаются за удобные инструменты обучения (чужие или свои библиотеки, среды и языки программирования), не удосуживаясь следить за качеством кода обучаемых, за стилем и направлением их мышления, ограничиваясь лишь видимостью обучения. Такие образовательные иллюзии очень вредны. Заметны они становятся достаточно поздно, когда выясняется, что ученик, легко пишущий небольшие программы (пусть даже логически насыщенные, олимпиадные), принципиально не способен написать что-то большее, путается в коде, а другие, в том числе и профессионалы, его не понимают в силу спутанности его мышления и неумения внятно выразить мысли на уровне современных стандартов. Чтобы преодолеть этот барьер, воздвигнутый нерадивым преподавателем (или вашей собственной нерадивостью), приходится серьезно и самостоятельно переучиваться – иногда будучи уже студентом или аспирантом. Либо смириться и "носить кофе программистам".

Искусство программирования – это искусство мышления, не надо это забывать, дорогие преподаватели и учащиеся.

Принципы, заложенные в TXLib для повышения качества обучения:
  • Сделай сам. В TXLib многие вещи сделаны или оставлены не совсем удобными для применения. Это – предложение подумать, как сделать это самому, и, как правило, для этого в TXLib есть средства. Сделав, покажите решение другим, если они быстро поймут его и оценят -- то ваше решение удачное.
  • Загляни в Help. (Слово неспроста выбрано английским, потому что большинство информации в современном программировании – на английском языке. Учите его.) Под системой помощи понимается не только TXLib Help, но и весь Internet.
  • Посмотри, как сделано. Загляни в код (см. "Исходные тексты"). Он создавался в том числе как пример программной системы со своей логикой и со своей реализацией, а некоторые функции можно понять только по коду, потому что их нет в системе помощи. Не всегда решения, примененные в TXLib оптимальны даже с точки зрения автора – он надеется, что это убережет желающих научиться качественно, но нетерпеливых учеников, от   Ctrl+C и Ctrl+V   плагиата.
  • Посмотри, как сделано иначе. TXLib – не единственная графическая библиотека, и реализация "простого графического холста", примененная в ней – не единственное решение. Посмотри, как устроены десятки других графических библиотек. Но избегай плохого кода (его можно определить по тому, как морщатся профессионалы, глядя на него, если у вас нет более объективных средств такого определения) – он научит вас плохому. Хороший, но сложный код (глядя на него, профессионалы не морщатся, а вздыхают) – отложи до времени и вернись к нему позже.
  • Выйди за пределы "песочницы". Это усиление принципа "сделай сам". Собери вместе свои мысли про хорошую библиотеку, посмотри, как устроен TXLib и его аналоги, сделай свою библиотеку, лучше TXLib'а. Это нетрудно. :) Примеры таких библиотек можно найти на сайте TXLib и в Интернете, и некоторые из них сделаны как раз начинающими.

Удачи, и May the Source be with you! :)


Установка библиотеки

Заметки:
Библиотека TXLib состоит из единственного файла и не требует никаких настроек в среде программирования, чтобы облегчить ее установку и работу для начинающих.
  1. Скачайте программу установки, загрузка по ссылке начнется автоматически. Ее имя имеет вид TXLib-v0173a.rar.exe. Цифры могут отличаться (это номер версии), расширение .exe может не отображаться, в зависимости от текущих настроек Windows.
  2. Запустите скачанную программу установки. Программа установки - это самораспаковывающийся архив, она не требует особых прав для запуска.
  3. На рабочем столе появится "Ярлык для TX". Откройте его и запустите систему помощи TXLib Help, изучите ее. Простейший пример см. <http://storage.ded32.net.ru/Lib/TX/TXUpdate/Doc/HTML.ru/a00001.htm> здесь. Другие примеры см. в папке Examples, в папке Examples/Demo.
  • Если при установке происходят ошибки или запуск программы установки невозможен, откройте файл библиотеки TXLib.h отсюда, сохраните (Ctrl+S) его в свою рабочую папку, где вы сохраняете свои программы. Пользуйтесь системой помощи онлайн.
  1. Для полной обработки ошибок библиотеке требуются модули, которые желательно установить (скопировать) в папку Windows. Устанавливать эти библиотеки не обязательно. Программы, использующие TXLib, будут запускаться и без них.
  1. Модули библиотеки Microsoft DBGHELP для доступа к отладочным символам Microsoft:
  • dbghelp32.dll для 32-разрядных программ (либо dbghelp.dll, 32-разрядная версия),
  • dbghelp64.dll для 64-разрядных программ (либо dbghelp.dll, 64-разрядная версия).
  1. Модули библиотеки DrMinGW для доступа к отладочным символам MinGW компилятора GCC g++:
  • mgwhelp32.dll для 32-разрядных программ (либо mgwhelp.dll, 32-разрядная версия),
  • mgwhelp64.dll для 64-разрядных программ (либо mgwhelp.dll, 64-разрядная версия).

Суффиксы 32 и 64 помогают отличить 32-разрядную и 64-разрядную версии DLL-файлов библиотек. Например, dbghelp32.dll - это просто переименованная 32-разрядная версия файла dbghelp.dll.

Самораспаковывающийся архив с этими библиотеками можно скачать здесь.

Для наиболее полной диагностики ошибок полностью отключайте оптимизацию при компиляции. Например, для компилятора GCC g++ - с помощью ключа командной строки -O0. Разные среды программирования позволяют задать эти ключи по-разному, например, в CodeBlocks через Главное меню - Settings - Compiler - (Global Compiler Settings) - (Compiler Settings) - Other Options.

Заметки:
Кодовая страница в редакторе среды разработки должна быть установлена как Windows CP1251, проверьте это. В разных средах разработки она устанавливается по-разному, например, в CodeBlocks через Главное меню - Settings - Editor - (General Settings) - Other Settings - Encoding. Иначе русские буквы в сообщениях TXLib будут отображаться неправильно.

Поддерживаемые платформы

  • Среды программирования и исполнения + компиляторы
    1. MinGW GCC 9.2.0 (NUWEN 64-bit, TDM-GCC 32-bit и 64-bit)
    2. MinGW GCC 8.2.0 (NUWEN 64-bit, TDM-GCC и MinGW.org 32-bit и 64-bit)
    3. MinGW GCC 7.2.0 (NUWEN 64-bit, TDM-GCC 32-bit и 64-bit)
    4. MinGW GCC 6.3.0 (NUWEN 64-bit, TDM-GCC 32-bit и 64-bit)
    5. MinGW GCC 5.3.0 (NUWEN и TDM-GCC, 32-bit и 64-bit)
    6. CodeBlocks 20.03 + MinGW GCC 8.1.0 (MinGW.org, 32-bit и 64-bit)
    7. CodeBlocks 12.11 + MinGW GCC 4.8.0 (NUWEN)
    8. CodeBlocks 12.11 + MinGW GCC 4.7.2 (NUWEN)
    9. Dev-CPP 5.11 + MinGW GCC 4.9.2 (TDM)
    10. Qt Creator 4.2.2 + MinGW GCC 5.3.0 (Qt), 32-bit (кодировка файлов в редакторе: только CP1251)
    11. Cygwin + Cygwin GCC 7.4.0, 32-bit и 64-bit
    12. LLVM + MSVC Clang-cl 9.0.0, 32-bit и 64-bit
    13. Microsoft Visual Studio 16 (2019), 32-bit и 64-bit
    14. Microsoft Visual Studio 15 (2017), 32-bit и 64-bit
    15. Microsoft Visual Studio 14 (2015), 32-bit и 64-bit
    16. Microsoft Visual Studio 12 (2013), 32-bit и 64-bit
    17. Microsoft Visual Studio 11 (2012), 32-bit и 64-bit
    18. Microsoft Visual Studio 10 (2010), 32-bit и 64-bit
    19. Intel C++ Compiler 13.0 (2013)
  • Операционные системы
    1. Windows 10 ru/en, 32-bit и 64-bit
    2. Windows 8 ru/en, 32-bit и 64-bit
    3. Windows 7 ru/en, 32-bit и 64-bit
    4. Windows Vista ru/en
    5. Windows 2003 SP1 R1/R2 ru/en
    6. Windows XP SP2/SP3 ru/en
    7. Windows 2000 SP4 ru/en
    8. Linux + Wine
      • Ubuntu 16.04, 11.04 + Wine
    9. MacOS X + Wine
      • Snow Leopard 10.6.8 + Wine
Заметки:
  • Принудительно отключается режим UNICODE (кроме редактора ресурсов Visual Studio). Для явной работы с UNICODE-функциями используйте суффикс W.
  • Принудительно включается режим _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES.
Предупреждения:
Если программа разрабатывалась на определенных платформах с настройками по умолчанию, то во время исполнения могут потребоваться файлы библиотек, без которых программа не запустится:

Компилятор   Сборка   Среда разработки   Конфигурация   Требуемые библиотеки   

GCC g++ 4.7.2   NUWEN.net   CodeBlocks, DevCpp, CLion, VS Code   Debug, Release   msvcrt.dll, libstdc++-6.dll, libgcc_s_dw2-1.dll, libssp-0.dll   

GCC g++ 4.8.1   NUWEN.net   CodeBlocks, DevCpp, CLion, VS Code   Debug, Release   msvcrt.dll   

GCC g++ 4.9.2, 5.1.0   TDM-GCC 32-bit   DevCPP 5.11   Debug, Release   msvcrt.dll, libssp-0.dll   
GCC g++ 4.9.2, 5.1.0   TDM-GCC 64-bit   DevCPP 5.11   Debug, Release   msvcrt.dll, libssp_64-0.dll   

GCC g++ 5.3.0 - 9.2.0   NUWEN.net   CodeBlocks, DevCpp, CLion, VS Code   Debug, Release   msvcrt.dll   

GCC g++   Mingw.org   CodeBlocks, DevCpp, CLion, VS Code   Debug, Release   msvcrt.dll, libstdc++-6.dll, libgcc_s_dw2-1.dll   

GCC g++   Qt (Mingw-64)   Qt Creator   Debug, Release   msvcrt.dll, libstdc++-6.dll, libgcc_s_dw2-1.dll, libssp-0.dll, libwinpthread-1.dll   

GCC g++   Cygwin   CodeBlocks, DevCpp, CLion, VS Code   Debug, Release   msvcrt.dll, cygwin1.dll, cygstdc++-6.dll, cyggcc_s-seh-1.dll   

Microsoft Visual C   Microsoft   Visual Studio 2010 (10.0)   Debug   msvcp100d.dll, msvcr100d.dll   
Microsoft Visual C   Microsoft   Visual Studio 2010 (10.0)   Release   msvcp100.dll, msvcr100.dll   

Microsoft Visual C   Microsoft   Visual Studio 2012 (11.0)   Debug   msvcp110d.dll, msvcr110d.dll   
Microsoft Visual C   Microsoft   Visual Studio 2012 (11.0)   Release   msvcp110.dll, msvcr110.dll   

Microsoft Visual C   Microsoft   Visual Studio 2013 (12.0)   Debug   msvcp120d.dll, msvcr120d.dll   
Microsoft Visual C   Microsoft   Visual Studio 2013 (12.0)   Release   msvcp120.dll, msvcr120.dll   

Microsoft Visual C   Microsoft   Visual Studio 2015 (14.0)   Debug   concrt140d.dll, msvcp140d.dll, vccorlib140d.dll, vcruntime140d.dll   
Microsoft Visual C   Microsoft   Visual Studio 2015 (14.0)   Release   concrt140.dll, msvcp140.dll, vccorlib140.dll, vcruntime140.dll   

Microsoft Visual C   Microsoft   Visual Studio 2017 (15.0)   Debug   concrt140d.dll, msvcp140d.dll, vccorlib140d.dll, vcruntime140d.dll   
Microsoft Visual C   Microsoft   Visual Studio 2017 (15.0)   Release   concrt140.dll, msvcp140.dll, vccorlib140.dll, vcruntime140.dll   

Microsoft Visual C   Microsoft   Visual Studio 2019 (16.0)   Debug   concrt140d.dll, msvcp140d.dll, msvcp140_1d.dll, msvcp140_2d.dll, vccorlib140d.dll, vcruntime140d.dll   
Microsoft Visual C   Microsoft   Visual Studio 2019 (16.0)   Release   concrt140.dll, msvcp140.dll, msvcp140_1.dll, msvcp140_2.dll, vccorlib140.dll, vcruntime140.dll   

Intel Compiler 13   Intel   Visual Studio 2010+   Debug, Release   Не требуются

Посмотреть эти зависимости можно утилитой Depends.exe.


Особенности использования

Заметки:
Файл TXLib.h должен быть включен (#include) в программу:
  • До или вместо файла windows.h. Либо надо задать (#define) константы WINVER и _WIN32_IE не ниже 0x0500 и отменить (#undef) макросы UNICODE и _UNICODE.
  • До или вместо файлов string.h или stdio.h, если используется режим строгого соответствия стандарту ANSI. Имейте в виду, что эти файлы могут включаться в windows.h.
  • После включения библиотек boost, использующих модуль boost::preprocessor.
Предупреждения:
При использовании вместе с SFML необходимо перед включением (#include) в программу задать макрос TX_USE_SRML (#define TX_USE_SRML). TXLib по умолчанию включает режим отладки стандартной библиотеки glibc, а SFML, как правило, собрана без этого режима, что приводит к ложным сообщениям об ошибках, связанным с динамической памятью, например при использовании класса sf::Text.
Опции командной строки:

Среда/Компилятор Режим

Опции командной строки

GCC 9.2.0 http://NUWEN.net Debug -D _DEBUG -g -ansi -std=gnu++2a -Wc++11-compat -Wc++14-compat -Wc++17-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Walloc-zero -Walloca -Walloca-larger-than=8192 -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconditionally-supported -Wconversion -Wctor-dtor-privacy -Wdangling-else -Wduplicated-branches -Wempty-body -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat-signedness -Wformat=2 -Wformat-overflow=2 -Wformat-truncation=2 -Winline -Wlarger-than=8192 -Wvla-larger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Wopenmp-simd -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wstringop-overflow=4 -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-override -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -Waligned-new -Walloc-size-larger-than=1073741824 -Walloc-zero -Walloca -Walloca-larger-than=8192 -Wcast-align=strict -Wdangling-else -Wduplicated-branches -Wformat-overflow=2 -Wformat-truncation=2 -Wmissing-attributes -Wmultistatement-macros -Wrestrict -Wshadow=global -Wsuggest-attribute=malloc -fcheck-new -fsized-deallocation -fstack-check -fstrict-overflow -flto-odr-type-merging -fno-omit-frame-pointer
Release -D NDEBUG -O3 -ansi -std=gnu++2a -Wc++11-compat -Wc++14-compat -Wc++17-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Walloc-zero -Walloca -Walloca-larger-than=8192 -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconditionally-supported -Wconversion -Wctor-dtor-privacy -Wdangling-else -Wduplicated-branches -Wempty-body -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat-signedness -Wformat=2 -Wformat-overflow=2 -Wformat-truncation=2 -Winline -Wlarger-than=8192 -Wvla-larger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Wopenmp-simd -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wstringop-overflow=4 -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-override -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -Waligned-new -Walloc-size-larger-than=1073741824 -Walloc-zero -Walloca -Walloca-larger-than=8192 -Wcast-align=strict -Wdangling-else -Wduplicated-branches -Wformat-overflow=2 -Wformat-truncation=2 -Wmissing-attributes -Wmultistatement-macros -Wrestrict -Wshadow=global -Wsuggest-attribute=malloc -fcheck-new -fsized-deallocation -fstack-check -fstrict-overflow -flto-odr-type-merging -fno-omit-frame-pointer
GCC 8.2.0 http://NUWEN.net Debug -D _DEBUG -g -ansi -std=c++17 -Wc++11-compat -Wc++14-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Walloc-zero -Walloca -Walloca-larger-than=8192 -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconditionally-supported -Wconversion -Wctor-dtor-privacy -Wdangling-else -Wduplicated-branches -Wempty-body -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat-signedness -Wformat=2 -Wformat-overflow=2 -Wformat-truncation=2 -Winline -Wlarger-than=8192 -Wvla-larger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Wopenmp-simd -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wstringop-overflow=4 -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-override -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -Waligned-new -Walloc-size-larger-than=1073741824 -Walloc-zero -Walloca -Walloca-larger-than=8192 -Wcast-align=strict -Wdangling-else -Wduplicated-branches -Wformat-overflow=2 -Wformat-truncation=2 -Wmissing-attributes -Wmultistatement-macros -Wrestrict -Wshadow=global -Wsuggest-attribute=malloc -fcheck-new -fsized-deallocation -fstack-check -fstrict-overflow -fchkp-first-field-has-own-bounds -fchkp-narrow-to-innermost-array -flto-odr-type-merging -fno-omit-frame-pointer
Release -D NDEBUG -O3 -ansi -std=c++17 -Wc++11-compat -Wc++14-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Walloc-zero -Walloca -Walloca-larger-than=8192 -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconditionally-supported -Wconversion -Wctor-dtor-privacy -Wdangling-else -Wduplicated-branches -Wempty-body -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat-signedness -Wformat=2 -Wformat-overflow=2 -Wformat-truncation=2 -Winline -Wlarger-than=8192 -Wvla-larger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Wopenmp-simd -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wstringop-overflow=4 -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-override -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -Waligned-new -Walloc-size-larger-than=1073741824 -Walloc-zero -Walloca -Walloca-larger-than=8192 -Wcast-align=strict -Wdangling-else -Wduplicated-branches -Wformat-overflow=2 -Wformat-truncation=2 -Wmissing-attributes -Wmultistatement-macros -Wrestrict -Wshadow=global -Wsuggest-attribute=malloc -fcheck-new -fsized-deallocation -fstack-check -fstrict-overflow -fchkp-first-field-has-own-bounds -fchkp-narrow-to-innermost-array -flto-odr-type-merging -fno-omit-frame-pointer
GCC 7.2.0 http://NUWEN.net Debug -D _DEBUG -g -ansi -std=c++14 -Wc++11-compat -Wc++14-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Walloc-zero -Walloca -Walloca-larger-than=8192 -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconditionally-supported -Wconversion -Wctor-dtor-privacy -Wdangling-else -Wduplicated-branches -Wempty-body -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat-signedness -Wformat=2 -Wformat-overflow=2 -Wformat-truncation=2 -Winline -Wlarger-than=8192 -Wvla-larger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Wopenmp-simd -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wstringop-overflow=4 -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-override -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -fcheck-new -fsized-deallocation -fstack-check -fstrict-overflow -fchkp-first-field-has-own-bounds -fchkp-narrow-to-innermost-array -flto-odr-type-merging
Release -D NDEBUG -O3 -ansi -std=c++14 -Wc++11-compat -Wc++14-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Walloc-zero -Walloca -Walloca-larger-than=8192 -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconditionally-supported -Wconversion -Wctor-dtor-privacy -Wdangling-else -Wduplicated-branches -Wempty-body -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat-signedness -Wformat=2 -Wformat-overflow=2 -Wformat-truncation=2 -Winline -Wlarger-than=8192 -Wvla-larger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Wopenmp-simd -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wrestrict -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wstringop-overflow=4 -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-override -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -fcheck-new -fsized-deallocation -fstack-check -fstrict-overflow -fchkp-first-field-has-own-bounds -fchkp-narrow-to-innermost-array -flto-odr-type-merging
GCC 6.3.0 http://NUWEN.net Debug -D _DEBUG -g -ansi -std=c++14 -Wc++11-compat -Wc++14-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconditionally-supported -Wconversion -Wctor-dtor-privacy -Wempty-body -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat-signedness -Wformat=2 -Winline -Wlarger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Wopenmp-simd -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-override -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -fcheck-new -fsized-deallocation -fstack-check -fstack-protector-all -fstrict-overflow -fchkp-first-field-has-own-bounds -fchkp-narrow-to-innermost-array -flto-odr-type-merging
Release -D NDEBUG -O3 -ansi -std=c++14 -Wc++11-compat -Wc++14-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconditionally-supported -Wconversion -Wctor-dtor-privacy -Wempty-body -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat-signedness -Wformat=2 -Winline -Wlarger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Wopenmp-simd -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-override -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -fcheck-new -fsized-deallocation -fstack-check -fstack-protector-all -fstrict-overflow -fchkp-first-field-has-own-bounds -fchkp-narrow-to-innermost-array -flto-odr-type-merging
GCC 5.3.0 http://NUWEN.net Debug -D _DEBUG -g -ansi -std=c++14 -Wc++11-compat -Wc++14-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconditionally-supported -Wconversion -Wctor-dtor-privacy -Wempty-body -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat-signedness -Wformat=2 -Winline -Wlarger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Wopenmp-simd -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-override -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -fcheck-new -fsized-deallocation -fstack-check -fstack-protector-all -fstrict-overflow -fchkp-first-field-has-own-bounds -fchkp-narrow-to-innermost-array -flto-odr-type-merging
Release -D NDEBUG -O3 -ansi -std=c++14 -Wc++11-compat -Wc++14-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconditionally-supported -Wconversion -Wctor-dtor-privacy -Wempty-body -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat-signedness -Wformat=2 -Winline -Wlarger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Wopenmp-simd -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-override -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -fcheck-new -fsized-deallocation -fstack-check -fstack-protector-all -fstrict-overflow -fchkp-first-field-has-own-bounds -fchkp-narrow-to-innermost-array -flto-odr-type-merging
GCC 5.1.0 TDM-GCC Debug -D _DEBUG -g -ansi -std=c++14 -Wc++11-compat -Wc++14-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconditionally-supported -Wconversion -Wctor-dtor-privacy -Wempty-body -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat-signedness -Wformat=2 -Winline -Wlarger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Wopenmp-simd -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-override -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -fcheck-new -fsized-deallocation -fstack-check -fstack-protector-all -fstrict-overflow -fchkp-first-field-has-own-bounds -fchkp-narrow-to-innermost-array -flto-odr-type-merging
Release -D NDEBUG -O3 -ansi -std=c++14 -Wc++11-compat -Wc++14-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconditionally-supported -Wconversion -Wctor-dtor-privacy -Wempty-body -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat-signedness -Wformat=2 -Winline -Wlarger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Wopenmp-simd -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-override -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -fcheck-new -fsized-deallocation -fstack-check -fstack-protector-all -fstrict-overflow -fchkp-first-field-has-own-bounds -fchkp-narrow-to-innermost-array -flto-odr-type-merging
GCC 4.9.2 TDM-GCC Debug -D _DEBUG -g -ansi -std=c++11 -Wc++11-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconversion -Wctor-dtor-privacy -Wempty-body -Wfloat-equal -Wformat=2 -Winline -Wlarger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wsuggest-attribute=noreturn -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -fcheck-new -fstack-check -fstack-protector-all -fstrict-overflow
Release -D NDEBUG -O3 -ansi -ansi -std=c++11 -Wc++11-compat -Wall -Wextra -Weffc++ -Waggressive-loop-optimizations -Warray-bounds -Wcast-align -Wcast-qual -Wchar-subscripts -Wconversion -Wctor-dtor-privacy -Wempty-body -Wfloat-equal -Wformat=2 -Winline -Wlarger-than=8192 -Wlogical-op -Wmissing-declarations -Wnon-virtual-dtor -Woverloaded-virtual -Wpacked -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-promo -Wstack-usage=8192 -Wstrict-null-sentinel -Wstrict-overflow=2 -Wsuggest-attribute=noreturn -Wswitch-default -Wswitch-enum -Wsync-nand -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wno-literal-suffix -Wno-missing-field-initializers -Wnarrowing -Wno-old-style-cast -Wvarargs -fcheck-new -fstack-check -fstack-protector-all -fstrict-overflow
CodeBlocks 12.11, GCC 4.8.0 Debug

-D _DEBUG -g -ansi -std=c++11 -pedantic -Wall -Wextra -Weffc++ -fexceptions -Wcast-align -Wfloat-equal -Winit-self -Winline -Wredundant-decls -Wshadow -Wundef -Wunreachable-code -Wctor-dtor-privacy -Wnon-virtual-dtor -Woverloaded-virtual -Wpointer-arith -Wsign-promo -Wcast-qual -Wconversion -Wformat=2 -Wstrict-aliasing -Wswitch-default -Wswitch-enum -Wwrite-strings -Wmissing-declarations -Wmissing-include-dirs -Wlogical-op -Wstrict-null-sentinel -Wstack-usage=8192

Release

-D NDEBUG -O3 -ansi -std=c++11 -pedantic -Wall -Wextra -Weffc++ -fexceptions -Wcast-align -Wfloat-equal -Winit-self -Winline -Wredundant-decls -Wshadow -Wundef -Wunreachable-code -Wctor-dtor-privacy -Wnon-virtual-dtor -Woverloaded-virtual -Wpointer-arith -Wsign-promo -Wcast-qual -Wconversion -Wformat=2 -Wstrict-aliasing -Wswitch-default -Wswitch-enum -Wwrite-strings -Wmissing-declarations -Wmissing-include-dirs -Wlogical-op -Wstrict-null-sentinel -Wstack-usage=8192

CodeBlocks 12.11, GCC 4.7.2 Debug

-D _DEBUG -g -ansi -std=c++11 -pedantic -Wall -Wextra -Weffc++ -fexceptions -Wcast-align -Wfloat-equal -Winit-self -Winline -Wredundant-decls -Wshadow -Wundef -Wunreachable-code -Wctor-dtor-privacy -Wnon-virtual-dtor -Woverloaded-virtual -Wpointer-arith -Wsign-promo -Wcast-qual -Wconversion -Wformat=2 -Wstrict-aliasing -Wswitch-default -Wswitch-enum -Wwrite-strings -Wmissing-declarations -Wmissing-include-dirs -Wlogical-op -Wstrict-null-sentinel -Wstack-usage=8192

Release

-D NDEBUG -O3 -ansi -std=c++11 -pedantic -Wall -Wextra -Weffc++ -fexceptions -Wcast-align -Wfloat-equal -Winit-self -Winline -Wredundant-decls -Wshadow -Wundef -Wunreachable-code -Wctor-dtor-privacy -Wnon-virtual-dtor -Woverloaded-virtual -Wpointer-arith -Wsign-promo -Wcast-qual -Wconversion -Wformat=2 -Wstrict-aliasing -Wswitch-default -Wswitch-enum -Wwrite-strings -Wmissing-declarations -Wmissing-include-dirs -Wlogical-op -Wstrict-null-sentinel -Wstack-usage=8192

MSVS 2012 Debug

/D _DEBUG /Od /Gm /GS /GR /Gd /GF /Oy- /EHsc /RTC1 /RTCc /MP /WX- /TP /ZI /MTd /W4 /analyze /fp:except /fp:precise /Zc:wchar_t /Zc:forScope /sdl /openmp /Qpar- /D WIN32 /D _CONSOLE /D _WINDOWS

Release

/D NDEBUG /O2 /Gm- /GS /GR /GL /Gd /GF /GT /Gy /Oi /Oy- /Ob2 /Ot /EHsc /MP /WX- /TP /Zi /MT /W4 /analyze /fp:precise /Zc:wchar_t /Zc:forScope /sdl /openmp /Qpar /D WIN32 /D _CONSOLE /D _WINDOWS

MSVS 2010 Debug

/D _DEBUG /Od /Gm /GS /GR /Gd /Oy- /EHsc /RTC1 /RTCc /MP /WX- /TP /ZI /MTd /W4 /analyze /fp:except /fp:precise /Zc:wchar_t /Zc:forScope /D WIN32 /D _CONSOLE /D CODE_ANALYSIS

Release /D NDEBUG /O2 /Gm- /GS /GR /GL /Gd /Gy /Oi /Oy- /EHsc /MP /WX- /TP /Zi /MT /W4 /analyze /fp:precise /Zc:wchar_t /Zc:forScope /D WIN32 /D _CONSOLE /D CODE_ANALYSIS

Эти ключи могут вызывать появление предупреждений для файла TXLib.h о символе $, использующемся для отладки, и о директиве #warning. Они настолько суровы, что могут вызвать   Чака Норриса   предупреждения даже для файлов стандартных библиотек C++ (вне зависимости от того, используется TXLib.h или нет). При использовании этих ключей могут возникнуть дополнительные зависимости от DLL-файлов.


История изменений

  • Версия 0.173
    1. API
      1. Добавлена совместимость с компиляторами GCC версии до 9.2 (MinGW и Cygwin), Clang, средами MS Visual Studio 2017 и 2019, CLion (тоже пример талантливой работы с консолью, почти как у Eclipse. Но эти непрерывно копипастят из уменьшеного окна. Вот жесть-то).
      2. Убрана поддержка компиляторов GCC версий младше 4.7.2 и MS Visual Studio версий младше 2010.
      3. Добавлены функции API рисования txCreateDIBSection(), txGetAsyncKeyState(), txGetConsoleExtent(), txGetFPS(), txPlayVideo() (еще больше кота Мару!), txSpeak(), txSaveImage(), txUseAlpha(), txVideoMemory(), txRedrawWindow(), переменная _txSwapBuffers, константы TX_USE_SPEAK, TX_USE_SFML.
      4. Функция txAlphaBlend() теперь почти масштабирует изображение (см. ее исходный текст).
      5. Окно TXLib может изменять размеры, если в _txWindowStyle включить стиль окна WS_THICKFRAME.
      6. Все функции рисования (ну, кроме txCircle(), это традиция) теперь могут рисовать на внеэкранных холстах (HDC), в них добавлен соответствующий параметр по умолчанию. Для этого даже не требуется создавать главное окно TXLib. Однако может сломаться совместимость, если вы работали с указателями на эти функции.
      7. Функция txVideoMemory() позволяет работать с главным окном TXLib как с фреймбуфером (массивом пикселей).
      8. Улучшена диагностика в случае неверного использования TXLib API.   Теперь функции TXLib не форматируют системный диск в случае неудачного завершения, какая гуманность.  
      9. Обновлены отладочные $-макросы. Даже нано-поддержка юнит-тестов есть. Хоть сейчас в Сколково.
      10. Обеспечена возможность совместного использования TXLib и SFML, разумеется, в разных окнах.
      11. Добавлены служебные функции txDemangle(), txRegQuery(), txStackBackTrace(), tx_fpreset(), макросы NEW (отладочный оператор new), константы _TX_EXCEPTIONS_LIMIT, _TX_FATAL_EXCEPTIONS_LIMIT, _TX_FULL_STACKTRACE, _TX_NOINIT, _TX_BUFSIZE и др., _txWatchdogTimeout, _TX_CP, _TX_LOCALE, _TX_WLOCALE и другие.
      12. Расширена работа внутреннего трассировочного механизма TXLib (_TX_ALLOW_TRACE, TX_TRACE).
      13. Добавлены всякие шуточки типа макросов txSqr(), _TX_DESTROY_3D, meow, please, мяу, txCatchMouse() и другие. См. хелпы и исходные тексты.
      14. Добавлены недокументированные функции txCreateExtraWindow(), txRegisterClass(), txReopenStdio(), txSetLocale(), txTaskKill(), _txCreateShortcut(), _txSetProcAddress(), _txFindProcess(), _txKillProcess(), _txIsBadReadPtr(), _txGetCommandLine(), _tx_snprintf_s(), _tx_vsnprintf_s(), _getch(), _putch() _kbhit() (три последние – для Cygwin, их там по умолчанию нет), stristr(), stristrw(), переменная _txLogName, макросы _tx_thread, _TX_ARGUMENT_FAILED() и др., _TX_ON_DEBUG, _TX_UNEXPECTED(), _TX_CALL(), _txWaitFor(), $debug, $printf, $PRINTF и другие. Возможно, вы разберетесь по исходникам, зачем они нужны и как работают. Вот txSetLocale(), например, устанавливает в консоли русский язык, и узнать это можно, только читая вот этот раздел документации. Да, недокументированные функции – это плохо, но они существуют, и надо уметь с ними работать.
      15. Обновлена документация. Теперь она занимает не половину файла, как раньше, а где-то треть, но, как ни странно, ее стало больше.   Можно очередную задачку про это придумать. (Но не надо.)  
    2. Реализация
      1. Добавлен перехват структурных (системных) исключений Windows и поддержка отладки с трассировкой стека. Файл библиотеки вырос почти в 2 раза, м-да. К сожалению, появилась (необязательная) зависимость от динамических библиотек поддержки отладочной информации и зоопарка их версий, устроенного Microsoft. Эх. :(
      2. Код библиотеки верифицирован в статических анализаторах кода PVS-Studio v7.05 и Clang-tidy, а также в динамическом анализаторе MicroFocus DevPartner v10.5.
    3. Установка
      1. Добавлена установка для Visual Studio 2017, 2019, убрана установка для Visual Studio 6.0 - 2008.
      2. Добавлена установка для MinGW (сканируются папки в C:\MinGW, C:\MinGW64, C:\Program Files\MinGW, C:\Program Files (x86)\MinGW).
      3. Добавлена установка для Qt Creator (сканируются папки в C:\Program Files (x86)\Qt\Tools).
      4. Добавлена установка для Cygwin (сканируются папки в C:\Program Files\Cygwin\usr\include и C:\Program Files (x86)\Cygwin\usr\include).
      5. Установщик генерирует лог-файл Temp%\~TXSetup.log.
  • Версия 0.172
    1. API
      1. Добавлена совместимость с MS Visual Studio 2010, 2012 и 2015.
      2. Соответствие стандарту C++0x для MSVS 2010, MSVS 2012, GCC 4.6.1 и C++11 для GCC 4.7.1 в режиме компиляции -Wall -Wextra -Weffc++ (см. таблицу опций компиляторов).
      3. Убраны лишние предупреждения о неинициализированнях полях структур при инициализации вида = {} (только для компиляторов MS и GCC версии 4).
      4. Изменен диалог About, заголовки окна и окон сообщений.
      5. Изменен и дополнен формат вывода ошибок.
      6. Добавлены функции для работы с консолью.
      7. Добавлены новые функции служебного характера.
      8. Макрос TX_THROW переименован в TX_ERROR, макрос TX_NEEDED – в asserted. Добавлены макросы verify, verified. Обеспечена обратная совместимость.
      9. Макрос _TX_IMPORT переименован _TX_DLLIMPORT, так больше похоже на __declspec (dllimport).
      10. Убрана облегченная поддержка регионов отсечения (теперь – только средствами Win32).
      11. Добавлена системная клавиша Alt+Ctrl+Shift+PrintScreen, временно отменяющая блокировку обновления окна, см. txBegin().
      12. Добавлена (суррогатная) многооконность и работа в DLL (experimental and not fully documented).
      13. Файл Graphics.h больше не поддерживается – не нужен он никому.
    2. Документация
      1. Дополнен текст документации, примеров использования, добавлены демонстрационные программы и дополнения от разных авторов (в папке TX/Examples/Demo). Подробно документирован исходный текст функции txInputBox() для иллюстрации работы с диалогами Win32.
      2. Документация по примерам вынесена в отдельный файл.
      3. TXLib теперь упоминает кота Мару (Maru the cat) в одной из своих функций. TXLib is now referencing Maru the Сat in one of its functions.
    3. Реализация
      1. Во все функции добавлены проверки параметров и установка кода ошибки SetLastError().
      2. Упрощен механизм трансляции текста консоли в окно TXLib.
      3. Добавлена динамическая иконка окна.
      4. Добавлено автоматическое удаление HDC и предупреждение об этом через Tray Notification.
      5. Добавлена принудительная установка русского языка в консоли, см. пляски с бубном в _txConsole_SetUnicodeFont().
      6. Если процесс с TXLib запущен в среде программирования, которая будет ожидать нажатия клавиши для завершения процесса, TXLib теперь завершает процесс-родитель этой среды. Поддерживаются MS Visual Studio, CodeBlocks, Eclipse. См. _TX_WAITABLE_PARENTS.
      7. Поддержка среды Eclipse с ее альтернативно талантливой идеей эмулировать консоль в эклипсовском окне и использованием каналов (pipes) для ввода-вывода.
      8. Код библиотеки верифицирован в статических анализаторах кода Cppcheck v1.53, PVS-Studio v4.54 и Coverity Scan, и в динамическом анализаторе MicroFocus DevPartner v10.5.
      9. TODO: Should contact C++ std committee, see std::nomeow_t, std::nomeow.
    4. Установка
      1. Убраны сообщения об ошибках в Setup.js
  • Версия 0.171
    1. Соответствие стандартам MS SAL и режиму компиляции /analyze в MSVS 2005, 2008.
    2. Восстановлен механизм обновления по таймеру.
    3. Русский язык в консоли в _txThrow().
  • Версия 0.170
    1. Исправление ошибок в _txCanvas_OnPAINT (NULL DC).
    2. Упрощен механизм генерации сообщений для обновления экрана.
    3. Добавлена трассировка (TX_TRACE).
  • Версия 0.169
    1. Добавлена работа с диалоговыми окнами (still experimental).
  • Версия 0.166
    1. Исправлена работа при использовании отладчиков на платформах Win2000, WinXP.
    2. Документированы отладочные функции и макросы.
  • Версия 0.165
    1. Добавлены Мастера проектов для VS6, VS2003-2008, CodeBlocks, DevCPP.
    2. Добавлена интеграция с системой помощи для VS2003-2008.
  • Версия 0.164
    1. Добавлена cовместимость с Visual Studio 2005.
    2. Изменен размер шрифта консоли и шрифта, выбранного по умолчанию.
  • Версия 0.150
    1. Добавлены txTransparentBlt(), txAlphaBlend() - Win98 и старше.
    2. ВНИМАНИЕ! Функции txSetBkColor(), txBkColor(), txGetBkColor() теперь называются txSetFillColor(), txFillColor(), txGetFillColor() (совместимость со старыми версиями - в Graphics.h).
  • Версия 0.145
    1. Добавлена txPlaySound().
  • Версия 0.144
    1. Исправлен баг в txMouseButtons().

Сообщения об ошибках

Баг-трекер на GitHub:

TXCat.png