对于学校作业,我必须完成游戏。我已经差不多完成了,但是最后的任务让我很难过。
目前我已经想出了当用户获得高分时如何从编辑框中获取文本(名称)。
这是通过以下方式完成的:
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个字节,但为了将其写入使用字符串的文件,我必须将其转换/转换为字符串。有了这个,我只是将获取文本的第一个字母写入文件。
实施例:
编辑框输入:“唐”
消息框输出:“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;
}
}
如何将获取的编辑框的完整内容写入文本文件?
答案 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();