Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ и WinAPI
Войти
Регистрация
Восстановить пароль
 
Xeror
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
#1

Получение текста из EDIT - C++ WinAPI

07.09.2015, 16:02. Просмотров 800. Ответов 16
Метки нет (Все метки)

C++
1
char *c;
C++
1
myBut = CreateWindow(L"EDIT", L"admin", WS_VISIBLE | WS_CHILD | ES_CENTER, 100, 10, 100, 15, hWnd, (HMENU)10001, hInstance, 0);
C++
1
2
3
4
5
int tst = GetWindowText(GetDlgItem(hWnd, 10001), loginstr, MAX_PATH);
            if (_itoa(tst, c, 255) == "admin")
            {
//действие
}
Не хочет читать то что написано в EDIT
вроде как без ошибок но никакой текст не выводит.

Делал проверку
C++
1
MessageBox(hWnd, LPWSTR(c), TEXT("событие"), 0);
тоже пусто
Помогите пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2015, 16:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Получение текста из EDIT (C++ WinAPI):

Получение текста из EDIT
Действие: Нажал на кнопку "Вход" Как получить то что я ввел в Edit боксе?...

Получение текста из поля Edit
Проблема в том что я немогу получить текст из поля Edit чтобы дальше с ним...

Получение текста из Edit и ввод его в файл
Подскажите пожалуйста с помощью каких функций можно получить содержимое окна...

Как при вводе текста в один Edit загружать те же символы во второй Edit?
помогите есть 2 mdi окна в них эдиты. как при вводе текста в 1 эдит загружать...

Передача текста из edit в другой edit
Здравствуйте! Впервые столкнулся с WinAPI и не получается передать "на лету"...

Получение значения edit
Доброго времени суток!!! Как получить значения определённого edit поля и...

16
nonedark2008
1022 / 762 / 210
Регистрация: 28.07.2012
Сообщений: 2,118
07.09.2015, 17:14 #2
Xeror, меня смущают твои 10001 что при создании окна, что при получении текста из него.
В функции CreateWindow соответстующий параметр отвечает за меню, которое нужно создать, а меню уже далее подключается к какому-нибудь окну.
А вместо
Цитата Сообщение от Xeror Посмотреть сообщение
GetDlgItem(hWnd, 10001)
по хорошему должен быть HWND созданного Edit Control, либо вместо 10001 должен присутствовать некий его идентификатор.
0
Xeror
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
07.09.2015, 17:22  [ТС] #3
nonedark2008,
С идентификатором все нормально,если бы была проблема в этом то
SetWindowText(GetDlgItem(hWnd, 10001), L"test");
не вводило бы в бокс строку,а так все отлично работает
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
07.09.2015, 17:23 #4
nonedark2008, в случае создания элемента управления в качестве HMENU передаётся идентификатор элемента управления. У него это 10001.
С помощью функции GetDlgItem он берёт HWND этого элемента управления через его ID.

Другой вопрос, что такое loginstr?
0
Xeror
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
07.09.2015, 17:28  [ТС] #5
castaway,
LPWSTR loginstr;
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
07.09.2015, 17:35 #6
Xeror, LPWSTR - это просто указатель, как и переменная c. Как ты хочешь записать в него строку?
Используй массив.
Для сравнения строк есть функция strcmp.
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
07.09.2015, 17:35 #7
Цитата Сообщение от Xeror Посмотреть сообщение
C++
1
_itoa(tst, c, 255) == "admin"
Вы пытаетесь число tst превратить в строку, представляющую число 255-ричной СС, и сравнить его с текстом? Какой смысл? Строки типа Си сравниваются функцией strcmp(), но в этом сравнении не будет логики т.к. число не может быть равно тексту. Или я что-то не правильно понял?
0
Enno
07.09.2015, 17:35
  #8

Не по теме:

int tst;
if (_itoa(tst, c, 255) == "admin")
Лолъ.

0
Xeror
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
07.09.2015, 17:45  [ТС] #9
Kerry_Jr,
Мне нужно что бы если введенный текст в бокс будет "admin" совершалось действие
мне посоветовали GetWindowText
вот я и ковыряюсь с этой функцией

Добавлено через 1 минуту
GetWindowText возвращает Int
я пытался перевести его в char
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
07.09.2015, 17:57 #10
Лучший ответ Сообщение было отмечено Xeror как решение

Решение

Xeror, можете попробовать отправить edit'у сообщение WM_GETTEXT. А сравнивать нужно то, что будет в буфере
C++
1
2
3
4
5
6
wchar_t buf[15];
SendMessage(GetDlgItem(hWnd, 10001), WM_GETTEXT, (LPARAM)buf, 15);
if (!wcscmp(buf, L"admin")
{
 // действия
}
1
Xeror
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
07.09.2015, 18:03  [ТС] #11
Kerry_Jr,
не хочет работать(
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
07.09.2015, 18:10 #12
Цитата Сообщение от Xeror Посмотреть сообщение
не хочет работать(
какие-то ошибки выдает?
0
Xeror
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
07.09.2015, 18:11  [ТС] #13
Оно почему то не передает запрос
Ведь по идее послать запрос
C++
1
SendMessage(GetDlgItem(hWnd, 10001), WM_GETTEXT, (LPARAM)buf, 15);
Должно высветиться уведомление:
C++
1
2
3
case WM_GETTEXT:
        MessageBox(hWnd, TEXT("Работает!"), TEXT("событие"), 0);
        break;
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
07.09.2015, 18:19 #14
Xeror, это сообщение не нужно отлавливать в WndProc. Как Вы пытаетесь получить данные из edit'а, я имею в виду по нажатию кнопки, при смене фокуса..?
0
Xeror
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
07.09.2015, 18:21  [ТС] #15
Kerry_Jr,
C++
1
myBut = CreateWindow(L"BUTTON", L"Проверка", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 100, 90, 100, 20, hWnd, (HMENU)10004, hInstance, 0);
C++
1
2
3
4
5
6
7
8
9
10
if (LOWORD(wParam) == 10004)
        {
 
            SendMessage(GetDlgItem(hWnd, 10001), WM_GETTEXT, (LPARAM)buf1, 15);
            if (!wcscmp(buf1, L"admin"))
            {
                // действия
                MessageBox(hWnd, TEXT("Вы кликнули!"), TEXT("событие"), 0);
            }
        }
0
nonedark2008
1022 / 762 / 210
Регистрация: 28.07.2012
Сообщений: 2,118
07.09.2015, 18:31 #16
Лучший ответ Сообщение было отмечено Xeror как решение

Решение

Xeror, возращает ли GetDlgItem корректное значение?
Цитата Сообщение от Xeror Посмотреть сообщение
SendMessage(GetDlgItem(hWnd, 10001), WM_GETTEXT, (LPARAM)buf1, 15);
У функции SendMessage предпоследним параметром идет wParam а последним - lParam.
Для сообщения WM_GETTEXT в wParam идет размер буфера, а в lParam - указатель на него, так что параметры в вызове выше перепутаны.
Что возращает функция SendMessage? Должна вернуть кол-во считанных символов.
1
Xeror
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
07.09.2015, 18:34  [ТС] #17
nonedark2008,
Поменял местами и все заработало))
Спасибо)
и Kerry_Jr, тоже огромное спасибо))
0
07.09.2015, 18:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2015, 18:34
Привет! Вот еще темы с решениями:

Получение данных из EDIT, ввод пользователем параметров пера
По лабам задали работу с графикой - создать программу которая будет выводить...

Установка текста в Edit
Есть задача, по нажатию на левую или правую кнопку мишы, в edit я должен...

Установка текста в edit
есть у меня окно, написанное средствами win32 api без всяких там визардов, есть...

Чтение текста из Edit
задача такая: мне нужно чтобы с эдита считывалась цифра затем цифра умножалась...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru