LuckyELF
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору // Рисует окошко в текстовом режиме void ShowWin (byte xPos, byte yPos, byte xSize, byte ySize, byte Bolder, byte Shadow, byte Color, byte Paper, const char *Title) { // Расчет недостоющих координат int y, x, yEnd = yPos + ySize, xEnd = xPos + xSize; // Установка цвета символов и фона textcolor (Color); textbackground (Paper); // Рисуем квадратик for (y = yPos; y <= yEnd; y++) for (x = xPos; x <= xEnd; x++) { gotoxy (x, y); cprintf (" "); } // Проводим вертикальные линии for (y = yPos; y <= yEnd; y++) { gotoxy (xPos, y); cprintf ("%c", LineV [Bolder]); gotoxy (xEnd, y); cprintf ("%c", LineV [Bolder]); } // Проводим горизонтальные линии for (x = xPos; x <= xEnd; x++) { gotoxy (x, yPos); cprintf ("%c", LineG [Bolder]); gotoxy (x, yEnd); cprintf ("%c", LineG [Bolder]); } // Рисуем уголки окошка gotoxy (xPos, yPos); cprintf ("%c", LeftUp [Bolder]); gotoxy (xPos, yEnd); cprintf ("%c", LeftDown [Bolder]); gotoxy (xEnd, yPos); cprintf ("%c", RightUp [Bolder]); gotoxy (xEnd, yEnd); cprintf ("%c", RightDown [Bolder]); // Если есть надпись, то выведем ее в верху окошка if (Title) { // Расчитаем середину окна int midx = xPos + (xSize / 2) - (strlen (Title) / 2) + xSize % 2; gotoxy (midx, yPos); cprintf ("%s", Title); } // Если окошко должно быть с тень, то нарисуем ее if (Shadow) { int i; word buf_size = xSize * 2 + 1; byte *pbuf; byte *buf = new byte [buf_size]; gettext (xPos + 2, yEnd + 1, xEnd + 2, yEnd + 1, buf); for (pbuf=&buf[1], i=0; i<buf_size; *pbuf=1+2+4, i+=2, pbuf+=2); puttext (xPos + 2, yEnd + 1, xEnd + 2, yEnd + 1, buf); delete [] buf; buf_size = ySize * 2 * 2 + 1; buf = new byte [buf_size]; gettext (xEnd + 1, yPos + 1, xEnd + 2, yEnd, buf); for (pbuf=&buf[1], i=0; i<buf_size; *pbuf=1+2+4, i+=2, pbuf+=2); puttext (xEnd + 1, yPos + 1, xEnd + 2, yEnd, buf); delete [] buf; } } |