IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Один метод для разных событий (https://www.imho.ws/showthread.php?t=74071)

Merlyel 22.11.2004 01:48

Один метод для разных событий
 
Visual C++
Как сделать, чтобы один метод обрабатывал несколько событий
Т.е. есть две функции, кот вызываются при изменении значения в ComboBox. Как видно, отличаются они на мелочь :) Как тогда сбросить их в одну функцию?

void CPoteriDlg::OnCbnSelchangeType2()
{
FillData(&m_Project2, m_Type2Value);
}
void CPoteriDlg::OnCbnSelchangeType3()
{
FillData(&m_Project3, m_Type3Value);
}

З.Ы. Чувствую, что должно делаться просто... может я просто уже совсем перегрелся сегодня, но не могу придумать :(

gandalf_g 22.11.2004 10:13

юзать ON_CONTROL_RANGE, затем по ID контрола смотреть какой имеено комбо бокс был изменен, и в зависимости от ID и вызывать функцию FillData с соотв. параметрами

ON_CONTROL_RANGE(ON_CBN_SELCHANGE, IDC_COMBO1, IDC_COMBO3, OnCbnSelected)

void CMyDialog::OnCbnSelected(UINT nID)
{
int nCbnID = nID - IDC_COMBO1;
if (nCbnID == 0)
{
FillData(&m_Project1, m_Type1Value);
}
if (nCbnID == 1)
{
FillData(&m_Project2, m_Type2Value);
}
// и т.д.
}

ЗЫ: идешники IDC_COMBO1, IDC_COMBO2, IDC_COMBO3 должны идти подряд, см. resource.h

Duch 22.11.2004 10:35

А можно переопределить виртуальную ф-ю PreTranslateMessage

BOOL твой_класс::PreTranslateMessage( MSG* pmsg )
{
if ( pmsg->message == WM_COMMAND && HIWORD(pmsg->wParam) == CBN_EDITCHANGE ) {
Своя_функция( LOWORD(pmsg->wParam) /*ID ComboBox'а*/ )
return 1;
}
return базовый_класс::PreTranslateMessage( pmsg );
}


Часовой пояс GMT +4, время: 17:16.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.