[英]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.