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

Разное

Классы

class  txAutoLock
 Класс для автоматической блокировки и разблокировки критической секции. Подробнее...

Макросы

#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 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 с автоматической блокировкой и разблокировкой.

Функции

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()")
 Распечатывает дамп области памяти в консоли.

Переменные

const double txPI
 Число Пи

Вспомогательные функции

int txUpdateWindow (int update=true)
 Разрешает или запрещает автоматическое обновление изображения в окне.
bool txSelectObject (HGDIOBJ obj, HDC dc=txDC())
 Устанавливает текущий активный объект GDI.
bool txIDontWantToHaveAPauseAfterMyProgramBeforeTheWindowWillClose_AndIWillNotBeAskingWhereIsMyPicture ()
 Делает нечто иногда удобное. См. название функции.

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

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 sizearr(arr)
 Вычисление размера массива в элементах
#define SIZEARR(arr)   ( sizeof (arr) / sizeof (0[arr]) )

bool In (const POINT &pt, const RECT &rect) _TX_DEPRECATED
 Проверка, находится ли точка pt внутри прямоугольника rect.

#define please
 Еще парочка макросов.

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

#define _
 Макрос, позволяющий передать переменное число параметров в какой-либо другой макрос.
#define TX_COMMA   ,
 Синоним макроса _ (символ подчеркивания)

Очень служебные функции

WNDPROC txSetWindowsHook (WNDPROC wndProc=NULL)
 Устанавливает альтернативную функцию обработки оконных сообщений Windows (оконную функцию) для окна TXLib.
bool txLock (bool wait=true)
 Блокировка холста (контекста рисования).
bool txUnlock ()
 Разблокировка холста

Макросы для построения статической карты сообщений (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   ("Группа отладочных $-макросов")
 Отладочная печать переменной во время вычисления выражения или участка кода во время его выполнения.

Макросы

#define sizearr (   arr)

Вычисление размера массива в элементах

Аргументы:
arrИмя массива.
Возвращает:
Размер массива в элементах (не в байтах).

Макрос sizearr() вычисляет размер массива в элементах, проверяя, можно ли его правильно вычислить при компиляции.

Макрос SIZEARR() просто делит размер всего массива в байтах на размер его элемента, получается размер массива в элементах.
Он не проверяет, можно ли его правильно вычислить, и при неправильном использовании может выдать неверный размер.

Предупреждения:
SIZEARR() выдает неверный размер, если определение массива вместе с его размером, известным при компиляции, недоступно в месте использования SIZEARR(). См. пример ниже.
Заметки:
В Microsoft Visual Studio 6 макрос sizearr() недоступен -- у ее компилятора недостаточно сил, чтобы скомпилировать его. :(
Примеры использования:
          void test()
              {
              // Размер этого массива, хоть и не указан, но может быть автоматически определен
              // компилятором при компиляции программы. Он равен 4 (четыре структуры POINT).

              POINT coord[] = { {110, 110}, {120, 120}, {130, 110}, {140, 120} };

              // Здесь размер массива известен при компиляции, т.к. он был определен тут же.

              for (int i = 0; i < sizearr (coord) - 1; i++)
                  txLine (coord[i].x, coord[i].y, coord[i+1].x, coord[i+1].y);

              DrawLines1 (coord);                  // Попытка передать массив без передачи размера.
              DrawLines2 (coord, sizearr (coord)); // Правильная передача размера массива.

              DrawLines3 (coord);                  // В принципе, можно и так, но тут ВОДЯТСЯ ШАБЛОНЫ.
              }

          // Функции DrawLines1 и DrawLines2 определены так:

          void DrawLines1 (const POINT coord[])
              {
              // Массивы в Си передаются как указатели на начало массива. Поэтому:
              // 1) sizearr здесь выдаст ошибку компиляции, и ее легко будет найти.
              // 2) SIZEARR здесь неверно посчитает размер, что намного хуже, чем ошибка компиляции,
              //      т.к. он будет равен sizeof (POINT*) / sizeof (POINT) == 4/8 == 0, что станет
              //      трудноуловимой логической ошибкой времени исполнения.

              for (int i = 0; i < sizearr (coord) - 1; i++)
                  txLine (coord[i].x, coord[i].y, coord[i+1].x, coord[i+1].y);
              }

          void DrawLines2 (const POINT coord[], int n)
              {
              // Здесь размер приходит как параметр n, так что все просто. Вызывающая сторона (функция
              // test) правильно вычисляет его и передает функции DrawLines2, которая им пользуется.

              for (int i = 0; i < n - 1; i++)
                  txLine (coord[i].x, coord[i].y, coord[i+1].x, coord[i+1].y);
              }

          // HIC SVNT TEMPLATES

          template <int size>
          void DrawLines3 (const POINT (&coord) [size])
              {
              for (int i = 0; i < size - 1; i++)
                  txLine (coord[i].x, coord[i].y, coord[i+1].x, coord[i+1].y);
              }

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

#define MAX (   a,
 
)

Возвращает максимальное из двух чисел

Аргументы:
aОдно из чисел :)
bДругое из чисел :)
Возвращает:
Максимальное из двух чисел a и b.
Предупреждения:
Это макрос, и аргументы a и b могут вычисляться в нем два раза. Поэтому не используйте в нем побочных действий ++, --, += и т.п. Например, не пишите так: int m = MAX (++x, y += 2);
См. также:
MIN()
Примеры использования:
          if (MAX (3, 7) != 7) printf ("Your CPU is broken, throw it away.");

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

#define MIN (   a,
 
)

Возвращает минимальное из двух чисел

Аргументы:
aОдно из чисел :)
bДругое из чисел :)
Возвращает:
Минимальное из двух чисел a и b.
Предупреждения:
Это макрос, и аргументы a и b могут вычисляться в нем два раза. Поэтому не используйте в нем побочных действий ++, --, += и т.п. Например, не пишите так: int m = MIN (x--, y /= 2);
См. также:
MAX()
Примеры использования:
          if (MIN (3, 7) != 3) printf ("Your CPU is still broken, throw it away twice.");

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

#define ROUND (   x)

Округляет число до целого

Аргументы:
xЧисло.   А вы как думали?  
Возвращает:
Округленное число, преобразованное в тип long.
Примеры использования:
          double weight = 5.5;        // 5.5 kilos is the weight of Maru in 2012.
          long Maru = ROUND (weight); // Should use ROUND() because Maru is so round. And long.

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

#define _TX_DESTROY_3D

Ну просто очень удобный макрос.

Предупреждения:
Это еще один пример, как не надо писать код.

Макрос определен так:

#define z 0

Замечательный макрос! Теперь на одну переменную в программе стало меньше. :((
Заметки:
(Используйте #undef. С <http://www.google.ru/search?q=%23undef>#undef ваша программа станет мягкой и шелковистой.)
Примеры использования:
          #define _TX_DESTROY_3D
          #include "TXLib.h"

          // А теперь попробуйте объявить переменную z для расчета 3-D координат x, y, z:

          int z = 0;  // Да! TXLib уничтожает трехмерность! Очень круто. :=/

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

#define please

Еще парочка макросов.

please увеличивает вероятность успешного выполнения кода*.

meow -- ...просто мяу :)

Заметки:
* Это шутка :)
Примеры использования:
          #include "TXLib.h"

          int x = rand() meow   // Как же без котиков?
          int y = rand() meow
          if (x+y > RAMD_MAX/2) please x = y = 0;

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

#define ZERO (   type)

Обнулитель типов, не имеющих конструкторов

Аргументы:
typeИмя типа.
Возвращает:
Значение типа type, покомпонентно инициализированное по умолчанию (для встроенных типов -- нулем).
Примеры использования:
          void f (POINT p);
          ...

          POINT z = {}; f (z);  // Так без ZERO

          f (ZERO (POINT));     // Так с ZERO

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

#define TX_AUTO_FUNC (   param_t,
  param,
  func 
)

Автоматический вызов функции при завершении другой функции (аналог __finally)

Аргументы:
param_tТип параметра автоматически вызываемой функции.
paramИмя параметра автоматически вызываемой функции.
funcТело автоматически вызываемой функции (фигурные скобки не обязательны).
Макрос TX_AUTO_FUNC (param_t, param, func)
Заметки:
  • Для автоматически вызываемой функции допускается только один параметр.
  • Его тип param_t и имя param должны соответствовать определению переменной, доступной в текущей области видимости.
    Параметр вызываемой функции будет связан с этой переменной через ссылку.
  • Синоним: TX_FINALLY
Предупреждения:
В Microsoft Visual Studio 6 и 2003 в отладочной конфигурации (Debug) этот макрос работать не будет, см. MS KB Article 199057. Можно обходиться макросом _TX_AUTO_FUNC, см. его определение в исходном тексте рядом с определением TX_AUTO_FUNC.
Макрос tx_auto_func (func)
Заметки:
  • Все переменные вызываемой функции связываются с переменными внешней функции по ссылке.
  • Их названия и типы не указываются. Указывается только тело вызываемой функции.
  • Эта форма использует лямбда-функции C++0x, поэтому при компиляции требуется MSVS 2010 или GCC не ниже версии 4.5 с ключом компиляции -std=c++0x или -std=c++11.
  • Синоним: tx_finally
См. также:
txAutoLock
Примеры использования:
          void f1()
              {
              int x = 1;
              TX_AUTO_FUNC (int, x, $(x));              // Will be printed at return

              FILE* f = fopen (__FILE__".o.txt", "w");  // Will be closed at return
              TX_AUTO_FUNC (FILE*, f, fclose (f));

              fprintf (f, "start: x = %d\n", x);        // Do some job
              x = 2;                                    // Do some job
              }

          void f2()                                     // Do the same. For C++0x only
              {
              int x = 1;
              tx_auto_func ($(x));                      // More simple usage

              FILE* f = fopen (__FILE__".o.txt", "w");
              tx_auto_func (fclose (f));                // More simple usage

              fprintf (f, "start: x = %d\n", x);
              x = 2;
              }

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

#define assert (   cond)

Замена стандартного макроса assert(), с выдачей сообщения через txMessageBox(), консоль и OutputDebugString().

Аргументы:
condУсловие для проверки.
Возвращает:
Не определено.

Если условие, проверяемое assert(), истинно, то макрос ничего не делает.
Если условие оказывается ложно, то выводится диагностическое сообщение и программа аварийно завершается.

Предупреждения:
При компиляции в режиме Release (или если определен NDEBUG) assert превращается в пустой оператор.
Не надо помещать в assert() действия, которые важны для работы алгоритма!
Заметки:
Если условие cond может быть вычислено уже во время компиляции как ложное, компилятор может предупредить об этом (как о делении на 0).
See: "JPL Institutional Coding Standard for the C Programming Language", Jet Propulsion Laboratory, California Institute of Technology, JPL DOCID D-60411, Ver. 1.0, March 3, 2009, page 15.
См. также:
asserted, verified, verify(), TX_ERROR(), TX_DEBUG_ERROR(), txOutputDebugPrintf(), txMessageBox(), txNotifyIcon(), txStackBackTrace(), __TX_FILELINE__, __TX_FUNCTION__
Примеры использования:
          assert (0 <= i && i < ARRAY_SIZE);

          FILE* input = fopen ("a.txt", "r");
          assert (input);

          // Этот вызов fgets() НЕ будет выполнен в режиме Release:
          assert (fgets (str, sizeof (str) - 1, input));

          // Здесь все будет правильно:
          bool ok = (fclose (input) == 0);
          assert (ok);

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

#define asserted

Выводит диагностическое сообщение в случае нулевого или ложного результата.

Возвращает:
Всегда 0.

Суффиксная форма макроса assert(), не теряющая в режиме Release исполнения предиката.

Заметки:
Предполагается, что операция в случае неуспеха возвращает 0 или false.

При компиляции в режиме Release (или если определен NDEBUG) asserted превращается в пустое место.
См. также:
assert(), verify(), verified, TX_ERROR(), TX_DEBUG_ERROR(), txOutputDebugPrintf(), txMessageBox(), txNotifyIcon(), txStackBackTrace(), __TX_FILELINE__, __TX_FUNCTION__
Примеры использования:
          FILE* input = fopen ("a.txt", "r"); assert (input);

          // Этот вызов fgets() будет выполнен в любом случае:
          fgets (str, sizeof (str) - 1, input) asserted;

          // Этот вызов fgets() НЕ будет выполнен в режиме Release:
          assert (fgets (str, sizeof (str) - 1, input));

          (fclose (input) != 0) asserted;

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

#define verify

Выполняет команду (вычисляет выражение) и проверяет результат.

Аргументы:
exprКоманда (выражение).
Возвращает:
1, если выражение expr истинно, иначе 0.

Если условие, проверяемое verify(), истинно, то макрос ничего не делает.
Если условие оказывается ложно, то выводится диагностическое сообщение и программа аварийно завершается.

Заметки:
Действие макроса аналогично assert(), но при компиляции в режиме Release (или если определен NDEBUG) verify не превращается в пустой оператор.
См. также:
verified, assert(), asserted, TX_ERROR(), TX_DEBUG_ERROR(), txOutputDebugPrintf(), txMessageBox(), txNotifyIcon(), txStackBackTrace(), __TX_FILELINE__, __TX_FUNCTION__
Примеры использования:
          FILE* input = verify (fopen ("a.txt", "r"));

          // Этот вызов fgets() БУДЕТ выполнен в режиме Release:
          verify (fgets (str, sizeof (str) - 1, input));

          // Здесь все тоже будет правильно:
          verify (fclose (input) == 0);

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

#define TX_ERROR (   msg)

Выводит развернутое диагностическое сообщение.

Аргументы:
msgСообщение с произвольным количеством параметров в стиле функции printf().
Заметки:
GCC в режиме строгого соответствия стандарту ANSI (с ключом командной строки -ansi) и Microsoft Visual Studio версий 6 и 2003 не поддерживают макросы с переменным числом параметров. Поэтому, если параметров несколько, они разделяются _ (символом подчеркивания, переопределенным в запятую) или символом TX_COMMA, вместо настоящей запятой, так как TX_ERROR -- макрос.
Если в проекте используются библиотеки boost, то их надо включать до TXLib.h и вместо символа подчеркивания пользоваться TX_COMMA, так как boost использует символ подчеркивания как свой собственный служебный макрос в модуле boost::preprocessor,   где творится дефайновый адЪ.  
Этот макрос может распечатывать стек вызовов функций в консоли. По этому поводу см. замечания к функции txStackBackTrace() и раздел Установка библиотеки, п.4.
Возвращает:
Всегда false.
См. также:
_, TX_COMMA, assert(), asserted, verify(), verified, TX_DEBUG_ERROR(), txOutputDebugPrintf(), txMessageBox(), txNotifyIcon(), txStackBackTrace(), __TX_FILELINE__, __TX_FUNCTION__
Примеры использования:
          TX_ERROR ("Не смог прочитать 'Войну и мир'. Отмазка %d: не нашел '%s'", reasonNum, fileName);

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

#define TX_DEBUG_ERROR

Выводит развернутое диагностическое сообщение в отладочном режиме.

Описание см. в TX_ERROR.

Заметки:
В режиме Release этот макрос не выводит ничего.
См. также:
_, TX_COMMA, assert(), asserted, verify(), verified, TX_ERROR(), txOutputDebugPrintf(), txMessageBox(), txNotifyIcon(), txStackBackTrace(), __TX_FILELINE__, __TX_FUNCTION__
Примеры использования:
          TX_DEBUG_ERROR ("Так и не смог прочитать 'Войну и мир'. Отмазка %d: потерял '%s'", reasonNum, fileName);

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

#define txStackBackTrace ( )

Распечатывает текущий стек вызовов функций в консоли.

Предупреждения:
Для корректной работы этой функкции требуются модули, которые нужно установить (скопировать) в папку Windows. См. раздел Установка библиотеки, п.4.
Заметки:
Для наиболее корректной работы этой функции полностью отключайте оптимизацию при компиляции. Например, для компилятора GCC g++ -- с помощью ключа командной строки -O0. Разные среды программирования позволяют задать эти ключи по-разному, например, в CodeBlocks через Главное меню -- Settings -- Compiler -- (Global Compiler Settings) -- (Compiler Settings) -- Other Options.
См. также:
txDump(), TX_ERROR(), TX_DEBUG_ERROR()
Примеры использования:
          void Recursion()  // http://google.ru/search?q=%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F
              {
              txStackBackTrace();

              printf ("Press any key...\n");
              _getch();

              Recursion();
              }

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

#define _

Макрос, позволяющий передать переменное число параметров в какой-либо другой макрос.

Заметки:
Символ подчеркивания и символ TX_COMMA просто переопределяются в запятую.
См. также:
TX_ERROR(), TX_DEBUG_ERROR()
Примеры использования:
          TX_ERROR ("Слишком умный абзац: роман 'Война и мир', файл '%s', строка %d" _ fileName _ lineNum);

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

#define __TX_FUNCTION__

Имя текущей функции

Предупреждения:
Если определение имени функции не поддерживается компилятором, то __TX_FUNCTION__ раскрывается в имя исходного файла и номер строки.

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

#define _TX_MODULE

Имя модуля TXLib, входит в диагностические сообщения.

Заметки:
Можно переопределять до включения файла TXLib.h.

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

#define txGDI (   command,
  dc 
)

Вызов функции Win32 GDI с автоматической блокировкой и разблокировкой.

Аргументы:
commandФункция GDI (возможно, возвращающая значение).
dcДескриптор контекста рисования (холста) для вызова функции.
Возвращает:
Значение, возвращаемое вызываемой функцией GDI.
Заметки:
Если параметр dc соответствует основному холсту TXLib (совпадает с возвращаемым значением txDC()), то на время выполнения функции GDI поток, обновляющий окно TXLib, блокируется.
Если в вызове функции GDI используются запятые, то используйте двойные скобки, чтобы получился один параметр, так как txGDI() это все же макрос.
См. также:
txDC(), txLock(), txUnlock()
Примеры использования:
          txGDI (( Rectangle (txDC(), x1, y1, x2, y2) ));  // Не забудьте про две ((ДВЕ)) скобки

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

#define TX_BEGIN_MESSAGE_MAP ( )

Заголовок карты сообщений (Message Map).

Раскрывается в
          virtual int dialogProc (HWND _wnd, UINT _msg, WPARAM _wParam, LPARAM _lParam) override
              {
              int _result = txDialog::dialogProc (_wnd, _msg, _wParam, _lParam);

              switch (_msg)
                  {
См. также:
TX_BEGIN_MESSAGE_MAP(), TX_END_MESSAGE_MAP, TX_HANDLE(), TX_COMMAND_MAP, txDialog::dialogProc(), txDialog
Примеры использования:
          Cм. реализацию функции txInputBox().

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

#define TX_HANDLE (   id)

Заголовок обработчика сообщения (Message handler) карты сообщений.

Аргументы:
idИдентификатор сообщения.
Раскрывается в
                  break;
                  case (id):
См. также:
TX_BEGIN_MESSAGE_MAP(), TX_END_MESSAGE_MAP, TX_HANDLE(), TX_COMMAND_MAP, txDialog::dialogProc(), txDialog
Примеры использования:
          Cм. реализацию функции txInputBox().

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

#define TX_COMMAND_MAP

Начало карты команд (Command map) в карте сообщений.

Раскрывается в
                  }  // Конец switch (_msg)

              if (_msg == WM_COMMAND)
                  switch (LOWORD (_wParam))
                      {
См. также:
TX_BEGIN_MESSAGE_MAP(), TX_END_MESSAGE_MAP, TX_HANDLE(), TX_COMMAND_MAP, txDialog::dialogProc(), txDialog
Примеры использования:
          Cм. реализацию функции txInputBox().

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

#define TX_END_MESSAGE_MAP

Завершитель карты сообщений.

Раскрывается в
                  }  // Конец switch (_msg) или switch (LOWORD (_wParam))

              return FALSE;
              }
См. также:
TX_BEGIN_MESSAGE_MAP(), TX_END_MESSAGE_MAP, TX_HANDLE(), TX_COMMAND_MAP, txDialog::dialogProc(), txDialog
Примеры использования:
          Cм. реализацию функции txInputBox().

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

#define __TX_DEBUG_MACROS   ("Группа отладочных $-макросов")

Отладочная печать переменной во время вычисления выражения или участка кода во время его выполнения.

Сделай приятными твои круглые сутки отладки!

Предупреждения:
Эти макросы могут измениться в будущих версиях.   Чтобы вам повеселее жилось.  
Назначение:
$ (var)   Печать имени и значения переменной или выражения var.
$_(var)   То же, что и , но без новой строки.
$x (var)   Печать имени и значения переменной или выражения var в 16-ричной системе счисления.
$x_(var)   То же, что и $x(var), но без новой строки.
$v (var, cond)   То же, что и , но различным цветом в зависимости от условия cond.
$v_(var, cond)   То же, что и $v(var), но без новой строки.
$$ (expr)   Печать выражения, его вычисление, печать и возврат значения.
Если выражение содержит оператор "запятая", не взятый в скобки, необходимо окружать expr еще одной парой скобок.
$$_(expr)   То же, что и $, но вторая печать идет без новой строки.
$$$ (expr)   То же, что и $, но для операторов или блоков кода (без возврата значения).
$$$_(expr)   То же, что и $$, но вторая печать идет без новой строки.
$$$$   Печать местоположения в коде.
$$$$_   Печать местоположения в коде (только имя функции).
$test (cond)   Печать результата теста различным цветом в зависимости от условия cond.
$unittest (code, ethalon)   Печать результата юнит-теста code с ожидаемым результатом ethalon.
$n   Перевод строки (печать '\n').
$nn   Пустая строка (печать '\n\n').
Установка атрибутов символов консоли:
$d   Светло-серый цвет     $D   Темно-серый цвет
$b   Светло-синий цвет     $B   Темно-синий цвет
$g   Светло-зеленый цвет     $G   Темно-зеленый цвет
$c   Светло-бирюзовый цвет     $C   Темно-бирюзовый цвет
$r   Светло-красный цвет     $R   Темно-красный цвет
$m   Светло-малиновый цвет     $M   Темно-малиновый цвет
$y   Желтый цвет     $Y   Темно-желтый цвет
$h   Белый цвет     $H   Прозрачный цвет
$o   OK   Светло-зеленый на зеленом     $O   OK bold   Желтый на зеленом   
$i   Information   Светло-синий на синем     $I   Information bold   Желтый на синем   
$w   Warning   Светло-малиновый на малиновом     $W   Warning bold   Желтый на малиновом   
$e   Error   Светло-красный на красном     $E   Error bold   Желтый на красном   
$f   Fatal   Черный на светло-красном     $F   Fatal bold   Малиновый на светло-красном   
$l   Location   Черный на темно-сером     $L   Location bold   Светло-серый на темно-сером   
$t (cond)   Светло-зеленый или светло-красный, в зависимости от условия cond.
$s   Запомнить атрибуты. При выходе из { блока кода } атрибуты восстанавливаются.
$s*   Запомнить атрибуты и установить цвет (замените звездочку кодом цвета, см. выше). Пример: $sg - запомнить атрибуты и установить светло-зеленый цвет.

Что такое юнит-тест? А вот что: www.google.com/search?q=Юнит-тестирование+C++. Это когда ошибки ищутся сами.

См. также:
assert(), asserted, __TX_FILELINE__, __TX_FUNCTION__, TX_ERROR
Примеры использования:
          $g  // green
          int x = 5;
          int y = $(x) + 1;
          $$( x = $(y) + 2 );

          $r  // red
          double xy = $$( pow (x, y) );

          $$$$
          double h  = $$(( $(x) = x*x, y = y*y, sqrt ($(x+y)) ));

          $$( txCreateWindow (800, 600) );

          $d  // default color
          $$$( if ($(xy) < $(h)) { $sE return $(h); } );  // save color, print in error color, restore color

          $t (h, h < 10);  // print a result in success color or error color

          bool isPositive = (h > 0);
          $test (isPositive);             // print a test result

          $unittest (strlen ("abc"), 3);  // checks in unit-test style

          $$$$

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

#define SIZEARR (   arr)    ( sizeof (arr) / sizeof (0[arr]) )

Замена макросу sizearr() для работы в Microsoft Visual Studio 6

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


Функции

int txUpdateWindow ( int  update = true) [inline]

Разрешает или запрещает автоматическое обновление изображения в окне.

Аргументы:
updateРежим обновления (true -- разрешить, false -- запретить). Необязателен. Если не указан, то "разрешить".
Возвращает:
Предыдущее состояние режима обновления.

В отличие от txBegin() и txEnd(), которые поддерживают вложенные вызовы и работают как "скобки для замерзания картинки", txUpdateWindow() позволяет явно установить или снять блокировку автоматического обновления экрана.

Более полную информацию о блокировке см. в функциях txBegin(), txEnd(), txSleep() и txDC().

См. также:
txBegin(), txEnd(), txSleep(), txUpdateWindow(), txDC(), txTextCursor(), txLock(), txUnlock(), txGDI()
Примеры использования:
          txUpdateWindow (false);
          ...
          txUpdateWindow();
bool txSelectObject ( HGDIOBJ  obj,
HDC  dc = txDC() 
)

Устанавливает текущий активный объект GDI.

Аргументы:
objДескриптор объекта GDI.
dcХолст (контекст рисования), в котором устанавливается текущий активный объект GDI. Необязателен.
Возвращает:
Если операция была успешна -- true, иначе -- false.
Заметки:
Предыдущий выбранный объект того же типа (PEN/BRUSH/BITMAP и т.п.), как и obj, уничтожается.
См. также:
txSetColor(), txGetColor(), txSetFillColor(), txGetFillColor(), txColors, RGB(), txSelectFont()
Примеры использования:
          HPEN pen = CreatePen (PS_DASH, 1, RGB (255, 128, 0));
          txSelectObject (pen);
bool txIDontWantToHaveAPauseAfterMyProgramBeforeTheWindowWillClose_AndIWillNotBeAskingWhereIsMyPicture ( )

Делает нечто иногда удобное. См. название функции.

Возвращает:
Если операция была успешна -- true, иначе -- false.

У этой функции есть синоним с простым понятным названием, поищите его в файле библиотеки, около определения этой функции. Или можно   скопировать   набрать это километровое имя и посмотреть, что получится.

См. также:
txCreateWindow(), txSleep()
Примеры использования:
          int main()
              {
              txCreateWindow (800, 600);

              txSetTextAlign (TA_CENTER);
              txTextOut (txGetExtentX()/2, txGetExtentY()/2, "Press any key to exit!");
bool txPlaySound ( const char  filename[] = NULL,
DWORD  mode = SND_ASYNC 
)

Воспроизводит звуковой файл.

Аргументы:
filenameИмя звукового файла. Необязательно. Если не указано или NULL, то останавливает звук.
modeРежим воспроизведения. Необязательно. Если не указан, то SND_ASYNC (см. ниже).
Возвращает:
Если операция была успешна -- true, иначе -- false.
Режимы воспроизведения:
SND_ASYNC   Звук проигрывается одновременно с работой программы.
Чтобы отменить звучание, вызовите txPlaySound (NULL).
SND_SYNC   Выполнение программы приостанавливается до окончания воспроизведения звука.
SND_LOOP   Зацикливать звук при воспроизведении.
Чтобы отменить звучание, вызовите txPlaySound (NULL).
SND_NODEFAULT   Не использовать звук по умолчанию, если нельзя проиграть указанный звуковой файл.
SND_NOSTOP   Если какой-либо звук уже проигрывается, не останавливать его для запуска указанного звука.
SND_APPLICATION   Проигрывать звук, используя программу, зарегистрированную для данного типа звуковых файлов.
Заметки:
Поддерживаются только файлы в формате WAV. Остальные форматы (MP3 и др.) надо перекодировать в WAV. Переименование со сменой расширения не поможет, как и в случае с форматом картинок в txLoadImage().
Примеры использования:
          txPlaySound ("tada.wav");  // So happy that this always exists
int txMessageBox ( const char  text[],
const char  header[] = "TXLib сообщает",
unsigned  flags = 0 
)

Выводит сообщение в окне с помощью функции MessageBox.

Аргументы:
textТекст сообщения.
headerЗаголовок сообщения. Необязательно.
flagsФлаги отображения сообщения. Необязательно.
Возвращает:
Значение, возвращаемое функцией MessageBox.
Предупреждения:
Текст не должен превышать _TX_BIGBUFSIZE символов, а заголовок -- _TX_BIGBUFSIZE символов, иначе они обрезаются.
Заметки:
Вместо txMessageBox (text, header, flags) можно использовать стандартную функцию Win32 MessageBox (txWindow(), text, header, flags). Отличия txMessageBox в том, что она автоматически подставляет окно-родитель, и в том, что при выводе в окно строчки переводятся в формат UNICODE. Это важно лишь в том случае, когда в региональных настройках контрольной панели Windows неверно установлена кодовая страница для программ, не поддерживающих UNICODE. В остальных случаях нужды в txMessageBox нет.
См. также:
TX_ERROR(), TX_DEBUG_ERROR(), txOutputDebugPrintf(), txNotifyIcon(), txStackBackTrace()
Примеры использования:
          if (txMessageBox ("Получилось?", "Прочти меня", MB_YESNO) == IDYES)
              {
              MessageBox (txWindow(), "Хватит и обычного MessageBox()", "Win32 сообщает", 0);
              }
          else
              txMessageBox ("Спасаем от кракозябл вместо русских букв. Гарантия. Недорого.");
bool txNotifyIcon ( unsigned  flags,
const char  title[],
const char  format[],
  ... 
)

Выводит всплывающее сообщение в системном трее.

Аргументы:
flagsФлаги сообщения.
titleЗаголовок сообщения.
formatСтрока для печати, как в printf().
Флаги сообщения:
NIIF_INFO   Информация
NIIF_WARNING   Предупреждение
NIIF_ERROR   Сообщение об ошибке
Возвращает:
Удалось ли отобразить сообщение.

Функция формирует сообщение по правилам printf() и выводит во всплывающем окне.

Предупреждения:
  • Эта функция требует, чтобы при компиляции константа версии Internet Explorer (_WIN32_IE) была задана не ниже 0x0500. Для этого надо либо включить TXLib.h вместо windows.h или перед ним. Либо надо самостоятельно определить (#define) эту константу.
    С версией Internet Explorer это связано потому, что при его установке в Windows обновляются многие компоненты (например, shell32.dll и comctl32.dll), которые влияют на функциональность системы независимо от использования браузера). Сам Internet Explorer в отображении сообщения не участвует.
  • Сообщение не должно превышать _TX_BUFSIZE символов, иначе оно обрезается.
См. также:
TX_ERROR(), TX_DEBUG_ERROR(), txOutputDebugPrintf(), txMessageBox()
Примеры использования:
          int hours = 3, minutes = 10;
          const char station[] = "Юму";
          ...
          txNotifyIcon (NIIF_INFO, "Уважаемые пассажиры",
                        "Поезд на %s отправляется в %d:%d.", station, hours, minutes);
int txOutputDebugPrintf ( const char  format[],
  ... 
)

Выводит сообщение в отладчике.

Аргументы:
formatСтрока для печати, как в printf().
Возвращает:
Количество напечатанных символов.

Функция формирует сообщение по правилам printf() и передает его в OutputDebugString(). Ее вывод можно перехватить отладчиком или утилитами-логгерами, например, DbgView. Если этого не сделать, и не задать первый символ '\a' (см. ниже), то о сообщении никто не узнает. :(

Заметки:
  • Если первый символ в строке '\a', то сообщение также дублируется txMessageBox().
  • Если первый или второй символ в строке '\f', то сообщение также дублируется printf().
Предупреждения:
Сообщение не должно превышать _TX_BIGBUFSIZE символов, иначе оно обрезается.
См. также:
TX_ERROR(), TX_DEBUG_ERROR(), txNotifyIcon(), txMessageBox(), txStackBackTrace()
Примеры использования:
          int x = 42;
          ...
          txOutputDebugPrintf ("Никто не узнает, что %d.\n", x);
int random ( int  range) [inline]

Генератор случайных чисел

Аргументы:
rangeПравая граница диапазона (не включая саму границу).
Возвращает:
Случайное целое число в диапазоне [0; range).

Вы еще помните, что означают разные скобочки в обозначении интервалов? :)

Предупреждения:
Эта функция может мяукать.   Just because it can.   Потому что она не часть стандарта С++ или Windows, а зависит от TXLib'а. Если это вам не нравится, вы можете написать ее сами, с помощью стандартной функции rand() и операции остатка от деления %. Подсказка: rand() % range.
Примеры использования:
          char message[100] = "Maybe...";
          sprintf (message, "You SUDDENLY got %d bucks now. But note that tax rate is $%d.", random (100), 100);
          txMessageBox (message, "Lottery");
double random ( double  left,
double  right 
) [inline]

Генератор случайных чисел

Аргументы:
leftЛевая граница диапазона (включая саму границу).
rightПравая граница диапазона (включая саму границу).
Возвращает:
Случайное целое число в диапазоне [left; right].

Вы все еще помните, что означают разные скобочки в обозначении интервалов? :)

Предупреждения:
Эта функция может мяукать.   Just in case.   Потому что она не часть стандарта С++ или Windows, а зависит от TXLib'а. Если это вам не нравится, вы можете написать ее сами, с помощью стандартной функции rand() и небольшой   уличной   магии с делением на RAND_MAX и   таинственной   операцией вычитания.
Примеры использования:
          int money = random (-100, +100);
          if (money < 0)
              {
              char message[100] = "Maybe...";
              sprintf ("Проиграли в лотерею? Отдайте долг в %d рублей", -money);
              txMessageBox (message, "Быстро!");
              }
bool In ( Tx  x,
Ta  a,
Tb  b 
) [inline]

Проверка, находится ли параметр х внутри замкнутого интервала [a; b].

Аргументы:
xПроверяемый параметр.
aЛевая граница (включительно).
bПравая граница (включительно).
Возвращает:
Если a <= x && x <= b, то истина, если нет -- ложь.
Предупреждения:
Эта функция может мяукать.   Because cats are power!   Потому что она не часть стандарта С++ или Windows, а зависит от TXLib'а. Если это вам не нравится, вы можете написать ее сами, используя неравенства.
Примеры использования:
          while (txMouseButtons() != 1)
              {
              if (In (txMouseX(), 110, 120)) txTextOut (100, 100, "Meet the wall!");
              txSleep (0);
              }
bool In ( const POINT &  pt,
const RECT &  rect 
) [inline]

Проверка, находится ли точка pt внутри прямоугольника rect.

Аргументы:
ptПроверяемая точка в виде POINT {x, y} .
rectПрямоугольник в виде RECT {left, top, right, bottom} .
Возвращает:
Результат проверки.

Удобно для реализации экранных кнопок, нажимаемых курсором мыши.

Предупреждения:
Эта функция может мяукать.   Because cats are always right.   Потому что она не часть стандарта С++ или Windows, а зависит от TXLib'а. Если это вам не нравится, вы можете написать ее сами.
Примеры использования:
          RECT button = { 100, 100, 150, 120 };

          txSetFillColor (TX_LIGHTGRAY);
          txRectangle (button.left, button.top, button.right, button.bottom);

          txSetTextAlign();
          txSetFillColor (TX_WHITE);
          txTextOut (125, 115, "Cookie");

          for (;;)
              {
              if (In (txMousePos(), button))
                  {
                  txSetFillColor (TX_TRANSPARENT);
                  txRectangle (button.left, button.top, button.right, button.bottom);

                  if (txMouseButtons())
                      {
                      txSetFillColor (TX_DARKGRAY);
                      txRectangle (button.left, button.top, button.right, button.bottom);

                      txSetFillColor (TX_WHITE);
                      txTextOut (125, 115, "You got cookie");

                      break;
                      }
                  }

              txSleep (0);
              }
void tx_fpreset ( )

Переинициализирует математический сопроцессор

Сбрасывает состояние математического сопроцессора, вызывая _fpreset() и разрешая генерацию исключений сопроцессора для неверного результата (_EM_INVALID), денормализации (_EM_DENORMAL), деления на ноль (_EM_ZERODIVIDE), переполнения (_EM_OVERFLOW) и антипереполнения (_EM_UNDERFLOW). Обычный вызов _fpreset() эти исключения маскирует, в результате чего вычислительные ошибки могут оказаться незамеченными.

Если вы хотите замаскировать эти исключения, вызывайте обычный _fpreset(), и затем проверяйте результат вычислений на достоверность хотя бы с помощью std::isfinite (x).

Заметки:
Поведение TXLib по умолчанию -- генерация этих исключений и их перехват TXLib'ом в виде ошибки.

См. [1] пример работы с этими исключениями, [2] статью о них.
Примеры использования:
double txSqr ( double  x) [inline]

Очень удобное возведение числа в квадрат.

Аргументы:
xЧисло для возведения в него.
Возвращает:
Квадрат, полученный путем возведения в него числа, заданного для возведения в квадрат.
Заметки:
Это пример, как не надо писать код: txSqr() -- функция с "медвежьей услугой". Иногда встречаются те, кто любит печатать в функции результат ее вычислений (не данные для отладки, а именно результат), вместо того, чтобы просто возвращать его туда, где эту функцию вызывали. Пусть эти люди воспользуются приведенной txSqr() для какого-нибудь нужного дела, особенно в цикле. Пример, конечно, несколько преувеличен. См. в исходном тексте код этой навязчивой радости.
Примеры использования:
          printf ("\n" "Радиус\t\t" "Площадь круга\n\n");

          for (double r = 100; r > 0; r--)
              {
              printf ("%6.2lf...", r);

              double square = M_PI * txSqr (r);  // Надолго запомним эту площадь!
              printf ("\b\b\b   \t");

              printf ("%-.2lf\n", square);
              }

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

void txDump ( const void *  address,
const char  name[] = "txDump()" 
)

Распечатывает дамп области памяти в консоли.

Аргументы:
addressАдрес начала распечатки.
nameНазвание распечатки (усекается до 8 символов). Необязательно.
Заметки:
Распечатывается область памяти размером 256 байт.
См. также:
txStackBackTrace(), TX_ERROR(), TX_DEBUG_ERROR()
Примеры использования:
          const char text[] = "Каждому лектору -- в портфель по вектору";
          txDump (text);
WNDPROC txSetWindowsHook ( WNDPROC  wndProc = NULL)

Устанавливает альтернативную функцию обработки оконных сообщений Windows (оконную функцию) для окна TXLib.

Аргументы:
wndProcНовая оконная функция окна TXLib.
Если не указана или NULL, то текущая альтернативная оконная функция удаляется и устанавливается стандартная.
Возвращает:
Адрес предыдущей оконной функции для окна TXLib.

Заданная оконная функция будет вызываться до обработки события средствами TXLib. Она должна быть функцией со следующим прототипом:

          LRESULT CALLBACK NewWndProc (HWND window, UINT message, WPARAM wParam, LPARAM lParam);
Предупреждения:
Оконная функция будет вызываться из вспомогательного (второго) потока, создаваемого txCreateWindow(). Это не тот же самый поток, в котором выполняется main(). В связи с этим будьте внимательны при работе с глобальными переменными или их аналогами, т.к. может возникнуть "гонка потоков" (race condition).
Если оконная функция вернет значение, не равное 0, то стандартная обработка сообщений средствами TXLib не будет произведена. Из-за этого, возможно, окно даже не сможет нормально закрыться. Придется завершать программу с помощью Alt-Ctrl-Del из диспетчера задач, или из более продвинутого диспетчера Process Explorer. Если Вы берете на себя обработку оконных сообщений, делайте ее по правилам Win32 (см. MSDN), включая вызов DefWindowProc().
Заметки:
Полностью поменять оконную функцию можно с помощью функций SetWindowLong или SetWindowLongPtr:
          WNDPROC OldWndProc = (WNDPROC) SetWindowLongPtr (txWindow(), GWL_WNDPROC, (LONG_PTR) NewWndProc);
При этом надо обязательно всегда вызывать старую оконную функцию с помощью CallWindowProc, (см. MSDN), иначе последствия будут такими же плачевными, как описаны выше.
См. также:
txCreateWindow(), txDialog, txInputBox()
Примеры использования:
          LRESULT CALLBACK MyWndProc (HWND window, UINT message, WPARAM wParam, LPARAM lParam);

          int main()
              {
              txCreateWindow (GetSystemMetrics (SM_CXSCREEN) / 4, GetSystemMetrics (SM_CYSCREEN) / 4);

              txSetWindowsHook (MyWndProc);

              txDrawText (0, 0, txGetExtentX(), txGetExtentY(), "MOV txWindow, eax [please]");

              return 0;
              }

          LRESULT CALLBACK MyWndProc (HWND window, UINT message, WPARAM wParam, LPARAM lParam)
              {
              if (message == WM_MOVE) txMessageBox ("  I like to MOVe it, MOVe it", "TXLib 2 Real", MB_ICONINFORMATION);

              static int i = 0;
              if (i++ % 15 == 0)
                  {
                  char str[2] = {"-\\|/" [i/15 % 4]};  // Прропппеллллерррр
                  SetWindowText (txWindow(), str);
                  }

              return 0;  // Продолжить обработку сообщения средствами TXLib
              }
bool txLock ( bool  wait = true)

Блокировка холста (контекста рисования).

Аргументы:
waitОжидать конца перерисовки окна вспомогательным потоком. Если не указано, то "ожидать".
Возвращает:
Состояние блокировки.

Перед вызовом любых функций Win32 GDI необходимо заблокировать холст функцией txLock() и затем разблокировать с помощью txUnlock(). Это связано с тем, что обновление содержимого окна (для тех, кто знает Win32: обработка сообщения WM_PAINT) в библиотеке TXLib происходит в отдельном вспомогательном потоке. Надолго блокировать его нельзя -- при заблокированном потоке окно не обновляется.

txLock() использует EnterCriticalSection(), и физически приостанавливает поток, обновляющий окно, так что надолго блокировать нельзя. Иначе тормозится обработка оконных сообщений, окно перестает реагировать на действия пользователя и перерисовываться. Нельзя также вызывать txSleep() или Sleep() при заблокированном потоке.

txLock() / txUnlock() -- это низкоуровневый механизм. Он отличается от более простого высокоуровневого механизма txBegin() / txEnd() / txUpdateWindow(), который не приостанавливает поток, а просто отключает принудительное постоянное обновление окна.

См. также:
txDC(), txLock(), txUnlock(), txGDI()
Примеры использования:
См. исходный текст функций _txCanvas_OnPAINT() и _txConsole_Draw() в TXLib.h.
bool txUnlock ( )

Разблокировка холста

Возвращает:
Состояние блокировки (всегда false).

Более подробно см. в описании txLock().

См. также:
txDC(), txLock(), txGDI()
Примеры использования:
См. исходный текст функций _txCanvas_OnPAINT() и _txConsole_Draw() в TXLib.h.

Переменные

const double txPI

Число Пи

Примеры использования:
          if (txPI == 1) txMessageBox ("Вы попали в другую Вселенную.", "Поздравляем", MB_ICONSTOP);

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