用initgraph生成窗口会 与按键互动的还是控制台 必须点击控制台才能让窗口对按键做出反应 如何才能点击窗口就让窗口对按键做出反应
时间: 2023-07-19 16:20:08 浏览: 306
使用 `initgraph` 函数生成的窗口默认是不能与键盘输入进行互动的,需要使用 `setbkcolor(BLACK)` 函数将窗口设置为黑色背景,然后使用 `cleardevice()` 函数将窗口清空,这样窗口才能与键盘输入互动。
如果想让窗口在被点击后就能对按键进行反应,可以使用 `setactivepage(1)` 和 `setvisualpage(0)` 函数将当前页面设置为 `1`,这样窗口就会在被点击后自动对按键进行反应。同时还需要使用 `setvisualpage(1)` 函数将页面设置为可视页面。完整的代码示例如下:
```c
#include <graphics.h>
int main()
{
// 初始化窗口
initgraph(640, 480);
// 将窗口设置为黑色背景
setbkcolor(BLACK);
cleardevice();
// 设置当前页面为 1
setactivepage(1);
// 点击窗口后对按键进行反应
while (!kbhit()) {
// 窗口代码
}
// 设置页面为可视页面
setvisualpage(1);
// 关闭窗口
closegraph();
return 0;
}
```
注意,这里的窗口代码需要放在 `while` 循环中,否则窗口只会被点击一次就会自动关闭。
相关问题
怎么能不通过控制台直接与initgraph生成的窗口进行键盘互动
您可以使用 `bioskey` 函数来读取键盘输入,而不是使用 `getch` 函数。 `bioskey` 函数可以在后台读取键盘缓冲区中的按键输入,而不会阻塞程序的执行。这样,您就可以在窗口生成之后,通过键盘输入来与窗口进行互动。以下是一个示例代码:
```c
#include <graphics.h>
#include <bios.h>
int main()
{
int gd = DETECT, gm;
initgraph(&gd, &gm, "");
while (1) {
if (bioskey(1)) {
// 读取键盘输入
int ch = bioskey(0);
// 处理键盘输入
if (ch == 27) {
// 如果按下 ESC 键,则退出循环
break;
}
}
// 在窗口中绘制图形
// ...
delay(100);
}
closegraph();
return 0;
}
```
在上面的代码中,我们使用了 `bioskey(1)` 函数来检查键盘缓冲区中是否有按键输入。如果有输入,我们再使用 `bioskey(0)` 函数来读取键盘输入。在读取到 ESC 键时,我们退出循环并关闭窗口。
需要注意的是,`bioskey` 函数只能在 DOS 系统中使用,无法在 Windows 等其他操作系统中使用。如果您需要在其他操作系统中读取键盘输入,可以使用其他的库函数或操作系统提供的 API。
easyX中的initgraph函数我只给了两个参数为什么会跳出两个窗口,一个是initgraph创建的窗口,一个是控制台
如果你在调用initgraph函数时只传入两个参数,而且在初始化图形环境后出现了两个窗口,一个是initgraph创建的窗口,另一个是控制台窗口,这可能是由于easyX图形库的默认行为造成的。
默认情况下,easyX会在使用控制台窗口作为图形窗口时,保留控制台窗口,并在其上方创建一个图形窗口。这样做的目的是为了方便用户在图形窗口和控制台之间进行交互和输出信息。
如果你希望只显示图形窗口而隐藏控制台窗口,可以使用setinitmode函数来设置初始化模式。例如,可以在initgraph之前调用setinitmode(0)来设置初始化模式为不显示控制台窗口。
另外,如果你想要关闭控制台窗口并只显示图形窗口,可以在图形绘制完成后调用closegraph函数来关闭图形窗口,并使用命令行参数或其他方式运行程序,以避免显示控制台窗口。
希望能解决你的问题!如果还有其他疑问,请继续提问。
阅读全文