用c语言graphics.h和虚拟码写一个在Dev-c++中的在图形窗口的输入程序。当用户按键时,在图形窗口出现按下的键所代表的字符,并像图形界面的输入框一样自动向右递进,按下回车键结束输入,将用户输入的内容在终端窗口显示出来。并在此基础上,实现当前位置光标闪烁,并支持左右方向键和两个删除键。
时间: 2023-11-27 11:53:16 浏览: 129
用C语言写的一个图形界面程序
由于Dev-C++中的graphics.h库已经过时,您需要使用BGI(Borland Graphics Interface)库来绘制图形界面。以下是一个简单的示例代码:
```c
#include <graphics.h>
#include <conio.h>
#include <ctype.h>
int main()
{
int gd = DETECT, gm;
initgraph(&gd, &gm, "");
char input[100] = ""; // 存储用户输入的字符串
int cursor_x = 50; // 光标初始位置
int cursor_y = 50;
int cursor_width = textwidth("|"); // 光标宽度
int blink_count = 0; // 用于控制光标闪烁
int blink_speed = 10;
while (1) {
// 绘制输入框
setcolor(WHITE);
rectangle(50, 50, 350, 100);
// 绘制用户输入的字符串
setcolor(YELLOW);
outtextxy(55, 70, input);
// 绘制光标
if (blink_count < blink_speed / 2) {
setcolor(WHITE);
line(cursor_x, cursor_y,
cursor_x, cursor_y + textheight("|"));
}
blink_count++;
if (blink_count >= blink_speed) {
blink_count = 0;
}
// 处理键盘输入
if (kbhit()) {
char ch = getch();
if (ch == '\r') { // 回车键结束输入
break;
}
if (ch == '\b') { // 退格键删除字符
if (strlen(input) > 0) {
input[strlen(input) - 1] = '\0';
}
cursor_x -= textwidth("|");
}
if (ch == 0 || ch == 224) { // 处理方向键和删除键
ch = getch();
if (ch == 75 && cursor_x > 50) { // 左方向键
cursor_x -= textwidth("|");
}
if (ch == 77 && cursor_x < 350 - textwidth("|")) { // 右方向键
cursor_x += textwidth("|");
}
if (ch == 83 && strlen(input) > 0) { // 删除键
input[strlen(input) - 1] = '\0';
}
}
if (isprint(ch)) { // 可打印字符
if (strlen(input) < 98) { // 防止字符串溢出
input[strlen(input)] = ch;
input[strlen(input) + 1] = '\0';
}
cursor_x += textwidth("|");
}
}
delay(50);
cleardevice();
}
// 将输入的字符串在终端窗口显示出来
printf("Your input is: %s\n", input);
closegraph();
return 0;
}
```
在上面的代码中,我们使用了BGI库提供的函数来绘制图形界面,如`initgraph()`、`rectangle()`、`outtextxy()`和`line()`等。我们使用了一个字符数组`input`来存储用户输入的字符串,使用`strlen()`函数来获取字符串的长度,使用`textwidth()`和`textheight()`函数来获取字符宽度和高度,从而实现光标的自动向右递进和删除字符等功能。使用`printf()`函数将输入的字符串在终端窗口显示出来。
在运行该程序之前,您需要先安装BGI库,并将其路径添加到Dev-C++的编译器设置中。另外,该程序只能在Windows系统下运行。
阅读全文