如何在C语言中实现剪贴板

如何在C语言中实现剪贴板,c,C,我正在做一个项目,在这个项目中,我正在用turboc(Dos)设计一个文本编辑器应用程序。我想在我的应用程序中添加不同的菜单,如文件、编辑、查看等。我已经设计了文件和安全菜单,但我想实现编辑菜单,其中包括撤销、重做、剪切、复制、粘贴等功能,这需要我实现剪贴板。我知道有一种方法可以在windows中使用windows剪贴板来实现这一点,但我不想使用windows提供的剪贴板。我想实现我自己的剪贴板 请记住,我的应用程序是基于DOS的,windows剪贴板将不可用。即使有某种方法可以使用window

我正在做一个项目,在这个项目中,我正在用turboc(Dos)设计一个文本编辑器应用程序。我想在我的应用程序中添加不同的菜单,如文件、编辑、查看等。我已经设计了文件和安全菜单,但我想实现编辑菜单,其中包括撤销、重做、剪切、复制、粘贴等功能,这需要我实现剪贴板。我知道有一种方法可以在windows中使用windows剪贴板来实现这一点,但我不想使用windows提供的剪贴板。我想实现我自己的剪贴板


请记住,我的应用程序是基于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);
}

对于“撤消重做”,您需要一组所做的更改。

到目前为止,您在剪贴板方向上做了哪些工作?我还没有开始执行部分。我想知道如何才能做到这一点?它需要使用堆栈之类的数据结构,还是有其他方法?