You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Turbo C++ DOSBox环境下conio.h的window函数无法创建窗口问题

问题根因

Turbo C++ 提供的 window() 函数接收的坐标是文本字符坐标,而非像素坐标,你传入的坐标超出了DOS默认文本模式的坐标范围,导致参数无效,系统自动回退到默认全屏窗口。
DOSBox默认启动的文本模式是标准的80列×25行规格,x轴(横向列数)取值范围是180,y轴(纵向行数)取值范围是125,你传入的100、200远大于最大坐标值,window() 函数校验到非法参数后会直接跳过窗口创建逻辑,所以后续的 cprintf 还是输出到默认的全屏窗口左上角。

修复方案

  • 调整 window() 函数的参数到合法坐标范围内,比如创建左上角(10,5)、右下角(50,15)的文本窗口,参数需满足x值在180区间、y值在125区间
  • 调整代码顺序,把 clrscr() 放到 window() 调用之后,否则你先清的是全屏,创建新窗口后清屏才会只清窗口内的区域,效果更明显
  • 如果确实需要更大的坐标范围,可以先调用 textmode() 切换到更高分辨率的文本模式,比如 textmode(C4350) 可以切换到80列×50行的文本模式,y轴最大坐标会扩展到50

可正常运行的参考代码

#include <conio.h>
#include <stdlib.h>

int main() {
  // 可选:切换到80*50文本模式,扩大y轴坐标范围
  // textmode(C4350);
  
  // 坐标都在1~80、1~25的合法范围内
  window(10, 5, 50, 15);
  textcolor(3);
  textbackground(6);
  // 放在window之后,仅清除当前窗口内的内容
  clrscr();

  cprintf("Hello world");

  getch();
  // 退出前恢复默认文本模式
  textmode(LASTMODE);
  return 0;
}

效果验证

运行修改后的代码可以看到带青蓝色前景、棕色背景的Hello World文本出现在屏幕偏左上的位置,文本周围默认黑底的区域就是窗口外的区域,符合预期效果。

内容的提问来源于stack exchange,提问作者Yonshoku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:24:02