у меня есть CDialog
содержит много CEdit
объекты. Все они должны выполнять аналогичные операции при уничтожении фокуса (например, когда фокус убит, текст в поле редактирования изменяется).
Я могу определить карту сообщений диалога следующим образом:
ON_EN_KILLFOCUS(ID1, kf1)
ON_EN_KILLFOCUS(ID2, kf2)
ON_EN_KILLFOCUS(ID3, kf3)
ON_EN_KILLFOCUS(ID4, kf4)
и все kf
Функция вызовет общую функцию:
CommonFunction(CEdit* editBox)
Но есть ли способ передать окно редактирования в kf
сама функция? Я хочу определить это так:
ON_EN_KILLFOCUS(ID1, kf(ID1))
ON_EN_KILLFOCUS(ID2, kf(ID2))
ON_EN_KILLFOCUS(ID3, kf(ID3))
ON_EN_KILLFOCUS(ID4, kf(ID4))
или другим способом.
НОТА: Я использую Visual C ++ 6.0 (выпуск ’98)
Вы можете использовать ON_CONTROL_RANGE в карте сообщений для отправки всех сообщений одной и той же функции. Для этого необходимо убедиться, что идентификаторы находятся в непрерывном диапазоне. (При необходимости измените resource.h.)
ON_CONTROL_RANGE(BN_CLICKED, IDC_RADIO_DRAWALL, IDC_RADIO_DRAWBEST, OnRadioBtnDraw)
void CVisualPPView::OnRadioBtnDraw(UINT nID)
{
}
Других решений пока нет …