gpt4 book ai didi

c++ - 当文本位于编辑控件中时,GetWindowTextLength 返回 0

转载 作者:行者123 更新时间:2023-11-28 08:21:38 25 4
gpt4 key购买 nike

我正在编写一个文本编辑器,但在将文件保存为 utf-8 时遇到了一些问题。我有一个函数可以从丰富的编辑控件中读取文本并将其写入文件使用传递给函数的标志取决于用户设置。它可以是 utf-16、ascii 或 utf-8。 utf-16 和 ascii 文件写入段工作正常并生成有效文件。问题在于,在以下代码块中,对 GetWindowTextLength 的调用始终返回 0。因此,结果是没有任何内容从窗口检索或写入文件。

 HANDLE hFile;
if ((hFile = CreateFile (pstrFileName, GENERIC_WRITE, 0,
NULL, CREATE_ALWAYS, 0, NULL)) == INVALID_HANDLE_VALUE) {
return FALSE;
}

int iLength = 0;
DWORD dwBytesWritten = 0;

switch (encoding) {

/*other text encoding cases*/

case ID_SETTINGS_UTF_8: {
try {
iLength = GetWindowTextLength(hwndEdit); //returns 0

unique_ptr<wchar_t> wide_buf(new wchar_t[iLength + 1]);
GetWindowTextW(hwndEdit, wide_buf.get(), iLength + 1);

int bytes_needed = WideCharToMultiByte(CP_UTF8, WC_COMPOSITECHECK |
WC_DEFAULTCHAR | WC_NO_BEST_FIT_CHARS, wide_buf.get(), -1,
NULL, 0, NULL, NULL);

unique_ptr<char> utf8_buf(new char[bytes_needed]);

WideCharToMultiByte(CP_UTF8, WC_COMPOSITECHECK |
WC_DEFAULTCHAR | WC_NO_BEST_FIT_CHARS, wide_buf.get(), -1,
utf8_buf.get(), bytes_needed, NULL, NULL);

WriteFile(hFile, utf8_buf.get(), bytes_needed,
&dwBytesWritten, NULL);

if (bytes_needed != dwBytesWritten) {
CloseHandle (hFile);
return FALSE;
}

CloseHandle (hFile) ;
return TRUE;
} catch (bad_alloc& ba) {
UNREFERENCED_PARAMETER(ba);
CloseHandle (hFile);
return FALSE;
}
}
break;

最佳答案

你破坏了堆。 new[] 必须匹配 delete[],而不是 delete

使用 std::vector 更简单:

std::vector<wchar_t> wide_buf(iLength + 1);
//...
std::vectorchar> utf8_buf(bytes_needed);

关于c++ - 当文本位于编辑控件中时,GetWindowTextLength 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5632086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com