Создайте текстовый редактор с помощью C ++, который работает так же, как Windows Notepad - PullRequest
0 голосов
/ 08 ноября 2019

Я нахожусь в процессе создания программы, очень похожей на Windows Notepad. В основном я выполняю те же функции, такие как «Новый файл», «Сохранить», «Копировать», «Вставить», могу открыть один и тот же файл и работать с ним и т. Д. Следующая строка, копирование и вставка, сохранение файла и открытие резервной копии. Сейчас я просто хочу, чтобы моя программа работала так же, как Windows Notepad. Любая помощь будет оценена.

Я пытался создать различные функции, которые работают с уже имеющимися функциями, но это не работает так, как я хочу.

Это то, что я имею до сих пор.

#include <windows.h>
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;

class Node
{
public:
    char letter;
    Node* next;
    Node* prev;
    Node() { next = nullptr;prev = nullptr; letter = ' '; }
    Node(char c) { next = nullptr;prev = nullptr; letter = c; }
};

void gotoxy(int column, int line)
{
    COORD coord;
    coord.X = column;
    coord.Y = line;
    SetConsoleCursorPosition(
        GetStdHandle(STD_OUTPUT_HANDLE),
        coord
    );
}

void main()
{
    /*gotoxy(0, 0);
    cout << ' ';
    char cc=' ';
    while (1)
    {
     cc = _getch();
     cout << (int) cc << endl;
    }*/

    int x = 0, y = 0;
    Node *start = nullptr;
    Node *curr = nullptr;
    char c;
    while ((c = _getch()) != 27)
    {
        if ((int)c == 8)
        {
            if (start == nullptr) {

            }
            else {

                if (curr == start) {
                    x = 0;
                    delete start;
                    start = curr = nullptr;
                }
                else {
                    x--;
                    curr = curr->prev;
                    delete curr->next;
                    curr->next = nullptr;
                }

            }

        }
        else if ((int)c == -32)
        {
            c = _getch();
            if ((int)c == 75) // left key pressed
            {
                if (curr != start) {
                    if (x > 0)
                    {
                        x--;
                        curr = curr->prev;
                    }

                }
                else {
                    x = 0;
                }

            }
            else if ((int)c == 77) // right key pressed
            {
                x++;
                curr = curr->next;
            }
        }
        else
        {
            if (start == nullptr) // our first character
            {
                Node *p = new Node(c);
                start = p;
                curr = start;
                x++;
            }
            else // insert character
            {
                if (curr->next == nullptr) // insert at end
                {
                    Node *p;
                    Node *newnode = new Node(c);
                    p = curr;
                    // now, p points to the last node.
                    // insert new node in last node
                    p->next = newnode;
                    newnode->prev = p;
                    curr = newnode;
                }
                else if (curr == start) // INSERTING before the first letter
                {

                    Node *firstNode = new Node(c);
                    firstNode->next = start;
                    start->prev = firstNode; 
                    curr = firstNode;
                    start = firstNode;
                    x = 0;

                }
                else // else you are inserting in between two nodes
                {
                    Node *midNode = new Node(c);
                    Node *temp = nullptr;
                    temp = curr->prev;
                    midNode->next = curr;
                    midNode->prev = temp;
                    temp->next = midNode;
                    curr->prev = midNode;


                }
                x++;
            }
        }
        system("cls");
        gotoxy(0, 0);
        Node* p;
        p = start;
        while (p != nullptr)
        {
            cout << p->letter;
            p = p->next;
        }
        gotoxy(x, y);
    }

}

Прямо сейчас вы можете запустить программу и иметь возможность печатать и удалять, но я не могу перейти на следующую строку и ввести там, а также копировать и вставлять, сохранять иоткрытие того же файла позднее и возможность работы с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...