gpt4 book ai didi

c++ - 如何将 LPTSTR 转换为 LPCWSTR?

转载 作者:行者123 更新时间:2023-11-30 01:58:39 25 4
gpt4 key购买 nike

我需要将 LPTSTR 转换为 LPCWSTR。我需要这个,因为我从 GetDlgItemText 获取 LPTSTR,我将把它提供给 ExtTextOut,它接受 LPCWSTR.

编辑:在从 GetDlgItemText 传递值之前,我将值存储在 std::vector 中。之后我从 std::vector 中检索值,它返回一个空的/乱码。

对话框:

WORD lineLength = (WORD) SendDlgItemMessage(hwnd,IDC_EDIT1, EM_LINELENGTH, (WPARAM) 0, (LPARAM) 0);
if(lineLength > 0){
TCHAR line[16];
int number = GetDlgItemTextW(hwnd, IDC_EDIT1, line, 16);
HWND parent = (HWND)GetWindowLongPtr(hwnd, GWLP_HWNDPARENT);
LPCWSTR line2(line);
SendMessage(parent, WM_COMMAND, MAKEWPARAM(ADD_COMBO_ITEM,0), (LPARAM)line);

它向父窗口发送消息,将此值添加到 vector (push_back)。具有父窗口的类:

std::vector<LPCWSTR> comboItems

这是我使用 ExtTextOut 输出值的函数的一部分:

RECT temp;
temp.left = listItemWidth;
temp.right = width;
SetBkColor(hdc, RGB(240,240,260));
LPCWSTR comboName = L"";
for(std::vector<item>::size_type i=0; i != comboItems.size(); i++){
temp.left = listItemWidth;
temp.right = width;
temp.top = (currentlyClicked + 1) * listItemHeight + i * listItemHeight;
temp.bottom = temp.top + listItemHeight;
comboName = comboItems[i];
ExtTextOut(hdc, temp.left+2, temp.top + 1, ETO_OPAQUE,
&temp, comboName, lstrlen(comboName), 0);
DrawEdge(hdc, &temp, EDGE_RAISED, BF_RECT | BF_FLAT | BF_ADJUST);
}

最佳答案

GetDlgItemText 支持两者,ExtTextOut 也支持。这些电话是在两个不同的项目中吗?或者你在某处有 #define UNICODE 吗?无论如何,我会推荐:

  • 修复项目或源文件,使它们都使用宽字符或多字节版本,但不能同时使用这两种版本,或者

  • 显式调用 GetDlgItemTextWExtTextOutA

您的数据已损坏,因为您只是将指针插入 vector 。该指针指向一个堆栈变量,该变量在您访问该指针时早已消失。您应该将 std::wstring 存储在您的 vector 中。

关于c++ - 如何将 LPTSTR 转换为 LPCWSTR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17114469/

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