gpt4 book ai didi

c++ - 如何在没有 Windows API 的情况下用 Turbo-C++ 制作一个简单的文本编辑器?

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:11 24 4
gpt4 key购买 nike

首先,我想告诉大家,我在 Google 和其他地方做了很多研究,但都无济于事。

我想知道如何在没有 Windows API 的情况下继续使用 Turbo C++ 制作文本编辑器。我开始在 Turbo C++ 中制作它有一段时间了,我还学习了如何使用 int86() 函数来包含鼠标,并且我实现了它。但是我一次又一次地陷入困境。就像现在一样,我被困住了如何突出显示选择右键单击的文本。

其次,我还学习了如何访问视频内存(无论这些内存是假的还是旧的)以更好地控制文本。

同样对于文本输入,我使用了一个大数组,因为我对使用链接列表输入如此大的文本并对其进行操作知之甚少。

注意:出于纯粹的教育原因,我不想使用任何其他 IDE 或任何 API。

请指导我如何让这件事继续下去直到完成。我愿意学习所有额外的东西来完成它。

PS:这不是作业。仅供学习。

最佳答案

据我所知,您通过设置 AX (ah:al) 寄存器并调用 INT 10h see this 来设置视频模式.

然后在内存地址 0xA000 处访问像素图。如果您选择视频模式 f.e. 320x200 256 调色板,可以通过将颜色索引写入端口 0x3C8 然后将红色值写入 0x3C9,将绿色值写入 0x3C9,将蓝色值写入 0x3C9 来设置 RGB 调色板。

// select mode 320x200
asm {
mov ah, 0
mov al, 13
int 10h
}

// set red background (color index 0)
asm {
mov dx, 0x3c8
mov al, 0
out dx, al

mov dx, 0x3c9
mov al, 0xff
out dx, al

mov al, 0x00
out dx, al
out dx, al
}

除了 asm,您还可以使用 outportbinportb

// Set color with index 5 in color palette with outportb:
outportb(0x3c8, 5); // color with index 5
outportb(0x3c9, 0xFF); // red channel value
outportb(0x3c9, 0x00); // green channel value
outportb(0x3c9, 0x00); // blue channel value

在C中改变视频模式,可能是这样的:

union REGS    regs;
regs.w.ax = 13;
int86(0x10, &regs, &regs);

指向图形像素图的 C 指针:

volatile unsigned char *pixmap = (volatile unsigned char *)0xA000;
// Write a pixel with color index 5 to X:10 Y:25 in 320x200x256 video mode:
pixmap[10 + 25 * 320] = 5;

指向文本映射的 C 指针:

volatile char *charmap = (volatile char *)0xB800;
// Write hello world in text-mode
int offset = 0;
charmap[offset++] = 'H';
charmap[offset++] = 'e';
charmap[offset++] = 'l';
charmap[offset++] = 'l';
charmap[offset++] = 'o';
charmap[offset++] = ' ';
charmap[offset++] = 'w';
charmap[offset++] = 'o';
charmap[offset++] = 'r';
charmap[offset++] = 'l';
charmap[offset++] = 'd';

请注意,所有这些内容都假定您处于 DOS 模式,而我没有对其进行测试。在 Windows 中,这将失败并给您段错误或内存访问错误...

关于c++ - 如何在没有 Windows API 的情况下用 Turbo-C++ 制作一个简单的文本编辑器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11484549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com