如何将LPTSTR转换为LPCWSTR
How to convert LPTSTR to LPCWSTR?
我需要从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);
}
GetDlgItemText
和ExtTextOut
都支持。这些电话是来自两个不同的项目吗?或者你有#define UNICODE
吗?在任何情况下,我都建议:
-
修复项目或源文件,使它们都使用宽字符或多字节版本,但不是两者,或
-
明确呼叫
GetDlgItemTextW
或ExtTextOutA
你的数据正在被损坏,因为你只是将一个指针压入向量。该指针指向一个堆栈变量,当您访问该指针时,该变量早已不复存在。您应该将std::wstring
存储在vector中。
这可以通过MultiByteToWideChar
完成。
CStringW s(your_LPTSTR);
则可以通过隐式转换获得
相关文章:
- C++ 在参数中将字符串转换为 LPCWSTR
- CPP Windows 字符串转换混淆了 CStringA 和 LPCWSTR
- 代码 c++ VS 2010 中的 LPCWSTR 到字符串转换问题
- 无法将常量字符 [16] 转换为 LPCWSTR
- 无法将参数 2 从 'const char [5]' 转换为 'LPCWSTR'
- 如何转换LPCWSTR和CHAR
- 如何将 CStringW 转换为 LPCWSTR
- 将SystemTime转换为LPCWSTR
- LPCWSTR 无法在 TextOut() 方法上正确转换
- 无法将'LPCWSTR {aka const wchar_t*}'转换为 'LPCSTR {aka const char*}
- 如何将DWORD或char*类型的变量转换为LPCWSTR
- 'HMODULE GetModuleHandleW(LPCWSTR)':无法将参数 1 从 'const char *' 转换为 'LPCWSTR'
- 从字符转换为 LPCWSTR
- 如何将字符* 转换为 LPCWSTR
- 错误 C2664:'auxDIBImageLoadW':无法将参数 1 从 'LPSTR' 转换为 'LPCWSTR'
- 将浮点数转换为 LPCWSTR
- 如何将LPCWSTR转换为LPWSTR
- 将LPSTR转换为LPCWSTR
- 调用CreateProcessW(Mobile MFC)时BSTR到LPCWSTR的转换
- LPCWSTR转换为char*,反之亦然