用c语言graphics.h和extgraph.h写一个在图形窗口的输入程序。当用户按键时,在图形窗口出现按下的键所代表的字符,并像图形界面的输入框一样自动向右递进,按下回车键结束输入,将用户输入的内容在终端窗口显示出来。并在此基础上,实现当前位置光标闪烁,并支持左右方向键和两个删除键。
时间: 2023-11-28 21:48:09 浏览: 102
这个任务需要使用到图形库,C语言中比较常用的图形库有graphics.h和extgraph.h,本文以extgraph.h为例进行讲解。首先需要在代码中引入extgraph.h头文件,然后定义一个字符串数组用来存储用户输入的字符,定义一个光标变量记录当前光标位置。
接下来需要编写一个回调函数用于处理用户输入。回调函数可以使用ExtKeyboardEvent函数来实现。每当用户按下或者释放一个键,回调函数就会被调用一次。在回调函数中,需要根据按键的类型来进行相应的处理。如果是字符键,需要将其添加到字符串数组中,并向右移动光标。如果是退格键,需要删除光标左侧的字符,并向左移动光标。如果是删除键,需要删除光标右侧的字符。如果是左右方向键,则分别将光标向左或向右移动。
最后,需要在终端窗口中显示用户输入的内容,可以使用printf函数将字符串数组中的内容输出到终端窗口。同时,为了实现光标闪烁的效果,可以使用ExtDelay函数来控制光标的显示和隐藏。
下面是完整的代码实现:
```c
#include <stdio.h>
#include "extgraph.h"
#define MAX_LENGTH 100
char input[MAX_LENGTH] = ""; // 存储用户输入的字符串
int cursor = 0; // 光标位置
// 绘制光标
void drawCursor(int x, int y, int height) {
MovePen(x, y);
Line(0, height);
}
// 绘制输入框
void drawInputBox(int x, int y, int width, int height) {
MovePen(x, y);
Line(width, 0);
Line(0, height);
Line(-width, 0);
Line(0, -height);
}
// 更新输入框
void updateInputBox() {
ClearText();
drawInputBox(100, 100, 200, 50);
MovePen(105, 120);
DrawTextString(input);
drawCursor(105 + cursor * 10, 100, 50);
}
// 处理键盘事件
void handleKeyboardEvent(int key, int event) {
if (event == KEY_DOWN) {
if (key == KEY_RETURN) { // 回车键结束输入
printf("User input: %s\n", input);
} else if (key == KEY_BACKSPACE) { // 退格键删除左侧字符
if (cursor > 0) {
int i;
for (i = cursor - 1; i < MAX_LENGTH - 1; i++) {
input[i] = input[i + 1];
}
cursor--;
updateInputBox();
}
} else if (key == KEY_DELETE) { // 删除键删除右侧字符
if (cursor < strlen(input)) {
int i;
for (i = cursor; i < MAX_LENGTH - 1; i++) {
input[i] = input[i + 1];
}
updateInputBox();
}
} else if (key == KEY_LEFT) { // 左方向键
if (cursor > 0) {
cursor--;
updateInputBox();
}
} else if (key == KEY_RIGHT) { // 右方向键
if (cursor < strlen(input)) {
cursor++;
updateInputBox();
}
} else if (key >= ' ' && key <= '~' && strlen(input) < MAX_LENGTH - 1) { // 字符键
int i;
for (i = strlen(input); i > cursor; i--) {
input[i] = input[i - 1];
}
input[cursor] = key;
cursor++;
updateInputBox();
}
}
}
int main() {
InitGraphics();
SetWindowTitle("Input Program");
drawInputBox(100, 100, 200, 50);
RegisterKeyboardEvent(handleKeyboardEvent);
while (1) {
drawCursor(105 + cursor * 10, 100, 50);
ExtDelay(500);
drawCursor(105 + cursor * 10, 100, 50);
ExtDelay(500);
}
return 0;
}
```
在上面的代码中,我们使用了ExtKeyboardEvent函数来注册键盘事件回调函数,使用SetWindowTitle函数设置了窗口标题,使用ExtDelay函数实现了光标闪烁的效果。
编译运行上述代码,就可以在图形窗口中实现一个简单的输入程序。用户可以通过键盘输入字符,同时支持左右方向键和两个删除键,输入完成后可以在终端窗口中显示用户输入的内容。
阅读全文