41 / 13 / 4
Регистрация: 22.07.2013
Сообщений: 145
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Получить текст из Edit1 и переслать в Edit216.06.2016, 21:36. Показов 1757. Ответов 14
Метки нет (Все метки)
Приветствую знатоков С++. Возник вопрос по WinApi, подскажите кто знает. В родительском окне есть 2 текстовых поля :
Добавлено через 1 час 3 минуты Кажется разобрался. Что бы просто переслать текст нужно использовать SetDlgItemText вместо Postmessege :
Добавлено через 4 часа 25 минут Неужели никто не знает как при нажатии на кнопку приписать ES_LEFT полю EDIT ? Помогите пожалуйста.
0
|
16.06.2016, 21:36 | |
Ответы с готовыми решениями:
14
Если занят Edit1, то текст запишется в Edit2 Как сохранить данные из Edit1 в Edit2, чтобы после перезагрузки программы сохраненное в Edit2 не удалялось? При нажатии на клавиши, добавлять через точку с запятой текст из Edit1 и Edit2 в ListBox Создать программу которая при нажатии Button отсылает текст полей Edit1 и Edit2 на мыло |
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
|
|
17.06.2016, 10:27 | 2 |
Попробуй для Edit'а вызвать SetWindowLong с параметром GWL_EXSTYLE и соответствующей битовой маской.
1
|
41 / 13 / 4
Регистрация: 22.07.2013
Сообщений: 145
|
||||||
17.06.2016, 14:15 [ТС] | 3 | |||||
Не совсем понимаю как вызвать SetWindowLong именно для нужного EDITa а не того откуда текст копируется.
В функции SetWindowLong только 3 параметра hWnd (как я понял это дескриптор родительского окна на котором находятся Edit'ы ), nIndex и dwNewLong. nIndex = GWL_STYLE устанавливает новый стиль а dwNewLong = ES_LEFT (например) тогда? Пробовал:
0
|
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
|
||||||
17.06.2016, 19:52 | 4 | |||||
Почему дескриптор родительского? В MSDN'e же английским по белому написано:
Т.е. что то типа этого:
1
|
41 / 13 / 4
Регистрация: 22.07.2013
Сообщений: 145
|
|||||||||||
17.06.2016, 22:10 [ТС] | 5 | ||||||||||
hEditControl - это дескриптор окна или Editа?
Добавлено через 3 минуты Сразу стиль установить можно, но текст должен по команде свой стиль изменять: ES_CENTER при нажатии на кнопку 1, ES_RIGHT - при нажатии на кнопку 2 и т.д. Добавлено через 34 минуты Такой вариант тоже не срабатывает. Ссылка на неразрешенный внешний символ.
0
|
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
|
|
18.06.2016, 11:08 | 6 |
Да, дескриптор уникальный идентификатор. Вернее HANDLE. Они есть у всех объектов операционной системы: файлов, объектов синхронизации, окон, GDI, и т.п. Поля Edit, кнопки и любые другие контролы - это тоже окна как и содержащее их родительское окно, поэтому оконные handle'ы (т.е. HWND) у них у каждого свой.
Косяки последнего кода: 1) Слишком много параметров в WndProc. Их должно быть 4: WindowProc callback function. Откуда HWND Edit1, HWND Edit2 ? 2) В 33 строке кто присылает ES_RIGHT1 ? Кнопка то у тебя создается с идентификатором ES_LEFT1. (т.е. в этот блок ты вероятно никогда не попадешь)
1
|
41 / 13 / 4
Регистрация: 22.07.2013
Сообщений: 145
|
|||||||||||
18.06.2016, 15:00 [ТС] | 7 | ||||||||||
Если из WndProc убрать параметры Edit1 и Edit2 то они будут не определены для:
0
|
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
|
|
18.06.2016, 18:21 | 8 |
Такой вопрос: почему для создания кнопки при вызове CreateWindow ты в качестве хэндла родительского окна указываешь hWnd, а для создания полей ввода (т.е. Edit'ов) пытаешься впихнуть какие-то неопознанные идентификаторы Edit1 и Edit2 ? Передавай hWnd, это же оно для них будет родительским окном.
1
|
41 / 13 / 4
Регистрация: 22.07.2013
Сообщений: 145
|
||||||
18.06.2016, 19:25 [ТС] | 9 | |||||
Ну, потому что если тут просто ставить hWnd то стиль будет изменен для всего родительского окна а не для конкретного поля
Добавлено через 13 минут При этом реагируют все кнопки а не только ES_LEFT1. Добавлено через 12 секунд При этом реагируют все кнопки а не только ES_LEFT1.
0
|
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
|
||||||
18.06.2016, 20:45 | 10 | |||||
Для получения хэндла поля ввода можно воспользоваться функцией GetDlgItem. А потом ему уже устанавливай стиль:
Наверное проще будет сделать Build->Clean..., заархивировать и прикрепить к сообщению весь проект.
1
|
41 / 13 / 4
Регистрация: 22.07.2013
Сообщений: 145
|
||||||
19.06.2016, 00:43 [ТС] | 11 | |||||
Все, их не много, это кнопки для разных стилей ES_CENTER, ES_LEFT, ES_RIGHT и т.д.
Маленький вопрос: в чем разница между |= и просто присваиванием = ?
0
|
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
|
||||||
19.06.2016, 11:15 | 12 | |||||
Не знаю почему один wParam в WM_COMMAND срабатывает на все кнопки. Может быть у тебя константы их идентификаторов одинаковые? (т.е. ES_RIGHT1 == ES_CENTER1 == ES_LEFT1) ? Щелкни в коде по ним правой кнопкой, нажми "Go To Definition" и сравни значения.
"=" - это обычное присваивание, а "|=" - присваивание после побитового ИЛИ. Вот весь список: операторы присваивания Да, и еще, попробуй кнопки создавать так: первой задай стиль группы (строка 21)
1
|
41 / 13 / 4
Регистрация: 22.07.2013
Сообщений: 145
|
|||||||||||
19.06.2016, 12:42 [ТС] | 13 | ||||||||||
Спасибо за подсказку, Действительно константы идентификаторов были одинаковые. Поменял и заработало почти как надо. Осталась одна проблема. У меня 4 кнопки - стиль по левому, правому краю, центру и в верхнем ключе.
Добавлено через 4 минуты Если Создавать кнопки так:
0
|
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
|
||||||
20.06.2016, 10:32 | 14 | |||||
Сообщение было отмечено Sergei12 как решение
Решение
Так происходит потому что при переключении не сбрасываются биты предыдущих стилей и они накапливаются начиная друг другу противоречить. Т.е. одновременно назначаются и ES_LEFT, и ES_RIGHT, и ES_CENTER и т.д.
Чтобы обнулить ненужные биты можно воспользоваться битовым "И" с инвертированной маской:
При создании кнопок стиль WS_GROUP должен быть только у первой. Это объединит их в группу и при нажатии в белом кружке появится черная точка.
1
|
41 / 13 / 4
Регистрация: 22.07.2013
Сообщений: 145
|
|
21.06.2016, 12:32 [ТС] | 15 |
Спасибо огромное за помощь! Теперь все работает.
0
|
21.06.2016, 12:32 | |
21.06.2016, 12:32 | |
Помогаю со студенческими работами здесь
15
При введении значения в Edit1 и Edit5 получить с помощью расчета по формуле значение в Edit2 ListBox+Edit1 Edit2 Работа с Edit1 Edit2 и CheckBox Switch, зависящий не только от Edit1 но и от Edit2 Простая задачка edit1+edit2=Edit3 Массив чисел из Edit1 и Edit2 в StringGrid Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |