char类型的参数与参数类型LPWSTR不兼容

时间:2014-01-21 05:20:38

标签: c++ windows pointers user-interface char

所以我在c ++中学习GUI来制作windows的东西,在我的WM_COMMAND案例中我有一个if语句:

 //declared globally
 char textSaved[20];
 HWND TextBox;

 //within WM_COMMAND case
 if (LOWORD(wParam) == 4)
         {
             int gwtstat =0;
             //char *t = &textSaved[0];
             gwtstat = GetWindowText(TextBox, &textSaved[0], 20);
         }

我的编译器告诉我类型“char”与“LPWSTR”类型的参数不兼容。如果有人告诉我这意味着什么以及如何解决它,我会很感激。此外,重点是存储文本框的内容。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

std::vector<wchar_t> textSaved(20);
...
gwtstat = GetWindowText( TextBox, textSaved.data(), textSaved.size() );
testSaved.resize(gwtstat);
std::wstring str(textSaved.begin(), textSaved.end());

答案 1 :(得分:0)

在您的代码中,您使用char[]来获取Window文本。 并且您的应用程序处于UNICODE配置中。 这就是为什么你得到错误,因为'char与LPWSTR不兼容'。

您可以使用以下两种方法:

方法1 : 关于您当前的代码: 当你为你的应用程序使用UNICODE字符集时。

UNICODE应用程序配置使用<wchar.h>文件进行字符串处理

您可以使用以下代码:

wchar_t textSaved[20];
 HWND TextBox;

 //within WM_COMMAND case
 if (LOWORD(wParam) == 4)
         {
             int gwtstat =0;
             //char *t = &textSaved[0];
             gwtstat = GetWindowText(TextBox, &textSaved, 20);
         }

或者 方法2: 如果您使用的是VS2010或任何VS VERSION。 将项目属性更改为Multibyte,以便您的项目可以使用“多字节”字符,例如Japanese char支持,并且可以使用char数据类型进行应用程序中的任何操作。

应用程序的MULTIBYTE配置使用默认的<string.h>文件进行字符串处理

设置为multibyte的步骤 转到项目 - &gt;属性 - &GT;配置属性 - >一般 - &gt;字符集 并将char设置更改为MULTIBYTE

您可以将代码用作:

   //declared globally
 char textSaved[20];
 HWND TextBox;

 //within WM_COMMAND case
 if (LOWORD(wParam) == 4)
         {
             int gwtstat =0;
             //char *t = &textSaved[0];
             gwtstat = GetWindowText(TextBox, &textSaved, 20);
         }

希望这能帮助你理解一些事情。