HRESULT CAVDConfDlg::OnRTCEvent(UINT message, WPARAM wParam, LPARAM lParam) { IDispatch * pDisp = (IDispatch *)lParam; RTC_EVENT enEvent = (RTC_EVENT)wParam; HRESULT hr; // 基于 RTC_EVENT 类型,查询 // 适当的事件接口并调用辅助 // 方法来处理事件 switch ( wParam ) { ... . case RTCE_REGISTRATION_STATE_CHANGE: { IRTCRegistrationStateChangeEvent * pEvent = NULL; // 获取与当前会话关联的事件句柄。 hr = pDisp->QueryInterface( IID_IRTCSessionStateChangeEvent, (void **)&pEvent ); if (SUCCEEDED(hr)) { OnRTCSessionStateChangeEvent(pEvent); SAFE_RELEASE(pEvent); } } break; case RTCE_BUDDY: { IRTCBuddyEvent * pEvent = NULL; hr = pDisp->QueryInterface( IID_IRTCBuddyEvent, (void **)&pEvent ); if (SUCCEEDED(hr)) { OnRTCBuddyEvent(pEvent); SAFE_RELEASE(pEvent); } } break; case RTCE_WATCHER: { IRTCWatcherEvent * pEvent = NULL; hr = pDisp->QueryInterface( IID_IRTCWatcherEvent, (void **)&pEvent ); if (SUCCEEDED(hr)) { OnRTCWatcherEvent(pEvent); SAFE_RELEASE(pEvent); } } break; } ... . } |