如何在C语言中实现剪贴板
我正在做一个项目,在这个项目中,我正在用turboc(Dos)设计一个文本编辑器应用程序。我想在我的应用程序中添加不同的菜单,如文件、编辑、查看等。我已经设计了文件和安全菜单,但我想实现编辑菜单,其中包括撤销、重做、剪切、复制、粘贴等功能,这需要我实现剪贴板。我知道有一种方法可以在windows中使用windows剪贴板来实现这一点,但我不想使用windows提供的剪贴板。我想实现我自己的剪贴板如何在C语言中实现剪贴板,c,C,我正在做一个项目,在这个项目中,我正在用turboc(Dos)设计一个文本编辑器应用程序。我想在我的应用程序中添加不同的菜单,如文件、编辑、查看等。我已经设计了文件和安全菜单,但我想实现编辑菜单,其中包括撤销、重做、剪切、复制、粘贴等功能,这需要我实现剪贴板。我知道有一种方法可以在windows中使用windows剪贴板来实现这一点,但我不想使用windows提供的剪贴板。我想实现我自己的剪贴板 请记住,我的应用程序是基于DOS的,windows剪贴板将不可用。即使有某种方法可以使用window
请记住,我的应用程序是基于DOS的,windows剪贴板将不可用。即使有某种方法可以使用windows剪贴板,也不是必需的。我想实现我自己的剪贴板。您的剪贴板是否只适合您的应用程序?如果是这样的话,您只需要标记一个文本区域,并将其复制到内存中,以便以后使用粘贴命令进行检索。好的,假设您的数据结构如下所示:
struct Textview {
char *text;
int startRange;
int endRange;
};
因此,当我们添加切割函数时:
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);
}
和复制功能:
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);
}
对于“撤消重做”,您需要一组所做的更改。到目前为止,您在剪贴板方向上做了哪些工作?我还没有开始执行部分。我想知道如何才能做到这一点?它需要使用堆栈之类的数据结构,还是有其他方法?