CComboBox - обработка событий
От: Victoria  
Дата: 24.09.04 09:35
Оценка:
У меня есть CDataComboBox унаследованный от CComboBox. В CDataComboBox описано событие

void CDataComboBox::OnKillfocus()
{
...
}
//-------------------------------------------------------------------------
Далее я в форме использую этот комбобокс CDataComboBox m_City; И пытаюсь вызвать событие
void CEflsView::OnKillfocusCbstreet()
{
GetDlgItem(IDC_STREET)->SetFont(&NameFontNormal);

}


Как мне последовательно вызвать OnKillfocus(), а потом OnKillfocusCbstreet() (или наоборот)
Re: CComboBox - обработка событий
От: kolam http://www.linkedin.com/in/kolam
Дата: 24.09.04 11:44
Оценка:
Здравствуйте, Victoria, Вы писали:

V>Как мне последовательно вызвать OnKillfocus(), а потом OnKillfocusCbstreet() (или наоборот)


Не совсем понял в чем дело... Наверное, надо использовать PostMessage для соотвествующих контролов.
kolam
Re[2]: CComboBox - обработка событий
От: Victoria  
Дата: 24.09.04 11:55
Оценка:
Здравствуйте, kolam, Вы писали:

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


V>>Как мне последовательно вызвать OnKillfocus(), а потом OnKillfocusCbstreet() (или наоборот)


K>Не совсем понял в чем дело... Наверное, надо использовать PostMessage для соотвествующих контролов.

при вызове комбобокса вызывается OnKillfocus()
, там я пишу GetOwner()->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(m_hWnd,
GWL_ID), CBN_KILLFOCUS),(LPARAM)m_hWnd);
но эта строка вызывает себя же и программма зацикливается. А мне надо попасть в OnKillfocusCbstreet()
Re[3]: CComboBox - обработка событий
От: kolam http://www.linkedin.com/in/kolam
Дата: 24.09.04 14:08
Оценка:
Здравствуйте, Victoria, Вы писали:

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


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


V>>>Как мне последовательно вызвать OnKillfocus(), а потом OnKillfocusCbstreet() (или наоборот)


K>>Не совсем понял в чем дело... Наверное, надо использовать PostMessage для соотвествующих контролов.

V>при вызове комбобокса вызывается OnKillfocus()
V> , там я пишу GetOwner()->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(m_hWnd,
V> GWL_ID), CBN_KILLFOCUS),(LPARAM)m_hWnd);
V>но эта строка вызывает себя же и программма зацикливается. А мне надо попасть в OnKillfocusCbstreet()
Ну если уж идти таким путем, то тогда уж:
((CDialog*)GetOwner())->GetDlgItem(IDC_XXX)->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(m_hWnd, GWL_ID), CBN_KILLFOCUS),(LPARAM)m_hWnd);

Но такой подход не совсем правильный, так как контролы должны "знать" друг о друге. Лучше перехватывать сообщение о потере фокуса уровнем выше (например в диалоге), скажем, с помощью PreTranslateMessage и передавать управление последовательно всем заинтересованным контролам.
kolam
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.