WM_COPYDATA如何用?

xzbj0001 2003-11-01 03:45:10
该如何使用WM_COPYDATA消息?
编译windows核心编程所提供的例子时通不过,提示
FORWARD_WM_COPYDATA未定义
...全文
164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzbj0001 2003-11-12
  • 打赏
  • 举报
回复
能不能给出个具体代码?发送端和接收端?
MilitaryMiniatures 2003-11-02
  • 打赏
  • 举报
回复
我没看书,不过,看你的代码,这个FORWARD_WM_COPYDATA,应该是一个宏定义,你大概忘了敲入这个宏定义了,这个宏定义大概如下:
#define FORWARD_WM_COPYDATA(hTrgWnd, hSrcWnd, pcds, func) \
func(hTrgWnd, WM_COPYDATA, (WPARAM)hSrcWnd, (LPARAM)pcds)
这个宏,其实就是实现发送消息的作用。
ionlic 2003-11-02
  • 打赏
  • 举报
回复
我只是上课的时候用过……

就是一个进程和另一个进程通信用的。按照MSDN的步骤就可以写出的。
xzbj0001 2003-11-02
  • 打赏
  • 举报
回复
是windows核心编程里的例子
void Dlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) {

switch (id) {
case IDCANCEL:
EndDialog(hwnd, id);
break;

case IDC_COPYDATA1:
case IDC_COPYDATA2:
if (codeNotify != BN_CLICKED)
break;

HWND hwndEdit = GetDlgItem(hwnd,
(id == IDC_COPYDATA1) ? IDC_DATA1 : IDC_DATA2);

// Prepare the COPYDATASTRUCT.
COPYDATASTRUCT cds;

// Indicate which data field we're sending (0=ID_DATA1, 1=ID_DATA2)
cds.dwData = (DWORD) ((id == IDC_COPYDATA1) ? 0 : 1);

// Get the length (in bytes) of the data block we're sending.
cds.cbData = (Edit_GetTextLength(hwndEdit) + 1) * sizeof(TCHAR);

// Allocate a block of memory to hold the string.
cds.lpData = _alloca(cds.cbData);

// Put the edit control's string in the data block.
Edit_GetText(hwndEdit, (PTSTR) cds.lpData, cds.cbData);

// Get the caption of our window.
TCHAR szCaption[100];
GetWindowText(hwnd, szCaption, chDIMOF(szCaption));

// Enumerate through all the top-level windows with the same caption
HWND hwndT = NULL;
do {
hwndT = FindWindowEx(NULL, hwndT, NULL, szCaption);
if (hwndT != NULL) {
FORWARD_WM_COPYDATA(hwndT, hwnd, &cds, SendMessage);
}
} while (hwndT != NULL);
break;
}
}

INT_PTR WINAPI Dlg_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch (uMsg) {
chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Dlg_OnInitDialog);
chHANDLE_DLGMSG(hwnd, WM_COMMAND, Dlg_OnCommand);
chHANDLE_DLGMSG(hwnd, WM_COPYDATA, Dlg_OnCopyData);
}
return(FALSE);
}

BOOL Dlg_OnCopyData(HWND hwnd, HWND hwndFrom, PCOPYDATASTRUCT cds) {

Edit_SetText(GetDlgItem(hwnd, cds->dwData ? IDC_DATA2 : IDC_DATA1),
(PTSTR) cds->lpData);

return(TRUE);
}
MilitaryMiniatures 2003-11-01
  • 打赏
  • 举报
回复
FORWARD_WM_COPYDATA是什么意思?什么地方见到这个东东了?莫非你敲错了?
你不如把这一段的代码贴出来看看。
WM_COPYDATA很好用的,我以前写过这样的代码。
xzbj0001 2003-11-01
  • 打赏
  • 举报
回复
为何没有人指点?伤心!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧