MFC总结(4)---MFC中如何使用子控件向父控件发送自定义消息

来源:互联网 发布:怎样申请淘宝直播间 编辑:程序博客网 时间:2024/06/05 23:53

准备工作:

需求:

我们现在想右键点击ListConsole 上的item,弹出Memu菜单,当选中Menu菜单后,对选中的进程进行处理。

我这里使用的是,子控件向父控件发送自定义消息解决。

子控件---ListConsole

父控件---TabConsole


步骤:

1、在工程中的stdafx.h文件中定义一些用于判断是何种消息宏

//进程菜单操作#define WM_USER_PROC_FLUSH(WM_USER + 4)//刷新#define WM_USER_PROC_THREAD(WM_USER + 5)//线程#define WM_USER_PROC_MODULE(WM_USER + 6)//模块#define WM_USER_PROC_KILL(WM_USER + 7)//杀死进程#define WM_USER_PROC_OUTFILE(WM_USER + 8)//导入文件

2、在子控件中给各个Munu添加事件,下面以刷新按钮作为介绍,添加COMMAND 事件



然后添加发送到父控件的消息 ,代码 如下:

这里有两种做法;

a、使用API方式

::SendMessage(GetParent()->m_hWnd, WM_USER_PROC_FLUSH, 0, (LPARAM)WM_USER_PROC_FLUSH);

b、使用MFC方式

GetParent()->SendMessage( WM_USER_PROC_FLUSH, 0, (LPARAM)WM_USER_PROC_FLUSH);

void CMyListCtrl::MyProcessFlush(){// TODO:  在此添加命令处理程序代码//使用的window//::SendMessage(GetParent()->m_hWnd, WM_USER_PROC_FLUSH, 0, (LPARAM)WM_USER_PROC_FLUSH);//使用的是mfcGetParent()->SendMessage(  WM_USER_PROC_FLUSH, 0, (LPARAM)WM_USER_PROC_FLUSH);}void CMyListCtrl::MyProcessModule(){// TODO:  在此添加命令处理程序代码GetParent()->SendMessage(WM_USER_PROC_MODULE, 0, (LPARAM)WM_USER_PROC_MODULE);}void CMyListCtrl::MyProcessThread(){// TODO:  在此添加命令处理程序代码::SendMessage(GetParent()->m_hWnd, WM_USER_PROC_THREAD, 0, (LPARAM)WM_USER_PROC_THREAD);}void CMyListCtrl::MyProcessKill(){// TODO:  在此添加命令处理程序代码::SendMessage(GetParent()->m_hWnd, WM_USER_PROC_KILL, 0, (LPARAM)WM_USER_PROC_KILL);}void CMyListCtrl::MyProcessOutFile(){// TODO:  在此添加命令处理程序代码::SendMessage(GetParent()->m_hWnd, WM_USER_PROC_OUTFILE, 0, (LPARAM)WM_USER_PROC_OUTFILE);}


3、在父控件中添加 虚函数 WindowProc,在这里就可以接受到子控件发送过来的消息,并进行处理

LRESULT CProcessDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam){// TODO:  在此添加专用代码和/或调用基类switch (message){case WM_USER_PROC_FLUSH:MessageBox(_T("WM_USER_PROC_FLUSH"), 0, 0);break;case WM_USER_PROC_THREAD:MessageBox(_T("WM_USER_PROC_THREAD"), 0, 0);break;case WM_USER_PROC_MODULE:MessageBox(_T("WM_USER_PROC_MODULE "), 0, 0);break;case WM_USER_PROC_KILL:MessageBox(_T("WM_USER_PROC_KILL "), 0, 0);break;case WM_USER_PROC_OUTFILE:MessageBox(_T("WM_USER_PROC_OUTFILE "), 0, 0);break;}return CDialogEx::WindowProc(message, wParam, lParam);}


 

相关代码

http://download.csdn.net/detail/obuyiseng/9209957



0 0