我正在做一个项目,我正在设计Turbo C(Dos)中的文本编辑器应用程序。我想在我的应用程序中添加不同的菜单,如文件,编辑,查看等。我已经设计了文件和安全菜单,但我想实现编辑菜单,其中包括撤消,重做,剪切,复制,粘贴等功能,这些都需要我实现剪贴板。我知道有一种方法可以通过使用Windows剪贴板在Windows中执行此操作,但我不想使用Windows提供的剪贴板。我想实现自己的剪贴板。
请记住我的应用程序是基于DOS的,并且Windows剪贴板将不可用。即使有使用Windows剪贴板的东西,也不是必需的。我想实现自己的剪贴板。
答案 0 :(得分:1)
您的剪贴板是否仅适用于您的应用程序?如果是这样,您只需要标记文本区域并将复制到内存中,以便以后使用粘贴命令进行检索。
答案 1 :(得分:1)
好的,我们假设你的数据结构是这样的:
struct Textview {
char *text;
int startRange;
int endRange;
};
所以,当我们添加cut函数时:
char clipboard[1024]; // max of 1024 chars in the clipboard.
void cut(struct Textview *textview)
{
// first we copy the text out (assuming you have
int nCpy = textview->endRange - textView->startRange >= 1024 ? 1023 : textview->endRange - textview->startRange;
strncpy(clipboard, textview->text + textview->startRange, nCpy);
// next, we remove that section of the text
memmove(textview->text + textview->startRange, textview->text + textview->endRange, strlen(textview->text + textview->endRange);
}
复制功能:
void copy(struct Textview *textview)
{
int nCpy = textview->endRange - textView->startRange >= 1024 ? 1023 : textview->endRange - textview->startRange;
strncpy(clipboard, textview->text + textview->startRange, nCpy);
}
然后是粘贴功能。
void paste(struct Textview *textview)
{
// assuming we have enough space to paste the additional characters in.
char *cpyText = strdup(textview->text); // if strdup isn't available, use malloc + strcpy.
int cpyTextLen = strlen(cpyText);
int clipboardLen = strlen(clipboard);
memcpy(textview->text + textview->startRange, clipboard, clipboardLen);
memcpy(textview->text + textview->startRange + clipboardLen, cpyText + textview->startRange + 1, cpyTextLen) - textView->startRange);
textview->text[textView->startRange + clipboardLen + cpyTextLen + 1] = '\0';
free(cpyText);
}
对于undo-redo,您需要进行一系列更改。