自定义消息与发送处理
-
以销售管理系统项目为例子
-
消息的定义在主窗口MainFrm.h下:
//自定义消息,MW_USER是自定义的,为了指示选中了哪个选项 //后边的偏置是自己定的,为了避免与系统原有的重复 #define NM_A (WM_USER + 1) #define NM_B (WM_USER + 2) #define NM_C (WM_USER + 3) #define NM_D (WM_USER + 4) #define NM_E (WM_USER + 5)
-
在MainFrm.cpp下定义消息的分解宏
//ON_MESSAGE是响应的自动以消息 //产生NM_X消息,自动调用OnMyChange函数 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_MESSAGE(NM_A, OnMyChange) ON_MESSAGE(NM_B, OnMyChange) ON_MESSAGE(NM_C, OnMyChange) ON_MESSAGE(NM_D, OnMyChange) ON_MESSAGE(NM_E, OnMyChange) END_MESSAGE_MAP()
-
在分窗口SelectView.cpp中定义发送消息
//获取当前选中项 HTREEITEM item = m_tree->GetSelectedItem(); //获取选中项的内容 CString str = m_tree->GetItemText(item); //把选中哪个框的消息发送出去, if (str == TEXT("个人信息")){ //PostMessage 将一个消息放入窗口的消息队列, //这里发送消息是跨窗口,从左侧到右侧,所以要用原生的函数,前面加两个:: //AfxGetMainWnd() 框架窗口对象的指针 //AfxGetMainWnd()->GetSafeHwnd() 获取返回窗口的句柄 //NM_A 发送自定义消息 //(LPARAM)0:指定了附加信息,此参数这里没有意义 ::PostMessage(AfxGetMainWnd()->GetSafeHwnd(), NM_A, (WPARAM)NM_A,(LPARAM)0); } else if (str == TEXT("销售管理")) ::