Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

Функция Возвращает количество байт, требуемых для хранения битового образа.

 
 Синтаксис          #include <graphics.h>
 
                    unsigned far  imagesize(int left,  int top,
 
                     int right, int bottom);
 
 
 
 Файл, содержащий   graphics.h
 
 прототип
 
 
 
 Описание           imagesize определяет    размер   области   памяти,
 
                    требуемой  для  хранения  битового  образа.   Если
 
                    размер, требуемый для выбранного образа больше или
 
                    равен 64К-1 байт, imagesize возвращает 0хFFFF(-1).
 
 
 
 Возвращаемое       imagesize возвращает размер требуемой области
 
 значение           памяти в байтах.
 
 
 
 Переносимость      Функция уникальна  для  Borland C++.  Она работает
 
                    только на компьютерах IBM PC и совместимых с ними,
 
                    оснащенных дисплейными адаптерами, поддерживающими
 
                    графический  режим.  Функция   не   совместима   с
 
                    Windows.
 
 
 
 Смотри также       getimage, putimage
 
 
 
 Пример:
 
 
 
 #include <graphics.h>
 
 #include <stdlib.h>
 
 #include <stdio.h>
 
 #include <conio.h>
 
 
 
 #define ARROW_SIZE 10
 
 
 
 void draw_arrow(int x,int y);
 
 
 
 int main(void)
 
 {
 
 int graphdriver = DETECT, gmode, errorcode;
 
 void *arrow;
 
 int x,y,maxx;
 
 unsigned int size;
 
 
 
 /* инициализация драйвера и локальных переменных */
 
 initgraph(&graphdriver,&gmode,"");
 
 
 
 /* получение результата инициализации */
 
 errorcode = graphresult();
 
 if(errorcode != grOk)  /* если ошибка */
 
 {
 
    printf("Ошибка :%s\n",grapherrormessage(errorcode));
 
    printf("Для останова нажмите любую клавишу\n");
 
    getch();
 
    exit(1);  /* завершение с кодом ошибки */
 
 }
 
 maxx = getmaxx();
 
 x = 0;
 
 y = getmaxy()/2;
 
 /* нарисовать перемещаемый объект */
 
 draw_arrow(x,y);
 
 /* определить размер памяти, для хранения изображения */
 
 size = imagesize(x,y-ARROW_SIZE,x+(4*ARROW_SIZE),y+ARROW_SIZE);
 
 /* выделить память */
 
 arrow = malloc(size);
 
 /* взять изображение */
 
 getimage(x,y-ARROW_SIZE,x+(4*ARROW_SIZE),y+ARROW_SIZE,arrow);
 
 /* продолжать, пока не будет нажата клавиша */
 
 while(!kbhit())
 
 {
 
    /* стереть старый образ */
 
    putimage(x,y-ARROW_SIZE,arrow,XOR_PUT);
 
    x += ARROW_SIZE;
 
    if(x >= maxx)
 
       x = 0;
 
    /* нарисовать изображение */
 
    putimage(x,y-ARROW_SIZE,arrow,XOR_PUT);
 
 }
 
 
 
 free(arrow);
 
 closegraph();
 
 return 0;
 
 }
 
 
 
 void draw_arrow(int x,int y)
 
 {
 
    /* нарисовать на экране стрелку */
 
    moveto(x,y);
 
    linerel(4*ARROW_SIZE,0);
 
    linerel(-2*ARROW_SIZE,-1*ARROW_SIZE);
 
    linerel(0,2*ARROW_SIZE);
 
    linerel(2*ARROW_SIZE,-1*ARROW_SIZE);
 
 }


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS