您的位置:首页 > 其它

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

2015-10-24 20:17 671 查看
准备工作:



需求:

我们现在想右键点击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);
//使用的是mfc
GetParent()->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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: