1. Сделаем всё тоже самое, что мы делали тут https://programming.mybb.ru/viewtopic.php?id=263
2. Напишим код main.cpp:
#include <conio.h>
#include <graphics.h>
#include <cstring.h>
#include <stdlib.h>
#include <bios.h>
#define CREATE 0x00
#define RESIZE 0x01
#define PAINT 0x02
/// WINDOW
typedef struct {
string title;
int x;
int y;
int width;
int height;
int bkcolor;
} WINDOW;
void clear_window(WINDOW w) {
for(int y=w.y-2; y<w.y+w.height+3; y++) {
for(int x=w.x-2; x<w.x+w.width+3; x++) {
putpixel(x, y, getbkcolor());
}
}
}
void paint_window(WINDOW w) {
setcolor(LIGHTGRAY);
rectangle(w.x-2, w.y-2, w.x+w.width+2, w.y+w.height+2);
rectangle(w.x, w.y, w.x+w.width, w.y+w.height);
rectangle(w.x, w.y, w.x+w.width, w.y+20);
setfillstyle(SOLID_FILL, BLUE);
floodfill(w.x+2, w.y+2, LIGHTGRAY);
setcolor(WHITE);
outtextxy(w.x+10, w.y+5, w.title.c_str());
floodfill(w.x+2, w.y+2, LIGHTGRAY);
setfillstyle(SOLID_FILL, w.bkcolor);
floodfill(w.x+2, w.y+25, LIGHTGRAY);
}
WINDOW create_window(string title, int x, int y, int width, int height) {
WINDOW w;
w.x = x;
w.y = y;
w.width = width;
w.height = height;
w.title = title;
w.bkcolor = WHITE;
return w;
}
void draw_pixel(WINDOW w, int x, int y, int color) {
putpixel(w.x+x+2, w.y+y+17, color);
}
WINDOW move_window(WINDOW w, int x, int y) {
w.x = x;
w.y = y;
return w;
}
WINDOW resize_window(WINDOW w, int width, int height) {
w.width = width;
w.height = height;
return w;
}
WINDOW set_window_title(WINDOW w, string title) {
w.title = title;
return w;
}
/// MAIN
int main(void) {
int GraphDriver = DETECT;
int GraphMode;
int ErrorCode;
char *buf;
WINDOW w;
int none=0;
unsigned int msg = CREATE;
initgraph(&GraphDriver, &GraphMode, "");
ErrorCode = graphresult();
if(ErrorCode != grOk){
exit(1);
}
setbkcolor(CYAN);
while(!kbhit()) {
switch(msg) {
case CREATE:
w = create_window("Test Window", 10, 10, 120, 140);
paint_window(w);
getch();
msg = RESIZE;
break;
case RESIZE:
clear_window(w);
w = move_window(w, 15, 25);
w = resize_window(w, 600, 400);
w = set_window_title(w, "New Title");
paint_window(w);
getch();
msg = PAINT;
break;
case PAINT:
for(int i=0; i<40; i++)
draw_pixel(w, i, i, RED);
break;
}
}
getch();
closegraph();
return 0;
}Результат:
