evc可以手动添加自己的消息映射函数BEGIN_MESSAGE_MAP,把消息和函数指针联系起来。
1、在CPP添加:
BEGIN_MESSAGE_MAP(CAutoChirperApp, CWinApp)
//{{AFX_MSG_MAP(CAutoChirperApp)
//}}AFX_MSG_MAP
// Standard file based document commands
END_MESSAGE_MAP()
然后在BEGIN_MESSAGE_MAP添加自己的消息函数或系统函数:
BEGIN_MESSAGE_MAP(CAutoChirperApp, CDialog)
//{{AFX_MSG_MAP(CAutoChirperApp)
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_WINDOWPOSCHANGED()//系统消息,重画窗口
ON_MESSAGE(WMU_GRAPHNOTIFY, OnGraphNotify)//自定义消息WMU_GRAPHNOTIFY,及函数指针OnGraphNotify
ON_MESSAGE(WMU_BROWSER_MSG, OnBrowserMsg)
ON_MESSAGE(WMU_PAGE_STU, OnPageMsg)
ON_MESSAGE(WMU_MENU_CANCEL, OnMenuMsg)
ON_MESSAGE(WM_DEVICECHANGE, OnDeviceChange)
//}}AFX_MSG_MAP
//ON_WM_DEVICECHANGE()
END_MESSAGE_MAP()
在CPP文件中添加消息响应函数
LRESULT CAutoChirperApp::OnGraphNotify(WPARAM wParam, LPARAM lParam)//SD卡状态函数
{
CString msg;
// msg.Format(TEXT("%d"), mFilterGraph->GetGraphNotifyEvent());
//MessageBox( msg, L"INIT ERROR!!!", MB_OK );
switch( mFilterGraph->GetGraphNotifyEvent() )
{
case EC_COMPLETE:
if( mFilterGraph->GetClipState() != CLIPSTATE_INIT )
{
m_bCompleteNext = TRUE;
if(m_bShowControls == FALSE)
{
mFilterGraph->InitVideoWindow(0);
//mFilterGraph->MoveVideoWindow( rectClient.left, rectClient.top, rectClient.Width(), rectClient.Height() );
m_bShowControls = TRUE;
}
OnBtnNext();
g_lFlagPaint = 0xffffffff;
InvalidateRect( NULL, FALSE );
}
break;
case EC_ACTIVATE:
// AfxMessageBox(L"EC_ACTIVATE Failed!");
break;
case EC_BUFFERING_DATA:
//AfxMessageBox(L"EC_BUFFERING_DATA Failed!");
break;
case EC_CLOCK_CHANGED:
// AfxMessageBox(L"EC_CLOCK_CHANGED Failed!");
break;
// case EC_CLOCK_UNSET:
// AfxMessageBox(L"EC_CLOCK_UNSET Failed!");
// break;
//case EC_DEVICE_LOST:
// AfxMessageBox(L"EC_DEVICE_LOST Failed!");
// break;
case EC_DISPLAY_CHANGED:
// AfxMessageBox(L"EC_DISPLAY_CHANGED Failed!");
break;
case EC_END_OF_SEGMENT:
// AfxMessageBox(L"EC_END_OF_SEGMENT Failed!");
break;
case EC_ERROR_STILLPLAYING:
// AfxMessageBox(L"EC_ERROR_STILLPLAYING Failed!");
break;
case EC_ERRORABORT:
//AfxMessageBox(L"EC_ERRORABORT Failed!");
break;
case EC_EXTDEVICE_MODE_CHANGE:
// AfxMessageBox(L"EC_EXTDEVICE_MODE_CHANGE Failed!");
break;
case EC_FULLSCREEN_LOST:
// AfxMessageBox(L"EC_FULLSCREEN_LOST Failed!");
break;
// case EC_GRAPH_CHANGED:
// AfxMessageBox(L"EC_GRAPH_CHANGED Failed!");
// break;
case EC_LENGTH_CHANGED:
// AfxMessageBox(L"EC_LENGTH_CHANGED Failed!");
break;
case EC_NEED_RESTART:
// AfxMessageBox(L"EC_NEED_RESTART Failed!");
break;
case EC_NOTIFY_WINDOW:
// AfxMessageBox(L"EC_NOTIFY_WINDOW Failed!");
break;
case EC_OLE_EVENT:
// AfxMessageBox(L"EC_OLE_EVENT Failed!");
break;
case EC_OPENING_FILE:
// AfxMessageBox(L"EC_OPENING_FILE Failed!");
break;
case EC_PALETTE_CHANGED:
// AfxMessageBox(L"EC_PALETTE_CHANGED Failed!");
break;
case EC_PAUSED:
// AfxMessageBox(L"EC_PAUSED Failed!");
break;
case EC_QUALITY_CHANGE:
// AfxMessageBox(L"EC_QUALITY_CHANGE Failed!");
break;
case EC_REPAINT:
// AfxMessageBox(L"EC_REPAINT Failed!");
break;
case EC_SEGMENT_STARTED:
// AfxMessageBox(L"EC_SEGMENT_STARTED Failed!");
break;
case EC_SHUTTING_DOWN:
// AfxMessageBox(L"EC_SHUTTING_DOWN Failed!");
break;
// case EC_SNDDEV_IN_ERROR:
// AfxMessageBox(L"EC_SNDDEV_IN_ERROR Failed!");
// break;
// case EC_SNDDEV_OUT_ERROR:
// AfxMessageBox(L"EC_SNDDEV_OUT_ERROR Failed!");
// break;
case EC_STARVATION:
// AfxMessageBox(L"EC_STARVATION Failed!");
break;
// case EC_STATE_CHANGE:
// AfxMessageBox(L"EC_STATE_CHANGE Failed!");
// break;
// case EC_STEP_COMPLETE:
// AfxMessageBox(L"EC_STEP_COMPLETE Failed!");
// break;
case EC_STREAM_CONTROL_STARTED:
//AfxMessageBox(L"EC_STREAM_CONTROL_STARTED Failed!");
break;
case EC_STREAM_CONTROL_STOPPED:
// AfxMessageBox(L"EC_STREAM_CONTROL_STOPPED Failed!");
break;
case EC_STREAM_ERROR_STILLPLAYING:
// AfxMessageBox(L"EC_STREAM_ERROR_STILLPLAYING Failed!");
break;
case EC_STREAM_ERROR_STOPPED:
// AfxMessageBox(L"EC_STREAM_ERROR_STOPPED Failed!");
break;
case EC_TIMECODE_AVAILABLE:
// AfxMessageBox(L"EC_TIMECODE_AVAILABLE Failed!");
break;
case EC_USERABORT:
//AfxMessageBox(L"EC_USERABORT Failed!");
break;
case EC_VIDEO_SIZE_CHANGED:
// AfxMessageBox(L"EC_VIDEO_SIZE_CHANGED Failed!");
break;
case EC_WINDOW_DESTROYED:
//AfxMessageBox(L"EC_WINDOW_DESTROYED Failed!");
break;
}
return 0;
}
2、接下来就是添加消息了
在相关的头文件里添加如下代码:
#define WMU_GRAPHNOTIFY (WM_USER+1004)//自定义的消息,应该在WM_USER基础上增加,但是前100最好不用
然后在头文件的类定义中在public下添加函数定义
class CAutoChirperApp: public CDialog
{
........
protected:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);//系统消息函数
DECLARE_MESSAGE_MAP()//一定要添加这个宏定义,使BEGIN_MESSAGE_MAP生效
public:
LRESULT OnGraphNotify(WPARAM wParam, LPARAM lParam);//由于是自定义函数,所以不用在函数前面加afx_msg
......
}