Аргумент типа char несовместим с типом параметра LPWSTR

0

Поэтому я изучаю GUI в c++, чтобы делать вещи в 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". Я был бы признателен, если бы кто-нибудь сказал мне, что это значит и как я могу это исправить. Также суть этого заключается в сохранении содержимого текстового поля.

  • 0
  • 0
    Ваша программа скомпилирована в Unicode, поэтому вам нужно использовать WCHAR или wchar_t, а не char.
Показать ещё 5 комментариев
Теги:
pointers
user-interface
char

2 ответа

1

Вы можете попробовать следующее:

std::vector<wchar_t> textSaved(20);
...
gwtstat = GetWindowText( TextBox, textSaved.data(), textSaved.size() );
testSaved.resize(gwtstat);
std::wstring str(textSaved.begin(), textSaved.end());
  • 0
    Гм, последняя строка должна быть std::wstring str(textSaved.begin(), gwtstate); В противном случае вы захватываете символы, GetWindowText от возвращенных GetWindowText .
  • 0
    К сожалению, это правда, обновляется с помощью изменения размера вместо
0

В коде вы используете char[] для получения текста Window. и ваше приложение находится в конфигурации UNICODE. почему вы получаете ошибку, поскольку "char несовместим с LPWSTR".

Вы можете использовать два метода следующим образом:

МЕТОД 1: О вашем текущем коде: поскольку вы используете набор UNICODE Char для вашего приложения.

Конфигурация 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, чтобы ваш проект мог работать с символом Multibyte, как поддержка Japanese char и вы можете использовать тип данных char для любой операции в вашем приложении.

Поскольку MULTIBYTE конфигурация приложения использует файл <string.h> по умолчанию для обработки строк

Шаги для настройки на multibyte Перейти к проекту → Properties-> конфигурация Properties-> Общие → Набор символов и изменить символ, установленный на 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);
         }

Надеюсь, это поможет вам понять кое-что.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню