C ++,从txt文件中读取文本并附加到文本框或将文本从编辑框附加到文本框

时间:2016-07-15 12:22:10

标签: c++

对于学校作业,我必须完成游戏。我已经差不多完成了,但是最后的任务让我很难过。

目前我已经想出了当用户获得高分时如何从编辑框中获取文本(名称)。

这是通过以下方式完成的:

GetDlgItemText(hDlg, IDC_EDIT1, &Tsaved, 20);//Get text from edit box

我也可以将它附加到一个消息框中:

MessageBox(hDlg, &Tsaved, buff, IDOK == nId);//write text from edit box to message box

我的思维过程和代码流程是这样的:

目前我将获取的文本写入文本文件,因为我无法将获取的文本直接附加到文本框中。有了这个,我就可以在文件中写一些东西。

我知道TsavedTCHAR并且只有2个字节,但为了将其写入使用字符串的文件,我必须将其转换/转换为字符串。有了这个,我只是将获取文本的第一个字母写入文件。

实施例: 编辑框输入:“唐”
消息框输出:“Don”
文本文件输出:“D”

这就是我完成转换/转换的方式:

TCHAR Ts = Tsaved;
stringstream ss;
string s;
char c = Ts;
ss << c;
ss >> s;

这就是我将其写入文件的方式:

std::ofstream inputfile("filename.txt");
if (!inputfile)
{
    std::cerr << "Error writing to ..." << std::endl;
}
else
{
    for (int x = 0; x < sizeof(Tsaved)-1; x++)
    {
        int a = sizeof(Ts);
        //inputfile << sizeof(Tsaved) / sizeof(TCHAR) << endl;
        inputfile << s << endl;
        //inputfile << a << endl;
    }
}

如何将获取的编辑框的完整内容写入文本文件?

1 个答案:

答案 0 :(得分:0)

第一个问题是Tsaved只有足够的空间来容纳一个字符。您需要分配足够的内存来保存文本框的整个上下文。您可以致电GetWindowTextLength()GetWindowText()

来执行此操作
HWND hEditBox = GetDlgItem(IDC_EDIT1);
int len = GetWindowTextLength(hEditBox);

TCHAR* text = new TCHAR[len+1]; // need +1 to account for  trailing nullptr
GetWindowText(hEditBox, text, len);

text现在应该包含编辑框的全文。您现在可以将其写入文件:

std::ofstream inputfile("filename.txt");
inputFile << text;

由于text是使用new[]分配的,因此您还需要将其删除:

delete[] text;

其次,我不知道您的程序是否编译为Unicode,但是如果它是TCHAR将被定义为wchar_t而不是char。由于它可以包含非ASCII字符,因此您应该使用std::wofstream而不是std::ofstream。这两个类具有相同的API,但后者可以处理所有Unicode字符。

最后,我不知道您使用的是哪个版本的Visual Studio,但如果它是最新版本,您可以将new[]delete[]替换为unique_ptr(其中将自动删除已分配的内存,因此您不必记住这样做):

std::unique_ptr<TCHAR[]> text = std::make_unique<TCHAR[]>(len + 1);
GetWindowText(hEditBox, text.get(), len);

inputFile << text.get();