::Sendmessage();貌似不能传字符串之类的吧。那应该如何在对话框间传值

PepperEggFriedRice 2016-11-01 04:16:56

software是另一个工程,不属于Mathgraphic下。想传一个Cstring类型的东西,网上搜了一下没有多少栗子。。。


void CMathGraphicDlg::OnBnClickedButton4()
{
CWnd *pWnd=CWnd::FindWindow(NULL,_T("software"));
if(pWnd==NULL)
{
AfxMessageBox(_T("接收程序没有运行!"));
return ;
}
else
{
AfxMessageBox(_T("检测成功"));
//获取hWnd,不过Cwnd里封装了m_hwnd直接用就行了
//HWND hWnd;
//hWnd = pWnd->GetSafeHwnd(); //推荐
::SendMessage(pWnd->m_hWnd,USEDRAWMATH,NULL,NULL);
}



}
...全文
482 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-11-03
  • 打赏
  • 举报
回复
楼主上道了!
PepperEggFriedRice 2016-11-03
  • 打赏
  • 举报
回复
引用 16 楼 zhao4zhong1 的回复:
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
已经改为txt的了
羽毛乱发 2016-11-03
  • 打赏
  • 举报
回复
发消息给另外一个进程,弄一个共享DLL,告诉他去读最新的数据;但是前提是在同一个目录下;
赵4老师 2016-11-02
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。
也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。
只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。
即可很方便地让A、B两种语言之间协调工作。
比如:
A将请求数据写到文件a.txt,写完后改名为aa.txt
B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt
A发现bb.txt存在时,读取其内容,读完后删除bb.txt
以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。
除非A或B不支持判断文件是否存在、文件读写和文件更名。
但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢?
可以将临时文件放在RamDisk上提高效率减少磨损磁盘。
数据的结构很复杂的话,文本文件的格式问题可参考json或xml

共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的:
·进程之间松耦合
·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。
·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。
·方便在线开关服务,只需删除或创建该临时文本文件即可。
·方便实现分布式和负载均衡。
·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满)
·……

“跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边,
回头是“使用共享纯文本文件进行信息交流”的岸!
paschen 2016-11-02
  • 打赏
  • 举报
回复
传递指向字符串的指针
schlafenhamster 2016-11-02
  • 打赏
  • 举报
回复
"3. 第二个 NULL 是 LPARAM 通常 是个 地址 ,只有 WM_SETTEXT , 和 WM_COPYDATA 能跨进程使用这个参数" 因为对这2个 消息, 系统会 把 地址 里的 字符串 ,转换到另一个进程中,否则 2个进程的地址空间是不同的。 2. 对于 另一个进程里的 edit 控件 可以 send WM_SETTEXT , 和 WM_COPYDATA 消息。
060 2016-11-02
  • 打赏
  • 举报
回复
你有几个工程不是关键,你运行了几个进程才是关键。 你的一个工程,运行了多次,有多个进程在运行,在进程之间一个对话框给另一个对话框发送消息,也是很困难的,这涉及到进程间通信。 你有多个工程,其中一个是exe,其它的是dll,这个exe可以调用这些dll,那么他们一个对话框给另一个对话框发送消息,也是很容易的。
sevancheng 2016-11-01
  • 打赏
  • 举报
回复
发指针就可,再从指针取数据
Eleven 2016-11-01
  • 打赏
  • 举报
回复
引用 10 楼 PepperEggFriedRice 的回复:
[quote=引用 6 楼 schlafenhamster 的回复:] ::SendMessage(pWnd->m_hWnd,USEDRAWMATH,NULL,NULL); 1 ,USEDRAWMATH 消息必须是 360 认识的,如 WM_SETTEXT 2,第一个 NULL 是 WPARAM 通常是个 值 可以,跨进程 send 3. 第二个 NULL 是 LPARAM 通常 是个 地址 ,只有 WM_SETTEXT , 和 WM_COPYDATA 能跨进程使用这个参数
后面两个哪个可以传字符串类型的吗? 不太懂 WPARAM和LPARAM[/quote] 那两个参数与具体的消息相关,不同的消息,不同的含义,请参考MSDN文档~
  • 打赏
  • 举报
回复
引用 8 楼 PepperEggFriedRice 的回复:
[quote=引用 7 楼 shiyanzi 的回复:] 摘取上位机里面的用法
::SendMessage((port->m_pOwner)->m_hWnd, WM_COMM_RXCHAR, (WPARAM) RXBuff, (LPARAM) port->m_nPortNr);
RXBuff 这传一个字符 m_nPortNr 这传一串字符串,就用这个参数
麻烦定义时候的类型贴一下谢谢,rxbuff和port.nPortNr [/quote] BYTE 数组,也就是unsigned char指针,两个参数类型可以一样,
PepperEggFriedRice 2016-11-01
  • 打赏
  • 举报
回复
引用 6 楼 schlafenhamster 的回复:
::SendMessage(pWnd->m_hWnd,USEDRAWMATH,NULL,NULL); 1 ,USEDRAWMATH 消息必须是 360 认识的,如 WM_SETTEXT 2,第一个 NULL 是 WPARAM 通常是个 值 可以,跨进程 send 3. 第二个 NULL 是 LPARAM 通常 是个 地址 ,只有 WM_SETTEXT , 和 WM_COPYDATA 能跨进程使用这个参数
后面两个哪个可以传字符串类型的吗? 不太懂 WPARAM和LPARAM
PepperEggFriedRice 2016-11-01
  • 打赏
  • 举报
回复
引用 5 楼 wangkuo106 的回复:
[quote=引用 4 楼 PepperEggFriedRice 的回复:] 貌似可以用堆来存放。。。然后另一个程序从堆里读地址。。。貌似可以吧
多进程?[/quote]不,,就是俩毫无关系的程序。
PepperEggFriedRice 2016-11-01
  • 打赏
  • 举报
回复
引用 7 楼 shiyanzi 的回复:
摘取上位机里面的用法
::SendMessage((port->m_pOwner)->m_hWnd, WM_COMM_RXCHAR, (WPARAM) RXBuff, (LPARAM) port->m_nPortNr);
RXBuff 这传一个字符 m_nPortNr 这传一串字符串,就用这个参数
麻烦定义时候的类型贴一下谢谢,rxbuff和port.nPortNr
  • 打赏
  • 举报
回复
摘取上位机里面的用法
::SendMessage((port->m_pOwner)->m_hWnd, WM_COMM_RXCHAR, (WPARAM) RXBuff, (LPARAM) port->m_nPortNr);
RXBuff 这传一个字符 m_nPortNr 这传一串字符串,就用这个参数
schlafenhamster 2016-11-01
  • 打赏
  • 举报
回复
::SendMessage(pWnd->m_hWnd,USEDRAWMATH,NULL,NULL); 1 ,USEDRAWMATH 消息必须是 360 认识的,如 WM_SETTEXT 2,第一个 NULL 是 WPARAM 通常是个 值 可以,跨进程 send 3. 第二个 NULL 是 LPARAM 通常 是个 地址 ,只有 WM_SETTEXT , 和 WM_COPYDATA 能跨进程使用这个参数
  • 打赏
  • 举报
回复
引用 4 楼 PepperEggFriedRice 的回复:
貌似可以用堆来存放。。。然后另一个程序从堆里读地址。。。貌似可以吧
多进程?
PepperEggFriedRice 2016-11-01
  • 打赏
  • 举报
回复
貌似可以用堆来存放。。。然后另一个程序从堆里读地址。。。貌似可以吧
PepperEggFriedRice 2016-11-01
  • 打赏
  • 举报
回复
引用 2 楼 wangkuo106 的回复:
另一个工程?那么就是设为全局变量也不能访问的到的?还是说只是不属于Mathgraphic这个类里面的
意思就是两个解决方案。没有互相关联。通俗的说就可以理解为 QQ聊天窗口能不能给 360杀毒窗口传东西。除了Sendmessage传的UINT。
  • 打赏
  • 举报
回复
另一个工程?那么就是设为全局变量也不能访问的到的?还是说只是不属于Mathgraphic这个类里面的
PepperEggFriedRice 2016-11-01
  • 打赏
  • 举报
回复
Sendmessage最后两个参数貌似没法用。。。

16,472

社区成员

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

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

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