나는 CListCtrl 클래스를 가지고 있으며 사용자가 하위 항목 중 하나를 선택하는 순간 사용자가 선택할 수있는 하위 항목 위에 CComboBox를 표시하고 있습니다.MFC가있는 자식의 메시지를 가로 채기
그러나 문제가 있습니다. 사용자가 선택을하면 콤보 상자가 없어야합니다 (예 : CBN_SELCHANGE를 가로 채기). 문제는 CComboBox를 CListCtrl의 자식으로 만들 필요가 있다는 것입니다. 그렇지 않으면 콤보 상자를 최상으로 설정하더라도 콤보 상자 위에 그리는 목록에 이상한 문제가 발생합니다. 따라서 CBN_SELCHANGE 메시지는 목록보기로 전송되어 이해하기 쉽도록 무시됩니다. 해당 메시지를 상위 창까지 전달하도록 목록보기를 가져 오는 방법은 무엇입니까?
실제로 CBN_SELCHANGE 메시지를 가로 채어 상위 창으로 전달하는 자체 CListCtrl 클래스를 파생해야합니까? 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()
{
};
};
작동하지만 난 정말이 할 수있는 더 좋은 방법이 있는지 알고 싶습니다.
그것의 나쁜 제안은 아직도 특정 상황을 외부에 거의 사용을 가진 사용자 정의 클래스를 만드는 끝날 동안. 또한 SubclassWindow 함수를 사용한다는 의미는 아닙니다. 메시지를 가로 챌 수 있다면 윈도우의 진정한 하위 분류를 사용하는지 궁금하게 생각합니다. 부끄러운 줄 알았어 창문을 가지고있어. ( – Goz
서브 클래 싱하지 않음 :-) : 클래스 CNotifyingComboBox : public CComboBox – BostonLogan
아아아 나는 여전히 제곱으로 돌아 간다. 이러한 특정 상황에서만 사용됩니다. 그건 당신의 콤보 상자는 내가 도면을 재정의하고 목록보기 하위 항목에 맞게 이점을 가지고있다 : – Goz