如何在MFC生成的多个窗口类之间传递自定义消息?
第一次使用自定义消息,我的想法如下:(如有错误请指正)
假设有2过窗口类A,B,类A向类B发送自定义消息,使用PostMessage()函数。
那么在类A中应该先查找是否存在类B的句柄,如果找到,则向类B发送消息。
在类B中设定好消息响应函数。问题1:如何查找类B的句柄?
问题2;我的想法不知道有何错误?
问题3:不知谁有类似的简单例子,可以给我做参考吗,最好有完整代码
第一次使用自定义消息,我的想法如下:(如有错误请指正)
假设有2过窗口类A,B,类A向类B发送自定义消息,使用PostMessage()函数。
那么在类A中应该先查找是否存在类B的句柄,如果找到,则向类B发送消息。
在类B中设定好消息响应函数。问题1:如何查找类B的句柄?
问题2;我的想法不知道有何错误?
问题3:不知谁有类似的简单例子,可以给我做参考吗,最好有完整代码
用这个在B中获取B的窗口句柄---------------------------------------------------
//from MSDNReturns m_hWnd, or NULL if the this pointer is NULL.HWND GetSafeHwnd( ) const;Return Value
Returns the window handle for a window. Returns NULL if the CWnd is not attached to a window or if it is used with a NULL CWnd pointer.
================================
基本上没什么联系
在一个程序中,不同的2个窗口类,可他们需要数据交换,都从CDialog类继承
MDI的消息控制次序是视图、文档、MDI子框架窗口、MDI主框架窗口、应用程序;
消息一旦上一层截获,就不会在发往下一层了;对话框类中获得主框架类的指针,再发送消息。CMDIFrameWnd *pFrame =
(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd; pFrame ->PostMessage( WM_COMMAND, ID_YOUR_CMD, 0 ) ;但是,你在另外一个类中必须手动加入消息映射,
// 在CYourDlg中定义消息映射
BEGIN_MESSAGE_MAP(CYourDlg, CDialog)
//{{AFX_MSG_MAP(CYourDoc)
// ......
//}}AFX_MSG_MAP
ON_COMMAND( ID_YOUR_CMD, OnYourCmd )
END_MESSAGE_MAP()试试看,方向应该没错吧!
类A中
CWnd *pWnd=CWnd::FindWindow(NULL,"窗口类B的caption");
if (pWnd)
pWnd ->PostMessage(MSG_DL,0,0);
如果发现类B,就向类B发送消息,如果没有发现则跳过。