怎样用postmessage传递一个字符数组或者一个字符串?

crysword 2003-12-05 03:37:06
RT
...全文
259 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
crysword 2004-01-13
  • 打赏
  • 举报
回复
SendMessage(Handle,WM_SETTEXT,(WPARAM)NULL,(LPARAM)"Just a test");


const int WM_TEST=WM_USER+10;



void __fastcall TForm1::Button2Click(TObject* Sender)

{

SendMessage(this->Handle,WM_TEST,(WPARAM)0,(LPARAM)"Justa a test");

}



void __fastcall TForm1::WndProc(TMessage& Message)

{

case WM_TEST :



AnsiString Str=AnsiString((char*)Message.LParam);

Memo1->Lines->Add(Str);//没任何问题

break;



default:



TForm::WndPProc(Message);

break;

}


不同进程:


要在不同的进程传递数据只能使用消息WM_COPYDATA,

无法使用你自定义的消息.下面是使用WM_COPYDATA消息的代码,测试过没问题.



代码:
//发送 :
COPYDATASTRUCT cds;



AnsiString Data=Edit2->Text;//"Just a test";



cds.dwData=sizeof(COPYDATASTRUCT);

cds.cbData=Data.Length();

cds.lpData=(LPVOID)Data.c_str();



//想目标窗口发消息WM_COPYDATA

SendMessage((HWND)Edit1->Text.ToInt(),WM_COPYDATA,(WPARAM)NULL,(LPARAM)&cds);
//接收:
if(Message.Msg==WM_COPYDATA)
{

COPYDATASTRUCT *cds;

char* DataBuf;



cds=(COPYDATASTRUCT*)Message.LParam;

DataBuf=new char[cds->cbData];

CopyMemory(DataBuf,cds->lpData,cds->cbData);



AnsiString Str=AnsiString(DataBuf);

Memo1->Lines->Add("Str="+Str);



delete[] DataBuf;

}
这是我找到的bcb上的帖子。给大家参考.
crysword 2003-12-05
  • 打赏
  • 举报
回复
可能不是一个进程的说。而且不想使用地址。想直接传送。
xjcpower 2003-12-05
  • 打赏
  • 举报
回复
把字符串的地址放在参数wparam或者lparam里面传过去!必须是同一进程哦!

13,874

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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