2012-04-17 4 views
0

CMyDialogCtrlTree과 같은 권한이 있습니다. CMyDialog 클래스의 ON_WM_LBUTTONDOWN()과 같은 메시지를 CTreeCtrl에서 처리하고 싶습니다.상위 CDialog에서 제어 메시지를 처리하는 방법은 무엇입니까?

MFC에서 메시지 스트림을 부모로 리디렉션 할 수있는 방법이 있습니까?

+0

가 왜 그렇게 하시겠습니까? MFC 아키텍처의 핵심은 캡슐화, 코드 재사용 및 책임 분리를 촉진하는 이미지를 처음 생성 한 컨트롤에서 부모 컨트롤까지의 메시지를 반영한다는 점입니다. –

+0

고용주가 저에게 그 일을 제공합니다. CDialog의 처리기가 이미 작성되었으므로 메시지 스트림을 리디렉션하고 싶습니다. 나는이 솔루션이 캡슐화에 동의하지 않는다는 것을 알고 있습니다. 그러나 메시지 스트림을 리디렉션하면 프로젝트가 거의 준비됩니다. 이 주제에 대한 아이디어가 있습니까? – Diego666

+0

http://stackoverflow.com/questions/1506145/how-to-handle-cedit-mouse-click-in-parent-form – Flot2011

답변

0

메시지를 리디렉션하는 가장 간단한 방법은 컨트롤의 ON_WM_LBUTTONDOWN 처리기에서 부모 클래스로 사용자 지정 (WM_USER + xxx) 메시지를 보내는 것입니다.

부모의 WM_LBUTTONDOWN 처리기 코드를 별도의 메서드에 배치하고이 메서드를 직접 호출하십시오. 기존의 코드가 HandleTreeCtrlLBDown에 앉아 있다는 그 (의사 코드) 같은

뭔가, 추정()

CMyTreeCtrl::OnLButtonDown(..) 
{ 
    pParent ->SendMessage(WM_TREECTRLLBDOWN, 0, (LPARAM)this); 
} 

CControlParentDialog::OnTreeCtrlLBDown(wParam, lParam) 
{ 
    HandleTreeCtrlLBDown(); 
} 
관련 문제