动态添加菜单

利用windows系统消息WM_COPYDATA,从一个进程(程序)向另外一个进程(程序)发送消息,从而达到响应另外一个程序命令的功能。

在接收程序中添加WM_COPYDATA响应事件。并处理另外程序发送的消息。

BOOL CReceiverDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
 // TODO: Add your message handler code here and/or call default
 SetDlgItemText(IDC_MSG,(LPCTSTR)(pCopyDataStruct->lpData));
 CString *str;
 str = (CString*)(pCopyDataStruct->lpData);
 //添加菜单
 CMenu  menu;
 menu.LoadMenu(IDR_MENU1);
 menu.AppendMenu(MF_STRING,0,(LPCTSTR)(pCopyDataStruct->lpData));
 
 SetMenu(&menu);

当然可以通过分析字符串来做其它工作。

 return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}

在发送数据程序中添加发送数据代码

void CCopyDataDlg::OnSender()
{
 // TODO: Add extra validation here
 CString text;
 GetDlgItemText(IDC_MSG,text);
 if(text.IsEmpty()) 
  return;
 CWnd * p = CWnd::FindWindow(NULL,TEXT("Receiver")); //找到程序中运行的Text为Receiver程序

 if(p != NULL)//找到
 {
  COPYDATASTRUCT s;
  s.cbData = (text.GetLength() + 1) * sizeof(TCHAR);
  s.lpData = (LPVOID)LPCTSTR(text);
  p->SendMessage(WM_COPYDATA,/*(WPARAM)GetSafeHwnd()*/ 0,(LPARAM)&s);
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值