나는 포인터를 할당하고, comboboxex 컨트롤의 LPARAM 데이터에 저장하고, 해당 컨트롤이 파괴되었을 때 해당 컨트롤을 삭제할 책임을지게하는 데 관심이 있습니다.MFC 사용자 지정 컨트롤 클래스에서 컨트롤 닫기 후크하는 방법
MFC에서 작업 중이므로 CComboBoxEx를 서브 클래스로 만들고 메시지 처리기 또는 가상 멤버 함수를 추가 할 수 있습니다.
질문 :이 패턴은 Win32/MFC에서 가능합니까?
기본적으로 컨트롤은 해당 HWND가 파괴되고 있다는 알림을 어떻게 받습니까?
WM_DESTROY에 대한 문서
:윈도우가 파괴 될 때 WM_DESTROY 메시지가 전송됩니다. 창문이 화면에서 제거 된 후에 창문이 파괴되는 창문 절차로 보내집니다. . (강조 광산)
불행하게도, 내 막연한 기억은이들의 OnDestroy()가없고, 관련 HWND와 상호 작용이 필요합니다 아무것도 처리하기 위해 너무 늦기 것을 의미인가?
OnDestroy() 중에 comboboxex의 요소를 쿼리 할 수 있습니까? "내 창/컨트롤이 파괴되기 직전에!"대신 사용할 수있는 또 다른 후크가 있습니까?
내 서브 클래스에 대해 CBEM_DELETEITEM을 오버로드하고 LPARAM 데이터를 삭제해야하는지 궁금합니다. 콤보 박스가 파괴되면 모든 항목이 명시 적으로 삭제됩니까? 그렇다면 그 메시지를 통해 모두 파괴 되었습니까? (컨트롤이 그 메시지를 자신에게 보냈습니까?)
참고 : 나는 shared_ptr 또는 scoped_ptr 벡터를 대화 상자 자체에 저장할 수 있음을 알고 있습니다.이 경우 포인터 삭제가 보장됩니다. 그러나이 추가 공간에서 추가 및 삭제를 동기화합니다. – Mordachai