如何将LPTSTR转换为LPCWSTR?

时间:2013-06-14 17:52:14

标签: c++ visual-studio-2010 winapi msdn

我需要从LPTSTR转换为LPCWSTR。 我需要这个,因为我从LPTSTR获得了GetDlgItemText,我要将其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); 中检索了值,它返回一个空/ giberish。

对话框:

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); } 输出我的值的函数的一部分:

{{1}}

3 个答案:

答案 0 :(得分:3)

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

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

  • 请致电GetDlgItemTextWExtTextOutA

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

答案 1 :(得分:2)

这可以通过MultiByteToWideChar完成。

答案 2 :(得分:-1)

CStringW s(your_LPTSTR);

然后你可以通过隐式转换获得它。