如何发送一个消息把其中CString的内容发出去. 试试传递kk.operator LPCTSTR() 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用SendMessage(WM_TEST,(WPARAM)(LPCTSTR)kk)也不行呀! 改成:char kk[100] ="I LOVE YOU";SendMessage(WM_TEST,(WPARAM)kk);接收过程:OnTest(WPARAM wparam,LPARAM lparam){CString uu=(char*)wparam;AfxMessageBox(uu);} //发送过程://CString kk="I LOVE YOU";//SendMessage(WM_TEST,(WPARAM)kk);//接收过程://OnTest(WPARAM wparam,LPARAM lparam)//{//CString uu=(CString)wparam;//AfxMessageBox(uu);//}//消息映射://ON_MESSAGE(WM_TEST,OnTest)//结果发现在OnTest中无法收到kk的内容,请问大虾正确的方法!。这样做:Windows规定用户自定义消息为了不和系统已定义消息相冲突,应该这样定义:#define 消息名 消息号消息号通常采用WM_USER+nwindows消息具有以下两个参数:(1)字参数 (wParam)(2)长参数 (lParam)字参数和长参数都是32位整数,用于提供消息的附带信息,是消息传递过程中参数的载体通常Windows个消息号其附加信息是规定好了的,而我们自己定义消息,通常是将附加消息的指针做为传递值.明白了这个道理,我现在来解决你的问题,我用个对话框的程序作示范吧.在xxDlg.cpp前面加上:#define WM_TEST WM_USER+1用classwizzard添加Cancel按钮的消息响应函数如下:void CDdDlg::OnCancel() { // TODO: Add extra cleanup here CString kk="I LOVE YOU"; SendMessage(WM_TEST,(WPARAM)&kk,NULL); //CDialog::OnCancel();}在XXDlg.h中申明私有函数:void OnTest(WPARAM wparam,LPARAM lparam);返回到xxDlg.cpp中给出实现代码(这和你的OnTest大致一致,但既然是指针就要会操作指针)void CDdDlg::OnTest(WPARAM wparam,LPARAM lparam){ CString uu; uu=*(CString *)wparam; //把wparam当做就是你发送字符串的指针吧 AfxMessageBox(uu);}然后最重要的一步,如何知道程序有消息发送了咧?windows启动消息循环是这么定义的:MSG Msg;......While(GetMessage(&Msg,NULL,0,0)){ TranslateMessage(&Msg); DispatchMessage(&Msg);}对消息的处理是定义回调函数(叫窗口函数)LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ switch(message){.......case WM_DESTROY: PostQuitMessage(0);default: return DefWindowProc(hwnd,message,wParam,lParam);}return (0);}好了,别让人犯糊涂了,打住,步入解决问题的最后一击:用ClassWizzard重载WindowProc函数,添加代码如下:LRESULT CXXDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class switch(message) { case WM_TEST: OnTest(wParam,lParam); break; } return CDialog::WindowProc(message, wParam, lParam);}OK,任务结束,点击cancel按钮,发送消息..... 前面的帖子太长了,没怎么看,我用的方法都是new一块内存,然后作为一个参数发过去,接收者读完数据后delete,一直工作得挺好。不过我记得有人说过好像有个专用于传递这类东西的消息传递函数,那个高手快出来说一声,到底是哪个函数! 我以前用CArray的指针做为消息的参数正确地被传输过:下面的....LONG lPointer=(LONG)&kk;SendMessage(WM_TEST,lPointer);接收过程:OnTest(WPARAM wparam,LPARAM lparam){CString *puu=(CString*)wparam;AfxMessageBox(*puu);}可以吗!不过你可能要小心哦! 你是发送消息,所以可能在你的消息被处理以前有其它的消息被处理,这样可能把你的 kk 地址改变(因为你用的是CString)用char数组不用当心这个问题,但是char可能浪费你的一大堆内存哦!自己看着办吧! leer的方法是对的,只不过SendMessage要改为SendMessage(WM_TEST,(WPARAM)((LPCTSTR)kk));且kk须为类变量,否则得使用sybyl兄的new方法来使用,CoolFired是最完整的,谢谢大家 vc 调用matlab 编译无错误,运行出错 我的程序的SHELL扩展右键菜单为什么会和其它程序冲突? WSAAsyncSelect模型编程,但是为什么CAsyncSocket::AttachHandle在msdn中查不到呢? VC下如何保存因同步消息或同步延迟而进行任务切换的上下文? 求教,如何改变combobox可编辑框的背景图,以及右边按钮的宽度? 如何对Word文件实施全文搜索功能?最近有急用,谢谢!!!!! 对话框超出屏幕时自动添加滚动条 【MFC如何读写txt文件】 请教两个小问题 这个错大家遇到过吗 请问VC如何使用ADO 全局变量 theApp 怎么用 ?
char kk[100] ="I LOVE YOU";
SendMessage(WM_TEST,(WPARAM)kk);
接收过程:
OnTest(WPARAM wparam,LPARAM lparam)
{
CString uu=(char*)wparam;
AfxMessageBox(uu);
}
//CString kk="I LOVE YOU";
//SendMessage(WM_TEST,(WPARAM)kk);
//接收过程:
//OnTest(WPARAM wparam,LPARAM lparam)
//{
//CString uu=(CString)wparam;
//AfxMessageBox(uu);
//}
//消息映射:
//ON_MESSAGE(WM_TEST,OnTest)
//结果发现在OnTest中无法收到kk的内容,请问大虾正确的方法!。这样做:
Windows规定用户自定义消息为了不和系统已定义消息相冲突,应该这样定义:
#define 消息名 消息号
消息号通常采用WM_USER+nwindows消息具有以下两个参数:
(1)字参数 (wParam)
(2)长参数 (lParam)
字参数和长参数都是32位整数,用于提供消息的附带信息,是消息传递过程中参数的载体
通常Windows个消息号其附加信息是规定好了的,而我们自己定义消息,通常是将附加
消息的指针做为传递值.明白了这个道理,我现在来解决你的问题,我用个对话框的程序作示范吧.在xxDlg.cpp前面加上:
#define WM_TEST WM_USER+1用classwizzard添加Cancel按钮的消息响应函数如下:
void CDdDlg::OnCancel()
{
// TODO: Add extra cleanup here
CString kk="I LOVE YOU";
SendMessage(WM_TEST,(WPARAM)&kk,NULL);
//CDialog::OnCancel();
}在XXDlg.h中申明私有函数:
void OnTest(WPARAM wparam,LPARAM lparam);返回到xxDlg.cpp中给出实现代码(这和你的OnTest大致一致,但既然是指针就要会操作指针)
void CDdDlg::OnTest(WPARAM wparam,LPARAM lparam)
{
CString uu;
uu=*(CString *)wparam; //把wparam当做就是你发送字符串的指针吧
AfxMessageBox(uu);
}然后最重要的一步,如何知道程序有消息发送了咧?
windows启动消息循环是这么定义的:
MSG Msg;
......
While(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
对消息的处理是定义回调函数(叫窗口函数)
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
.......
case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return (0);
}好了,别让人犯糊涂了,打住,步入解决问题的最后一击:用ClassWizzard重载WindowProc函数,添加代码如下:LRESULT CXXDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message)
{
case WM_TEST:
OnTest(wParam,lParam);
break;
}
return CDialog::WindowProc(message, wParam, lParam);
}OK,任务结束,点击cancel按钮,发送消息.....
下面的....
LONG lPointer=(LONG)&kk;
SendMessage(WM_TEST,lPointer);
接收过程:
OnTest(WPARAM wparam,LPARAM lparam)
{
CString *puu=(CString*)wparam;
AfxMessageBox(*puu);
}
可以吗!
不过你可能要小心哦! 你是发送消息,所以可能在你的消息被处理以前有其它的消息被处理,这样可能把你的 kk 地址改变(因为你用的是CString)用char数组不用当心这个问题,但是char可能浪费你的一大堆内存哦!自己看着办吧!