Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Нестандартное добавление элемента? БАШНЯ ДЫМИТСЯ!


Автор: TimPP 22.5.2003, 17:44
Здравствуй мудрейший ALL!

Пишу ATL - DLL. Из основного окна приложения поймал CWnd диалогового окна, как мне добавить в него еще один элемент, к примеру свой Grid?

Спасибо!

Автор: Step 22.5.2003, 17:49
созадть его динамически, с парентом пойманого окна....


вопрос только в том как ты его обрабатывать будеш

Автор: TimPP 22.5.2003, 17:53
Я его создал он работает, но не ловит ENTER и TAB, при этом переходит на другие элементы диалога.
Но я его создавал просто как, наследника CWnd и говорил ему, что Parent`ом является найденный HWND.

Автор: Nastya 22.5.2003, 18:26
На счет ENTER
Цитата
вопрос только в том как ты его обрабатывать будеш

На счет TAB, это надо в стилях покопаться.

Цитата
Но я его создавал просто как, наследника CWnd и говорил ему, что Parent`ом является найденный HWND.


Ты бы код привел

Автор: TimPP 23.5.2003, 09:46
На форме есть кнопка которая создавала мой элемент, я фокусируюсь на моей таблице, работаю с ней, но если нажимаю ENTER (на моей таблице), она создается еще раз hehe.gif


Код

// Подготавливаем сообщение, если будет исключение
PrepError ( "Не могу создать элемент!" );

// Ищем диалоговое окно
CWnd* _wnd = FindOwner ( ppValue );

if ( _wnd == 0 )
{
 AlertMsg ( "ОШИБКА: Не могу найти диалоговое окно!" );
 rValue = (long)0;
 return 0;
}

// Ищем элемент диалога который надо заменить
CWnd* _bwnd = FindButton ( _wnd, ppValue[1]->GetString () );

if ( _bwnd == 0 )
{
 AlertMsg ( "ОШИБКА: Не могу найти кнопку!" );
 rValue = (long)0;
 return 0;
}

RECT _brect; _bwnd->GetWindowRect ( &_brect );
RECT _drect; _wnd->GetWindowRect ( &_drect );

_brect.left -= _drect.left;
_brect.top -= _drect.top;
_brect.right -= _drect.left;
_brect.bottom -= _drect.top;

// Прячем старый элемент
_bwnd->ShowWindow ( SW_HIDE );

// Создаем таблицу ( все параметры напрямую передаются CWnd )
if ( !_grid->Create ( _brect, _wnd, nID, WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE ) )
{
 AlertMsg ( "ОШИБКА: Не могу создать таблицу!" );
 rValue = (long)0;
 return 0;
}

TraceMsg ( "Успешно создали таблицу." );

rValue = (long)1;

Автор: Step 23.5.2003, 12:26
по вододу интера и таб, я думаю сообщения просто не тому окну идут. поставь сеткаптуре

Автор: TimPP 23.5.2003, 14:21
Не могу понять чем мне поможет SetCapture?
Прикол еще заключается в том, что при обходе элементов диалога клавишами - стрелками, фокус попадает в табличку и в ней дальше ходит курсор. А когда TAB`ом обходишь, то он в нее даже не попадает?

Но, хрен с ним с TAB`ом мне главное, что бы я ENTER у себя мог поймать.

Автор: Step 23.5.2003, 14:27
TimPP все сообщения будут идти тебе вот и получиш свой ентер

Автор: TimPP 23.5.2003, 14:35
Не работает! Тем более на сколько я знаю SetCapture перенаправляет только мышинные сообщения.

Автор: Step 23.5.2003, 14:36
клавиатурные тоже

Автор: TimPP 23.5.2003, 15:23
Еще забадяга, я настроил Hook на отлов всех идущих сообщений, ловлю нажатие любых клавиш и перенаправляю все себе, но все равно переход по TAB`у срабатывает?confused.gif

Автор: Step 23.5.2003, 17:14
ты должен заблокировать дольнейшую отправку, и хоок разный может быть, тебе надо ловить до передачи окнам, а не после.. там режими выставляються посмотри в хелпе

Автор: TimPP 27.5.2003, 16:18
Хорошо, ни хрена не получается с этими хуками - шмуками, ну и Бог с ними.
Меняем постановку вопроса. Если нужно динамически добавлять, убирать элементы уже существующего диалога ( на лету ). Как настроить нормальное получение сообщений в новых элементах?

Спасибо.

Автор: DENNN 27.5.2003, 19:43
Цитата
Как настроить нормальное получение сообщений в новых элементах?

Проще всего воспользоваться стандартным WinAPI - элементы точно также шлют сообщения родителю, просто в MFC коде у тебя нет соответствующих макросов smile.gif

Автор: TimPP 28.5.2003, 09:56
Что бы остановить сообщение и направить ко мне в MFC используется функция PreTranslateMessage, а если я добавляю элемент просто API, то в эту функцию даже не попадаю! Как быть?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)