WM_COPYDATA WM_COPYDATA消息主要目的是允许在进程间传递只读数据。SDK文档推荐用户使用SendMessage函数,接受方在数据拷贝完成前不返回,这样发送方就不可能删除和修改数据: SendMessage(hwnd,WM_COPYDATA,wParam,lParam);
其中wParam设置为包含数据的窗口的句柄。lParam指向一个COPYDATASTRUCT的结构:
typedef struct tagCOPYDATASTRUCT{
DWORD dwData; //用户定义数据
DWORD cbData; //数据大小
PVOID lpData; //指向数据的指针
}COPYDATASTRUCT;
这段代码所说的设置句柄 是怎么设置啊
另外 该函数的参数好像是窗口句柄吧,我想给程序发消息int,然后在该程序界面上显示数字,到底是该给窗口还是给程序发
上面的设置什么的我不明白
其中wParam设置为包含数据的窗口的句柄。lParam指向一个COPYDATASTRUCT的结构:
typedef struct tagCOPYDATASTRUCT{
DWORD dwData; //用户定义数据
DWORD cbData; //数据大小
PVOID lpData; //指向数据的指针
}COPYDATASTRUCT;
这段代码所说的设置句柄 是怎么设置啊
另外 该函数的参数好像是窗口句柄吧,我想给程序发消息int,然后在该程序界面上显示数字,到底是该给窗口还是给程序发
上面的设置什么的我不明白
另外 该函数的参数好像是窗口句柄吧,我想给程序发消息int,然后在该程序界面上显示数字,到底是该给窗口还是给程序发
上面的设置什么的我不明白
==============
这里的四个参数分别是:hwnd应该是对方的窗口,也就是接收方的窗口,wParam是发送方的窗口,也就是你用SendMessage发送时所在的窗口。
你发WM_COPYDATA当然是发送给对方程序的窗口了。
就是说你消息是发到哪个窗口,哪个窗口的消息函数可以处理这个消息的意思(以上我说的比较白,希望lz能明白。)
To send this message, call the SendMessage function as follows.
lResult = SendMessage( // returns LRESULT in lResult (HWND) hWndControl, // handle to destination control (UINT) WM_COPYDATA, // message ID (WPARAM) wParam, // = (WPARAM) () wParam; (LPARAM) lParam // = (LPARAM) () lParam; );
ParameterswParam
Handle to the window passing the data.
lParam
Pointer to a COPYDATASTRUCT structure that contains the data to be passed.
CopyData消息是解决消息在不同进程间传递数据的。但如果数据只有4个字节(32位系统上),也就是sizeof(int)那么大, 任何一个消息都可以传递的,只有大于4字节的,才需要动用Copy data消息。
==============
窗口句柄最通用的方法是用FindWindow获得。
int i;
i=8;
COPYDATASTRUCT cs;
cs.cbData = sizeof(i);//发送数据cs.lpData的大小
cs.dwData = 0; //现在没有使用
cs.lpData = &i; //
SendMessage(hWnd,WM_COPYDATA,,(WPARAM)GetSafeHwnd(),(LPARAM)&cs);
=============
就是COPYDATASTRUCT类型啊,COPYDATASTRUCT就是类型名啊,具体的定义你去看MSDN。
当然
::SendMessage(窗口句柄,WM_USER+100, 0,int值);
也是可以的。也就是你用WPARAM还是LPARAM传int,都是一样的。WM_USER+100是自定义消息,你随便定义:
#define WM_SEND_INT WM_USER+100
Used to define private messages for use by private window classes, usually of the form WM_USER+X, where X is an integer value.