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

Файл TXLib.h

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

См. исходные тексты.

Классы

class  txAutoLock
 Класс для автоматической блокировки и разблокировки критической секции. Подробнее...
struct  txDialog
 Базовый класс для диалоговых окон. Подробнее...
struct  txDialog::Layout
 Класс для описания элемента диалогового окна (контрола) Подробнее...

Макросы

#define _TX_VER
 Текущая версия библиотеки.
#define MAX(a, b)
 Возвращает максимальное из двух чисел
#define MIN(a, b)
 Возвращает минимальное из двух чисел
#define ROUND(x)
 Округляет число до целого
#define _TX_DESTROY_3D
 Ну просто очень удобный макрос.
#define ZERO(type)
 Обнулитель типов, не имеющих конструкторов
#define assert(cond)
 Замена стандартного макроса assert(), с выдачей сообщения через txMessageBox(), консоль и OutputDebugString().
#define asserted
 Выводит диагностическое сообщение в случае нулевого или ложного результата.
#define verified   asserted
 For compatibility with assert macro.
#define verify
 Выполняет команду (вычисляет выражение) и проверяет результат.
#define TX_ERROR(msg)
 Выводит развернутое диагностическое сообщение.
#define TX_DEBUG_ERROR
 Выводит развернутое диагностическое сообщение в отладочном режиме.
#define txStackBackTrace()
 Распечатывает текущий стек вызовов функций в консоли.
#define __TX_COMPILER__
 Имя и версия текущего компилятора
#define __TX_FILELINE__
 Макрос, раскрывающийся в имя файла и номер строки файла, где он встретился.
#define __TX_FUNCTION__
 Имя текущей функции
#define _TX_BUILDMODE
 Имя режима сборки
#define _TX_MODULE
 Имя модуля TXLib, входит в диагностические сообщения.
#define txGDI(command, dc)
 Вызов функции Win32 GDI с автоматической блокировкой и разблокировкой.
Адаптация к компиляторам и платформам
#define strncpy_s(dest, sizeof_dest, src, count)   ( (void)(sizeof_dest), strncpy ((dest), (src), (count)) )
#define wcsncpy_s(dest, sizeof_dest, src, count)   ( (void)(sizeof_dest), wcsncpy ((dest), (src), (count)) )
#define strncat_s(dest, sizeof_dest, src, count)   ( (void)(sizeof_dest), strncat ((dest), (src), (count)) )
#define strerror_s(buf, sizeof_buf, code)   ( strncpy ((buf), strerror ((int)(code)), (sizeof_buf)-1) )
#define strtok_s(buf, delim, ctx)   ( (void)(ctx), strtok ((buf), (delim)) )
#define fopen_s(file, name, mode)   ( *(file) = fopen ((name), (mode)) )
#define _strlwr_s(str, sizeof_str)   ( _strlwr (str) )
#define ctime_s(buf, sizeof_buf, time)   ( strncpy ((buf), ctime (time), (sizeof_buf)-1) )
#define _controlfp_s(oldCtl, newCtl, mask)   ( *(oldCtl) = _controlfp (newCtl, mask), 0 )
#define _snprintf_s   snprintf
#define _vsnprintf_s(str, sz, trunc, format, arg)   _vsnprintf (str, sz, format, arg)
#define getenv_s(sz, buf, sizeof_buf, name)   ( (void)(sz), strncpy ((buf), getenv (name), (sizeof_buf)-1) )
#define please
 Еще парочка макросов.
#define _
 Макрос, позволяющий передать переменное число параметров в какой-либо другой макрос.
#define TX_COMMA   ,
 Синоним макроса _ (символ подчеркивания)
Внутренняя диагностика
#define _TX_ALLOW_TRACE
 Включает/отключает внутреннюю трассировку исполнения кода библиотеки.
#define TX_TRACE
 Трассирует исполнение кода через OutputDebugString().
Макросы для построения статической карты сообщений (Message Map)
#define TX_BEGIN_MESSAGE_MAP()
 Заголовок карты сообщений (Message Map).
#define TX_HANDLE(id)
 Заголовок обработчика сообщения (Message handler) карты сообщений.
#define TX_COMMAND_MAP
 Начало карты команд (Command map) в карте сообщений.
#define TX_END_MESSAGE_MAP
 Завершитель карты сообщений.
Экспериментальные отладочные макросы
#define __TX_DEBUG_MACROS   ("Группа отладочных $-макросов")
 Отладочная печать переменной во время вычисления выражения или участка кода во время его выполнения.

Функции

int random (int range) _TX_DEPRECATED
 Генератор случайных чисел
double random (double left, double right) _TX_DEPRECATED
 Генератор случайных чисел
template<typename Tx , typename Ta , typename Tb >
bool In (Tx x, Ta a, Tb b) _TX_DEPRECATED
 Проверка, находится ли параметр х внутри замкнутого интервала [a; b].
void tx_fpreset ()
 Переинициализирует математический сопроцессор
double txSqr (double x)
 Очень удобное возведение числа в квадрат.
void txDump (const void *address, const char name[]="txDump()")
 Распечатывает дамп области памяти в консоли.
Инициализация библиотеки
HWND txCreateWindow (double sizeX, double sizeY, bool centered=true)
 Создание окна рисования
HDC & txDC ()
 Возвращает холст (дескриптор контекста рисования, HDC), связанный с окном TXLib.
bool txSetDefaults (HDC dc=txDC())
 Установка параметров рисования по умолчанию.
bool txOK ()
 Проверка правильности работы библиотеки
POINT txGetExtent (HDC dc=txDC())
 Возвращает размер окна или холста в виде структуры POINT.
int txGetExtentX (HDC dc=txDC())
 Возвращает ширину окна или холста.
int txGetExtentY (HDC dc=txDC())
 Возвращает высоту окна или холста.
HWND txWindow ()
 Возвращает дескриптор окна рисования
const char * txVersion ()
 Возвращает строку с информацией о текущей версии библиотеки.
unsigned txVersionNumber ()
 Возвращает номер версии библиотеки.
const char * txGetModuleFileName (bool fileNameOnly=true)
 Возвращает имя исполняемого файла или изначальный заголовок окна TXLib.
Рисование фигур
bool txClear (HDC dc=txDC())
 Стирает холст текущим цветом заполнения.
bool txSetPixel (double x, double y, COLORREF color, HDC dc=txDC())
 Рисует пиксель (точку на экране).
COLORREF txGetPixel (double x, double y, HDC dc=txDC())
 Возвращает текущий цвет точки (пикселя) на экране.
bool txLine (double x0, double y0, double x1, double y1, HDC dc=txDC())
 Рисует линию.
bool txRectangle (double x0, double y0, double x1, double y1, HDC dc=txDC())
 Рисует прямоугольник.
bool txPolygon (const POINT points[], int numPoints, HDC dc=txDC())
 Рисует ломаную линию или многоугольник.
bool txEllipse (double x0, double y0, double x1, double y1, HDC dc=txDC())
 Рисует эллипс.
bool txCircle (double x, double y, double r)
 Рисует окружность или круг.
bool txArc (double x0, double y0, double x1, double y1, double startAngle, double totalAngle, HDC dc=txDC())
 Рисует дугу эллипса.
bool txPie (double x0, double y0, double x1, double y1, double startAngle, double totalAngle, HDC dc=txDC())
 Рисует сектор эллипса.
bool txChord (double x0, double y0, double x1, double y1, double startAngle, double totalAngle, HDC dc=txDC())
 Рисует хорду эллипса.
bool txFloodFill (double x, double y, COLORREF color=TX_TRANSPARENT, DWORD mode=FLOODFILLSURFACE, HDC dc=txDC())
 Заливает произвольный контур текущим цветом заполнения.
bool txTriangle (double x1, double y1, double x2, double y2, double x3, double y3)
 Функция, которая должна бы рисовать треугольник.
void txDrawMan (int x, int y, int sizeX, int sizeY, COLORREF color, double handL, double handR, double twist, double head, double eyes, double wink, double crazy, double smile, double hair, double wind)
 Рисует человечка.
Работа с текстом
bool txTextOut (double x, double y, const char text[], HDC dc=txDC())
 Рисует текст.
bool txDrawText (double x0, double y0, double x1, double y1, const char text[], unsigned format=DT_CENTER|DT_VCENTER|DT_WORDBREAK|DT_WORD_ELLIPSIS, HDC dc=txDC())
 Рисует текст, размещенный в прямоугольной области.
HFONT txSelectFont (const char name[], double sizeY, double sizeX=-1, int bold=FW_DONTCARE, bool italic=false, bool underline=false, bool strikeout=false, double angle=0, HDC dc=txDC())
 Выбирает текущий шрифт.
SIZE txGetTextExtent (const char text[], HDC dc=txDC())
 Вычисляет размеры текстовой надписи.
int txGetTextExtentX (const char text[], HDC dc=txDC())
 Вычисляет ширину текстовой надписи.
int txGetTextExtentY (const char text[], HDC dc=txDC())
 Вычисляет высоту текстовой надписи.
unsigned txSetTextAlign (unsigned align=TA_CENTER|TA_BASELINE, HDC dc=txDC())
 Устанавливает текущее выравнивание текста.
LOGFONT * txFontExist (const char name[])
 Ищет шрифт по его названию.
Рисование в памяти (на "виртуальном холсте") и загрузка изображений
HDC txCreateCompatibleDC (double sizeX, double sizeY, HBITMAP bitmap=NULL)
 Создает дополнительный холст (контекст рисования, Device Context, DC) в памяти.
HDC txCreateDIBSection (double sizeX, double sizeY, RGBQUAD **pixels=NULL)
 Создает аппаратно-независимый дополнительный холст (контекст рисования, Device Context, DC) в памяти с возможностью прямого доступа к нему как к массиву.
HDC txLoadImage (const char filename[], unsigned imageFlags=IMAGE_BITMAP, unsigned loadFlags=LR_LOADFROMFILE)
 Загружает из файла изображение в формате BMP. Делает это довольно медленно.
bool txDeleteDC (HDC dc)
 Уничтожает холст (контекст рисования, DC) в памяти.
bool txBitBlt (HDC destImage, double xDest, double yDest, double width, double height, HDC sourceImage, double xSource=0, double ySource=0)
 Копирует изображение с одного холста (контекста рисования, DC) на другой.
bool txBitBlt (double xDest, double yDest, HDC sourceImage, double xSource=0, double ySource=0)
 Копирует изображение на экран.
bool txTransparentBlt (HDC destImage, double xDest, double yDest, double width, double height, HDC sourceImage, double xSource=0, double ySource=0, COLORREF transColor=TX_BLACK)
 Копирует изображение с одного холста (контекста рисования, DC) на другой с учетом прозрачности.
bool txTransparentBlt (double xDest, double yDest, HDC sourceImage, COLORREF transColor=TX_BLACK)
 Копирует изображение на экран с учетом прозрачности.
bool txAlphaBlend (HDC destImage, double xDest, double yDest, double width, double height, HDC sourceImage, double xSource=0, double ySource=0, double alpha=1.0)
 Копирует изображение с одного холста (контекста рисования, DC) на другой с учетом полупрозрачности.
bool txAlphaBlend (double xDest, double yDest, HDC sourceImage, double alpha=1.0)
 Копирует изображение на экран с учетом полупрозрачности.
HDC txUseAlpha (HDC dc)
 Пересчитывает цвета пикселей с учетом прозрачности (переводит цвета в формат Premultiplied Alpha).
bool txSaveImage (const char filename[], HDC dc=txDC())
 Сохраняет в файл изображение в формате BMP.
Вспомогательные функции
double txSleep (double time=0)
 Задерживает выполнение программы на определенное время.
void txRedrawWindow ()
 Обновляет изображение в окне TXLib вручную.
int txBegin ()
 Блокирует обновление изображения окна, во избежание мигания.
int txEnd ()
 Разблокирует обновление окна, заблокированное функцией txBegin().
int txUpdateWindow (int update=true)
 Разрешает или запрещает автоматическое обновление изображения в окне.
bool txSelectObject (HGDIOBJ obj, HDC dc=txDC())
 Устанавливает текущий активный объект GDI.
bool txIDontWantToHaveAPauseAfterMyProgramBeforeTheWindowWillClose_AndIWillNotBeAskingWhereIsMyPicture ()
 Делает нечто иногда удобное. См. название функции.
bool txDestroyWindow ()
 Уничтожает окно TXLib.
double txQueryPerformance ()
 Оценивает скорость работы компьютера.
double txGetFPS (unsigned minFrames=0)
 Выдает количество кадров (вызовов этой функции) в секунду.
Работа с Мышью!
POINT txMousePos ()
 Возвращает позицию Мыши!
int txMouseX ()
 Возвращает X-Координату Мыши!
int txMouseY ()
 Возвращает Y-Координату Мыши!
unsigned txMouseButtons ()
 Возвращает состояние Кнопок Мыши!
Mouse & txCatchMouse (bool shouldEat=true)
 Ловит Мышь!
Функции консоли
bool txSetConsoleAttr (unsigned colors=0x07)
 Устанавливает цветовые атрибуты консоли.
unsigned txGetConsoleAttr ()
 Возвращает текущие цветовые атрибуты консоли.
bool txClearConsole ()
 Стирает текст консоли.
POINT txSetConsoleCursorPos (double x, double y)
 Устанавливает позицию мигающего курсора консоли.
POINT txGetConsoleCursorPos ()
 Возвращает позицию мигающего курсора консоли.
POINT txGetConsoleFontSize ()
 Возвращает размеры шрифта консоли.
bool txTextCursor (bool blink=true)
 Запрещает или разрешает рисование мигающего курсора в окне.
bool In (const POINT &pt, const RECT &rect) _TX_DEPRECATED
 Проверка, находится ли точка pt внутри прямоугольника rect.
Очень служебные функции
WNDPROC txSetWindowsHook (WNDPROC wndProc=NULL)
 Устанавливает альтернативную функцию обработки оконных сообщений Windows (оконную функцию) для окна TXLib.
bool txLock (bool wait=true)
 Блокировка холста (контекста рисования).
bool txUnlock ()
 Разблокировка холста
Пример использования класса диалога: функция txInputBox()
const char * txInputBox (const char *text=NULL, const char *caption=NULL, const char *input=NULL)
 Ввод строки в отдельном окне.

Переменные

const double txPI
 Число Пи

Установка цветов и режимов рисования

enum  txColors {
  TX_BLACK = RGB ( 0, 0, 0),
  TX_BLUE = RGB ( 0, 0, 128),
  TX_GREEN = RGB ( 0, 128, 0),
  TX_CYAN = RGB ( 0, 128, 128),
  TX_RED = RGB (128, 0, 0),
  TX_MAGENTA = RGB (128, 0, 128),
  TX_BROWN = RGB (128, 128, 0),
  TX_ORANGE = RGB (255, 128, 0),
  TX_GRAY = RGB (160, 160, 160),
  TX_DARKGRAY = RGB (128, 128, 128),
  TX_LIGHTGRAY = RGB (192, 192, 192),
  TX_LIGHTBLUE = RGB ( 0, 0, 255),
  TX_LIGHTGREEN = RGB ( 0, 255, 128),
  TX_LIGHTCYAN = RGB ( 0, 255, 255),
  TX_LIGHTRED = RGB (255, 0, 128),
  TX_LIGHTMAGENTA = RGB (255, 0, 255),
  TX_PINK = RGB (255, 128, 255),
  TX_YELLOW = RGB (255, 255, 128),
  TX_WHITE = RGB (255, 255, 255),
  TX_TRANSPARENT = 0xFFFFFFFF,
  TX_NULL = TX_TRANSPARENT,
  TX_HUE = 0x04000000,
  TX_SATURATION = 0x05000000,
  TX_LIGHTNESS = 0x06000000
}
 

Названия предопределенных цветов.

Подробнее...
COLORREF RGB (int red, int green, int blue)
 Создает (смешивает) цвет из трех базовых цветов (компонент).
HPEN txSetColor (COLORREF color, double thickness=1, HDC dc=txDC())
 Устанавливает текущий цвет и толщину линий, цвет текста.
COLORREF txGetColor (HDC dc=txDC())
 Возвращает текущий цвет линий и текста.
HBRUSH txSetFillColor (COLORREF color, HDC dc=txDC())
 Устанавливает текущий цвет заполнения фигур.
COLORREF txGetFillColor (HDC dc=txDC())
 Возвращает текущий цвет заполнения фигур.
unsigned txExtractColor (COLORREF color, COLORREF component)
 Извлекает цветовую компоненту (цветовой канал) из смешанного цвета.
COLORREF txRGB2HSL (COLORREF rgbColor)
 Преобразует цвет из формата RGB в формат HSL.
COLORREF txHSL2RGB (COLORREF hslColor)
 Преобразует цвет из формата HSL в формат RGB.

Другие полезные функции, не связанные с рисованием

#define sizearr(arr)
 Вычисление размера массива в элементах
#define SIZEARR(arr)   ( sizeof (arr) / sizeof (0[arr]) )
bool txPlaySound (const char filename[]=NULL, DWORD mode=SND_ASYNC)
 Воспроизводит звуковой файл.
int txMessageBox (const char text[], const char header[]="TXLib сообщает", unsigned flags=0)
 Выводит сообщение в окне с помощью функции MessageBox.
bool txNotifyIcon (unsigned flags, const char title[], const char format[],...)
 Выводит всплывающее сообщение в системном трее.
int txOutputDebugPrintf (const char format[],...)
 Выводит сообщение в отладчике.

#define TX_AUTO_FUNC(param_t, param, func)
 Автоматический вызов функции при завершении другой функции (аналог __finally)

Настроечные константы и переменные

#define _TX_NOINIT
 Запрет ранней инициализации TXLib.
#define _TX_EXCEPTIONS_LIMIT   (LONG_MAX - 1)
 Максимальное количество исключений в программе.
#define _TX_FATAL_EXCEPTIONS_LIMIT   16
 Максимальное количество фатальных исключений.
#define _TX_FULL_STACKTRACE
 Если определено, не исключать адреса без отладочной информации из трассировок стека.
#define _TX_WAITABLE_PARENTS
 Список запускающих программ, которые ждут нажатия клавиши после завершения процесса TXLib.
#define _TX_ALLOW_KILL_PARENT   true
 Разрешать принудительное завершение вызывающих программ, ждущих нажатия клавиш после завершения TXLib.
char _txLogName [MAX_PATH] = ""
 Имя лог-файла TXLib.
int _txConsoleMode = SW_HIDE
 Режим отображения консольного окна. Допустимы любые флаги функции ShowWindow.
int _txWindowStyle = WS_POPUP | WS_BORDER | WS_CAPTION | WS_SYSMENU
 Стиль графического окна библиотеки.
const char * _txConsoleFont = "Lucida Console"
 Шрифт консоли
unsigned _txCursorBlinkInterval = 500
 Интервал мигания курсора консоли (мс)
unsigned _txWindowUpdateInterval = 25
 Интервал обновления холста (мс)
const int _TX_TIMEOUT = 1000
 Таймаут операций ожидания (мс)
const unsigned _TX_BUFSIZE = 1024
 Размеры внутренних статических строковых буферов TXLib.
const unsigned _TX_BIGBUFSIZE = _TX_BUFSIZE * 2
 Размеры больших статических буферов.
const unsigned _TX_HUGEBUFSIZE = _TX_BUFSIZE * 20
 Размеры очень больших статических буферов.
const unsigned _TX_STACKSIZE = 64 * 1024
 Минимальный размер стека для потоков программы.

Подробное описание

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

Version:
00173a, Revision: 105
Copyright:
(C) Ded (Ilya Dedinsky, http://txlib.ru) <mail@txlib.ru>
Date:
2017-05-16 00:00:00 +0400

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

TX Library is a tiny 2D graphics library for MS Windows written in C++. This 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.

Установка библиотеки
Заметки:
Библиотека 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.
  1. Для полной обработки ошибок библиотеке требуются модули, которые желательно установить (скопировать) в папку Windows. Устанавливать эти библиотеки не обязательно. Программы, использующие TXLib, будут запускаться и без них.
  1. Модули библиотеки Microsoft DBGHELP для доступа к отладочным символам Microsoft:
  • dbghelp32.dll для 32-разрядных программ (либо dbghelp.dll, 32-разрядная версия),
  • dbghelp64.dll для 64-разрядных программ (либо dbghelp.dll, 64-разрядная версия),
  • symsrv32.dll для 32-разрядных программ (либо symsrv.dll, 32-разрядная версия),
  • symsrv64.dll для 64-разрядных программ (либо symsrv.dll, 64-разрядная версия),
  • symsrv.yes.
  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.

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

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

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

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

См. определение в файле TXLib.h