如何在C中实现剪贴板

时间:2012-03-22 09:47:23

标签: c

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

请记住我的应用程序是基于DOS的,并且Windows剪贴板将不可用。即使有使用Windows剪贴板的东西,也不是必需的。我想实现自己的剪贴板。

2 个答案:

答案 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,您需要进行一系列更改。