나는 C 프로그램에 Windows Media Player를 내장하려고합니다. WMP SDK의 C++에서 WMP Host 예제를 발견했습니다. 그것은 심지어 디스패처를 포함합니다. 그러나 이벤트를 받으면 누가 이벤트를 보낸지 어떻게 알 수 있습니까? 어떻게 클래스 객체의 변수에 액세스합니까? 예를 들어, 클래스 멤버 (변수)를 설정하거나 메소드를 호출하려고합니다.WMP EventDispatcher : 누가 이벤트를 보냈는지 아는 방법?
CWMPHost 개체는 WMP 개체가 포함 된 창을 만들고 이벤트 개체를 만듭니다. 최소한의 코드는 다음과 같습니다
LRESULT CWMPHost::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
AtlAxWinInit();
CComPtr<IAxWinHostWindow> spHost;
CComPtr<IConnectionPointContainer> spConnectionContainer;
CComWMPEventDispatch *pEventListener = NULL;
CComPtr<IWMPEvents> spEventListener;
HRESULT hr;
RECT rcClient;
m_dwAdviseCookie = 0;
// create window
GetClientRect(&rcClient);
m_wndView.Create(m_hWnd, rcClient, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, 0);
// load OCX in window
hr = m_wndView.QueryHost(&spHost);
hr = spHost->CreateControl(CComBSTR(_T("{6BF52A52-394A-11d3-B153-00C04F79FAA6}")), m_wndView, 0);
hr = m_wndView.QueryControl(&m_spWMPPlayer);
// start listening to events
hr = CComWMPEventDispatch::CreateInstance(&pEventListener);
spEventListener = pEventListener;
hr = m_spWMPPlayer->QueryInterface(&spConnectionContainer);
// See if OCX supports the IWMPEvents interface
hr = spConnectionContainer->FindConnectionPoint(__uuidof(IWMPEvents), &m_spConnectionPoint);
if (FAILED(hr))
{
// If not, try the _WMPOCXEvents interface, which will use IDispatch
hr = spConnectionContainer->FindConnectionPoint(__uuidof(_WMPOCXEvents), &m_spConnectionPoint);
}
hr = m_spConnectionPoint->Advise(spEventListener, &m_dwAdviseCookie);
return 0;
}
전체 샘플 코드 https://github.com/pauldotknopf/WindowsSDK7-Samples/tree/master/multimedia/WMP/cpp/WMPHost
흠 ... 투표가 끝나고 가까운 제안을 보았으나 아무도 나를 도우 려하지 말고 무엇을해야 할 지 말해 줄 수 있습니까? –
이벤트를 생성 한 WMP라고 생각하시면됩니다. 아무도 그럴 것이다. –
@ Hans-Passant, 한 명 이상의 플레이어가 활동할 예정이므로 어떤 플레이어인지 알아야합니다. –