繁体   English   中英

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

[英]C++, reading text from txt file and append to textbox or append text from edit box to textbox

对于学校作业,我必须完成游戏。 我已经快完成了,但是最后的任务给我带来了困难。

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

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

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

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

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

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

示例:Editbox输入:“ 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;
    }
}

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

第一个问题是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版本,但是如果它是最新版本,则可以用unique_ptr替换new[]delete[] (这将自动删除分配的内存,因此您无需必须记住这样做):

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

inputFile << text.get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM