如何将LPTSTR转换为LPCWSTR

How to convert LPTSTR to LPCWSTR?

本文关键字:LPCWSTR 转换 LPTSTR      更新时间:2023-10-16

我需要从LPTSTR转换为LPCWSTR。我需要这个,因为我从GetDlgItemText得到LPTSTR,我要把它喂给ExtTextOut,它接受LPCWSTR

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

对话框:

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);

它向父窗口发送一个消息,父窗口将这个值添加到向量( 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);
}

GetDlgItemTextExtTextOut都支持。这些电话是来自两个不同的项目吗?或者你有#define UNICODE吗?在任何情况下,我都建议:

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

  • 明确呼叫GetDlgItemTextWExtTextOutA

你的数据正在被损坏,因为你只是将一个指针压入向量。该指针指向一个堆栈变量,当您访问该指针时,该变量早已不复存在。您应该将std::wstring存储在vector中。

这可以通过MultiByteToWideChar完成。

CStringW s(your_LPTSTR);

则可以通过隐式转换获得