Я нахожусь в процессе создания программы, очень похожей на 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);
}
}
Прямо сейчас вы можете запустить программу и иметь возможность печатать и удалять, но я не могу перейти на следующую строку и ввести там, а также копировать и вставлять, сохранять иоткрытие того же файла позднее и возможность работы с ним.