ВЫВОД ТЕКСТА В ГРАФИЧЕСКОМ РЕЖИМЕ. Программирование на Си/С


Добавил:DMT
Дата создания:28 июня 2008, 22:14
Дата обновления:28 июня 2008, 22:51
Просмотров:13295 последний сегодня, 13:22
Комментариев: 0

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

void outtextxy(int x, int y, char far *textstring);

void outtext(char far *textstring), где (x,y) - координаты точки, относительно которой производится вывод текстовой строки, находящейся по адресу textstring .

Для изменения размера букв применяется функция

void settextstyle(int font, int direction, int charsize),

где font - номер шрифта для вывода букв; direction - направление (горизонтальное либо вертикальное); charsize - коэффициент увеличения размера шрифта. Например, чтобы увеличить в два раза размер шрифта, установленного по умолчанию, следует вызвать функцию settextstyle следующим образом:

settextstyle(DEFAULT_FONT, HORIZ_DIR, 2).

Вывод текста производится относительно опорной точки. Опорная точка в выводимой строке может занимать одно из 9 различных положений - в верхней левой точке, в верхней средней, в верхней правой и т.д. (Перебираются все пары слов, полученные комбинированием одного из слов "верхняя", "средняя", "нижняя" с одним из слов "левая", "средняя", "правая"). Положение опорной точки изменяется функцией void settextjustify(int horiz, int vert), где целые числа horiz и vert принимают значения 0, 1, 2 . По умолчанию текст выводится так, что опорная точка CP находится в левом верхнем углу пространства, занимаемого текстом. Например, после вызова outtext("ababababa") положение выведенного текста и CP будет следующим:


Если же изменить положение опорной точки с помощью settextjustify(1, 1) , то после вызова outtext("abababa") точка CP будет в центре текста.

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

 

Код на C++
  1. #define ENTER 13
  2.  
  3. int gscanf(int xsym, int ysym, char *text, ...)
  4. {
  5. va_list aptr; char str[140]; int count=0;
  6. va_start(aptr, str );
  7. while ((str[count]=getch())!=ENTER)
  8. {
  9. str[count+1]='\0';
  10. gprintf(xsym+count,ysym,str+count);
  11. count++ ;
  12. }
  13. vsscanf(str, text, aptr);
  14. va_end(aptr);
  15. return count;
  16. }
  17. int gprintf (int xsym, int ysym, char *text, ... )
  18. {
  19. va_list aptr; char str[140]; int count;
  20. va_start (aptr, text);
  21. count = vsprintf (str, text, aptr);
  22. outtextxy ((xsym-1)*textwidth ("M"),
  23. (ysym-1)*(2+textheight ("M")),str);
  24. va_end (aptr);
  25. return count;
  26. }
При использовании обязательна ссылка на http://DMTSoft.ru
up