У меня есть класс CListCtrl, и в тот момент, когда пользователь выбирает один из подэлементов, я отображаю CComboBox над подэлементом, из которого пользователь может затем сделать выбор.
Однако у меня есть проблема. Когда пользователь сделал выбор, мне нужно, чтобы поле со списком исчезло (т.е. перехватить CBN_SELCHANGE). Проблема в том, что мне нужно сделать CComboBox дочерним по отношению к CListCtrl (в противном случае у меня возникают странные проблемы с рисованием списка над полем со списком, даже если я устанавливаю поле со списком, чтобы оно было верхним) Таким образом, сообщение CBN_SELCHANGE отправляется в представление списка, которое, по понятным причинам, игнорирует его. Как я могу получить представление списка, чтобы передать это сообщение в родительское окно.
Мне действительно нужно получить свой собственный класс CListCtrl, который просто перехватывает сообщение CBN_SELCHANGE и передает его в родительское окно? Есть ли лучший способ сделать это, чем создание обработчика OnWndMsg?
Спасибо за любую помощь!
Редактировать: Этот код работает
class CPassThroughListCtrl : public CListCtrl
{
protected:
virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
if ( message == WM_COMMAND )
{
GetParent()->SendMessage( message, wParam, lParam );
}
return CListCtrl::OnWndMsg( message, wParam, lParam, pResult );
}
public:
CPassThroughListCtrl()
{
};
};
Но мне бы очень хотелось узнать, есть ли лучший способ сделать это.