C#中如何实现C++中的ON_MESSAGE函数啊?
小弟现在的C#项目中要实现一些硬件上的控制,SDK中提供的C++范例中有使用到ON_MESSAGE函数,我该如何实现啊?我对C++是一窍不通,盼各位赐教! 以下是相关代码和SDK中的说明:
/*==================映射OnMyCommand方法=========================*/
BEGIN_MESSAGE_MAP(CNewclientDlg, CDialog)
ON_MESSAGE(WM_MYCOMMAND,OnMyCommand)
END_MESSAGE_MAP()
/*==================OnMyCommand方法=========================*/
void CNewclientDlg::OnMyCommand(WPARAM wParam, LPARAM lParam)
{
}
/*==================调用=========================*/
NET_DVR_SetDVRMessage(WM_MYCOMMAND,this-> m_hWnd);
/*==================SDK中的说明=========================*/
BOOL NET_DVR_SetDVRMessage(UINT nMessage,HWND hWnd)
功能:设置接收硬盘录像机消息的窗口句柄
参数说明:
nMessage: 消息
hWnd:接收消息的窗口句柄
//异常类型
#define EXCEPTION_EXCHANGE 0x8000 //用户交互时异常
#define EXCEPTION_AUDIOEXCHANGE 0x8001 //语音对讲异常
#define EXCEPTION_ALARM 0x8002 //报警异常
#define EXCEPTION_PREVIEW 0x8003 //网络预览异常
#define EXCEPTION_SERIAL 0x8004 //透明通道异常
#define EXCEPTION_RECONNECT 0x8005 //预览时重连
注:消息处理函数如下:
void OnMyCommand(WPARAM wParam, LPARAM lParam)
{
char tempbuf[256];
DWORD dwType = wParam; //异常类型
LONG lIndex = lParam; //出现异常的相应类型的句柄
ZeroMemory(tempbuf,256);
switch(dwType)
{
case EXCEPTION_AUDIOEXCHANGE: //语音对讲时网络异常
sprintf(tempbuf, "语音对讲时网络异常!!! ");
TRACE( "%s ",tempbuf);
//TODO: 关闭语音对讲
break;
case EXCEPTION_ALARM: //报警上传时网络异常
sprintf(tempbuf, "报警上传时网络异常!!! ");
TRACE( "%s ",tempbuf);
//TODO: 关闭报警上传
break;
case EXCEPTION_PREVIEW: //网络预览时异常
sprintf(tempbuf, "网络预览时网络异常!!! ");
TRACE( "%s ",tempbuf);
//TODO: 关闭网络预览
break;
case EXCEPTION_SERIAL: //透明通道传输时异常
sprintf(tempbuf, "透明通道传输时网络异常!!! ");
TRACE( "%s ",tempbuf);
//TODO: 关闭透明通道
break;
case EXCEPTION_RECONNECT: //预览时重连
break;
default:
break;
}
}
------解决方案--------------------//不知道NetDVR是啥,我直接用SendMessage
//参考如下代码
private const int WM_USER = 0x0400;
private const int WM_MYCOMMAND = WM_USER + 10;
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_MYCOMMAND:
OnMyCommand(m.WParam, m.LParam);
break;
}
base.WndProc(ref m);
}
public void OnMyCommand(IntPtr wParam, IntPtr lParam)
{
MessageBox.Show( "hello ");
}
[DllImport( "User32.DLL ")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int iParam);
private void button3_Click(object sender, EventArgs e)
{
SendMessage(Handle, WM_MYCOMMAND, 0, 0);
}