动态添加菜单

陆宏壮
2023-12-01

利用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);
 }

}

 类似资料: