2012-03-22 15 views
-1

私はTurbo C(Dos)でテキストエディタアプリケーションを設計しているプロジェクトを行っています。私は、ファイル、編集、ビューなどのような私のアプリケーションで別のメニューを追加したい。私はすでにファイルとセキュリティメニューを設計したが、私は元に戻す、やり直し、カット、コピー、貼り付けなどの機能を含む編集メニューを実装したいクリップボードを実装します。私はWindowsのクリップボードを使用してWindowsでこれを行う方法があることを知っているが、私はクリップボードをWindowsで提供される使用したくない。自分のクリップボードを実装したいCでクリップボードを実装する方法

私のアプリケーションはDOSベースで、Windowsのクリップボードは使用できないことを覚えておいてください。 Windowsクリップボードを使用している場合でも、それは必須ではありません。自分のクリップボードを実装したい

+1

あなたはこれまでのあなたのクリンボーディングの方向で何をしましたか? –

+0

私は実装部分を開始していません。私はこれをどのように達成できるか考えてみたいですか?それはスタックのようないくつかのデータ構造の使用を必要とするか、それを行う他の方法がありますか? – user1002416

答えて

1

ので、あなたのデータ構造は、このようなものであると仮定することができます、[OK]を:

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); 
} 
我々はカット機能を追加したときに、そう

struct Textview { 
    char *text; 
    int startRange; 
    int endRange; 
}; 

そして、ペースト機能。

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); 
} 

元に戻すには、行った変更のスタックが必要です。

1

あなたのクリップボードはあなただけのアプリケーションですか?その場合は、テキストエリアに印を付けて、コピーをメモリに保存して、ペーストコマンドで取り出すだけです。

関連する問題