Re: Отправка сообщений родительскому (parent) окну
От: Axc  
Дата: 05.09.05 08:46
Оценка: 1 (1)
Здравствуйте, EugeneLed, Вы писали:

EL> Существует иерархия классов: класс А1 включает в себя объекты классов А2 и А3 (по одной штуке).

EL>А2 -- список файлов, а А3 -- кнопки плейера.
EL> Требуется: при нажатии на кнопку плейера не отдавать ему фокус, а оставлять у списка.
EL> Проблема:
EL> -- классы А2 и А3 ничего не знают друг о друге;
EL> -- класс А1 знает все о А2 и А3, но он не получает сообщения потери и получения фокуса от А2 и А3.

Если требуется, чтобы объект A3 вообще не получал фокус, то
A3:OnSetFocus(CWnd* pOldWnd)
{
  A3Parent::OnSetFocus(pOldWnd);
  a1->SendMessage(WM_A3SETFOCUS);
}

A1:OnA3SetFocus(UINT wParam, LONG lParam)
{
  SetFocus(a2->m_hWnd);
}
Отправка сообщений родительскому (parent) окну
От: EugeneLed  
Дата: 05.09.05 07:00
Оценка:
Доброе время суток!

Существует иерархия классов (приведена ниже): класс А1 включает в себя объекты классов А2 и А3 (по одной штуке).
А2 -- список файлов, а А3 -- кнопки плейера.
Требуется: при нажатии на кнопку плейера не отдавать ему фокус, а оставлять у списка.
Проблема:
-- классы А2 и А3 ничего не знают друг о друге;
-- класс А1 знает все о А2 и А3, но он не получает сообщения потери и получения фокуса от А2 и А3.

------
______| A1 |________
| ______ |
| |
------ ------
| A2 | | A3 |
------ ------

Заранее большое спасибо.
Вот, что я Вам всем скажу...
Re[2]: Отправка сообщений родительскому (parent) окну
От: EugeneLed  
Дата: 06.09.05 09:35
Оценка:
Здравствуйте, Axc, Вы писали:

Axc>Если требуется, чтобы объект A3 вообще не получал фокус, то

Axc>
Axc>A3:OnSetFocus(CWnd* pOldWnd)
Axc>{
Axc>  A3Parent::OnSetFocus(pOldWnd);
  a1->>SendMessage(WM_A3SETFOCUS);
Axc>}

Axc>A1:OnA3SetFocus(UINT wParam, LONG lParam)
Axc>{
Axc>  SetFocus(a2->m_hWnd);
Axc>}
Axc>


Мысль достаточно интересная. Попробовал реализовать, но у класса A3 сообщение OnSetFocus вызывается далеко не во всех случаях, нужен другой подход.
Вот, что я Вам всем скажу...
Re[3]: Отправка сообщений родительскому (parent) окну
От: Axc  
Дата: 06.09.05 09:38
Оценка:
Здравствуйте, EugeneLed, Вы писали:

EL> у класса A3 сообщение OnSetFocus вызывается далеко не во всех случаях

А когда оно не вызывается?
Re[4]: Отправка сообщений родительскому (parent) окну
От: EugeneLed  
Дата: 06.09.05 09:46
Оценка:
Здравствуйте, Axc, Вы писали:

Axc>Здравствуйте, EugeneLed, Вы писали:

EL>> у класса A3 сообщение OnSetFocus вызывается далеко не во всех случаях
Axc>А когда оно не вызывается?

Всего есть около десяти кнопок. При щелчке на двух из них, сообщение вызывается. В остальных случаях -- нет.
Вот, что я Вам всем скажу...
Re[5]: Отправка сообщений родительскому (parent) окну
От: Axc  
Дата: 06.09.05 09:51
Оценка:
Здравствуйте, EugeneLed, Вы писали:

EL>>> у класса A3 сообщение OnSetFocus вызывается далеко не во всех случаях


EL> Всего есть около десяти кнопок. При щелчке на двух из них, сообщение вызывается. В остальных случаях -- нет.

А точно ли им сопоставлены переменные класса A3?
Или переменная данного класса сопоставлена всему окну с кнопками?
Re[6]: Отправка сообщений родительскому (parent) окну
От: EugeneLed  
Дата: 06.09.05 10:04
Оценка:
Здравствуйте, Axc, Вы писали:

Axc>А точно ли им сопоставлены переменные класса A3?

Axc>Или переменная данного класса сопоставлена всему окну с кнопками?

Да, А3 -- все окно с кнопками. Кнопки являются членами класса А3. Но А3 должен получать фокус при нажатии на кнопку, если я не ошибаюсь. По крайней мере, список фокус теряет. У меня самого есть следующие варианты решения:

1) Создать класс, производный от используемого класса кнопки, способный принимать сообщения ON_SETFOCUS. <Нежелательно>
2) В самом списке создать обработчик потери фокуса (ON_KILL_FOCUS), который сравнивал бы окна-получатели фокуса с теми окнами, которым фокус достаться не должен <Еще более нежелательно>
Вот, что я Вам всем скажу...
Re[7]: Отправка сообщений родительскому (parent) окну
От: Axc  
Дата: 06.09.05 11:17
Оценка:
Здравствуйте, EugeneLed, Вы писали:


EL> Да, А3 -- все окно с кнопками. Кнопки являются членами класса А3. Но А3 должен получать фокус при нажатии на кнопку, если я не ошибаюсь. По крайней мере, список фокус теряет. У меня самого есть следующие варианты решения:


EL>1) Создать класс, производный от используемого класса кнопки, способный принимать сообщения ON_SETFOCUS. <Нежелательно>


Да, похоже именно так. Фокус ввода таки получает именно кнопка. Или посмотреть в сторону WM_ACTIVATE.
Re[8]: Отправка сообщений родительскому (parent) окну
От: EugeneLed  
Дата: 06.09.05 13:56
Оценка:
Здравствуйте, Axc, Вы писали:

Axc>Или посмотреть в сторону WM_ACTIVATE.


К сожалению, данное сообщение не сможет определить направление передачи фокуса. А просто не отдавать его никому нельзя, т.к. в плейер много окошек, и плейлист с кнопками лишь его часть.
Вот, что я Вам всем скажу...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.