我有一个用winsock托管C ++ DLL。 上接收它经由PostMessage的发送自定义消息,一个CWnd *()。 从非托管C ++调用时能正常工作。 目标的CWnd *被登记使用这种代码施工后的C ++类:
// Registers a window (CWnd *) to receive a message when a valid
// incoming data packet is received on this UdpRetrySocket.
void CUdpRetrySocket::RegOnReceive(CWnd *i_pOnReceiveWnd, UINT i_RecvMsgId = WM_USER_RECV_DATA_AVAIL)
{
m_pOnReceiveWnd = i_pOnReceiveWnd;
m_RecvMsgId = i_RecvMsgId;
}
下面的代码是帖子的消息的CWnd *
// If there is a pending incoming packet and there is a window
// registered for receive notification then post a message to it.
if (m_bInPktPending && m_pOnReceiveWnd != NULL)
m_pOnReceiveWnd->PostMessage(m_RecvMsgId,
(WPARAM)m_RecvSocket.LocalSockAddrIn().Port(),
(LPARAM)this
);
现在,我使用从C#Windows窗体应用此CUdpRetrySocket类。 问题:
从C#形式类我如何获得一个CWnd *我的C ++类CUdpRetrySocket注册
FOUND答案这里为#1
// C++ Register Window Method void RegOnReceive(System::IntPtr i_Hwnd) { m_pOnReceiveWnd = CWnd::FromHandle((HWND)i_Hwnd.ToPointer()); } // C# Caller of Register Window Method class MyForm : Form { . . . cmdDev.RegOnReceive(Handle);
如何创建我的C#窗口的事件捕捉到了这个定制的MFC风格的消息?
我需要的C#应用程序的最小化窗口时,即使处理数据包。 如果是最小化将C#Forms窗口仍然收到这些消息?
有一个更好的方法吗?