Проблемы с АПИ! Прочитайте, поймете! =)

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Devider
Сообщения: 8
Зарегистрирован: 24 дек 2004, 14:46

Господа!
Столкнулся с такой проблемой: в программке есть поле для ввода некой величины, которую нужно изменить из программы, которую я сейчас пишу. Вот, что у меня получилось:
CWnd* cWnd = FindWindow(NULL,"Form1");
if (!cWnd)
{
AfxMessageBox("!found");
return;
}
POINT p;
p.x = 5;
p.y = 5;
CWnd* cChildWnd = cWnd->ChildWindowFromPoint(p);
//Попадаю, вроде =) Мож как получше можно?
if (!cChildWnd)
{
AfxMessageBox("!found");
return;
}
// Это сотрет значение того поля
cChildWnd->SendMessage(WM_CLEAR,0,0);
А нужно его не стереть, а ввести новое. Подскажите, кто в курсе, пожалуйста!=)
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

cClild->SendMessage(WM_SETTEXT, "My text", 0);
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Devider
Сообщения: 8
Зарегистрирован: 24 дек 2004, 14:46

[quote="Romeo"]cClild->SendMessage(WM_SETTEXT, "My text", 0)]


cChildWnd->SendMessage(WM_SETTEXT,"Test",0);
Вот что получил...
error C2664: 'CWnd::SendMessageA' : cannot convert parameter 2 from 'const char [5]' to 'WPARAM'
Devider
Сообщения: 8
Зарегистрирован: 24 дек 2004, 14:46

cChildWnd->SendMessage(WM_SETTEXT,0,(WPARAM)"Test"); Во как! Блин, сам бы мог догадаться... Спасибо!
Devider
Сообщения: 8
Зарегистрирован: 24 дек 2004, 14:46

И под конец совсем дурацкий вопрос: а как сгенерить нажатие Ентера?
Tima
Сообщения: 43
Зарегистрирован: 23 сен 2004, 11:17
Откуда: Харьков
Контактная информация:

ответ напрашивается сам собой через SendMessage & WM_KEYDOWN
Devider
Сообщения: 8
Зарегистрирован: 24 дек 2004, 14:46

м... э... А как ты себе полностью это представляешь?
SendMessage(WM_KEYDOWN, а потом что?

Вот такая штука не работает, хотя вроде 'х' должен получиться...
cWnd->BringWindowToTop();
cChildWnd->SetFocus();
cChildWnd->SendMessage(WM_KEYDOWN,88,0);
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Для ввода символа в Editbox надо посылать WM_CHAR. А для симуляции нажатия клавиши Enter попробуй сСhildWnd->SendMessage(WM_KEYDOWN, VK_RETURN, 0L)

Есть еще вариант с SendInput, но это симуляция ввода на низком уровне (в системную очередь, а не в конкретное окно)
Tima
Сообщения: 43
Зарегистрирован: 23 сен 2004, 11:17
Откуда: Харьков
Контактная информация:

Да, правильно Eugie - если хош использовать SendMessage, то тиши так:
cChildWnd->SendMessage(WM_CHAR, (WPARAM)'x', 0);
cChildWnd->SendMessage(WM_CHAR, VK_RETURN, 0);
cChildWnd->SendMessage(WM_CHAR, (WPARAM)'x', 0);
Это выведет 2 x через строку.
Вообще то коряво как то использовать все эти SendMessage, ChildWindowFromPoint - но какой вопрос такой ответ
Devider
Сообщения: 8
Зарегистрирован: 24 дек 2004, 14:46

И тут же еще вопрос! =)
Что надо послать, чтобы нажать батон? WM_LBUTTONDOWN не катит... А если кто подскажет хороший источник со Знаниями, я отстану от уважаемого общества! =)
Ответить