Поэтому я изучаю 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". Я был бы признателен, если бы кто-нибудь сказал мне, что это значит и как я могу это исправить. Также суть этого заключается в сохранении содержимого текстового поля.
Вы можете попробовать следующее:
std::vector<wchar_t> textSaved(20);
...
gwtstat = GetWindowText( TextBox, textSaved.data(), textSaved.size() );
testSaved.resize(gwtstat);
std::wstring str(textSaved.begin(), textSaved.end());
std::wstring str(textSaved.begin(), gwtstate);
В противном случае вы захватываете символы, GetWindowText
от возвращенных GetWindowText
.
В коде вы используете 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);
}
Надеюсь, это поможет вам понять кое-что.