Sendmessage方法的使用

GL_wuhan 2013-01-22 11:01:42
SendMessage
(
IntPtr hWnd,
int Msg,
IntPtr wParam,
ref CopyDataStruct lParam
);
以上是C#的声明(我要问的问题与语言无关),当Msg用0x00AA时,收端窗口无法从指针转成CopyDataStruct的结构体,用0x004A的时候就可以,想问问这个Msg是有代表什么特殊的含义吗?收端通过这个Msg来标识是否是想要的消息然后对内存指针做转换的,那如果其他意料之外的地方也发出了这样一个Msg,转换不就出问题了么,肿么解决这个Msg的问题。。。
...全文
165 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿麦 2013-01-22
  • 打赏
  • 举报
回复
定义在WM_USER以内,后果就是你分不清是系统消息还是自定义消息。
sumos 2013-01-22
  • 打赏
  • 举报
回复
简单点说, switch(kMsg) { 系统Msg id: 用户Msg id: } 如果和系统Msg id重复了,你觉得你自己的能够被执行到吗
GL_wuhan 2013-01-22
  • 打赏
  • 举报
回复
引用 7 楼 zhoujielunzhimi 的回复:
引用 6 楼 GL_wuhan 的回复:引用 1 楼 zhoujielunzhimi 的回复:Msg的确有特殊含义,系统Msg一般小于 1024(即 WM_USER),用户自定义Msg一般从1025开始。如果我定义的Msg小于1024会有什么后果? 比如你把Msg定义为和WM_PAINT一样的数字,假如是333,那么你SendMessage的时候,系统是按照Msg的递增……
“所以”后面的没懂。。
sumos 2013-01-22
  • 打赏
  • 举报
回复
引用 6 楼 GL_wuhan 的回复:
引用 1 楼 zhoujielunzhimi 的回复:Msg的确有特殊含义,系统Msg一般小于 1024(即 WM_USER),用户自定义Msg一般从1025开始。如果我定义的Msg小于1024会有什么后果?
比如你把Msg定义为和WM_PAINT一样的数字,假如是333,那么你SendMessage的时候,系统是按照Msg的递增顺序做switch跳转的,所以你的程序要是响应了WM_PAINT消息,那么自然就不会响应Msg了。
GL_wuhan 2013-01-22
  • 打赏
  • 举报
回复
引用 1 楼 zhoujielunzhimi 的回复:
Msg的确有特殊含义,系统Msg一般小于 1024(即 WM_USER),用户自定义Msg一般从1025开始。
如果我定义的Msg小于1024会有什么后果?
GL_wuhan 2013-01-22
  • 打赏
  • 举报
回复
引用 3 楼 amoyman 的回复:
这里的参数MSG,是指的消息的代码,一般用户自定义的在 WM_USER以上才行 WM_USER用于系统专用的类型。
那WM_USER是多少啊?如果使用这以下的就意味着可能和系统的冲突对吗?
阿麦 2013-01-22
  • 打赏
  • 举报
回复
订正一下,是WM_USER以下,是系统专用。(少了“以下”两个字,意思就大不同了 ^_^)
阿麦 2013-01-22
  • 打赏
  • 举报
回复
这里的参数MSG,是指的消息的代码,一般用户自定义的在 WM_USER以上才行 WM_USER用于系统专用的类型。
阿麦 2013-01-22
  • 打赏
  • 举报
回复
好象发错地了。这里以 C/C++ 如果是C#,指针是“伪指针”,要转换成实际的指针才行哦。
sumos 2013-01-22
  • 打赏
  • 举报
回复
Msg的确有特殊含义,系统Msg一般小于 1024(即 WM_USER),用户自定义Msg一般从1025开始。
GL_wuhan 2013-01-22
  • 打赏
  • 举报
回复
引用 14 楼 zhao4zhong1 的回复:
C/C++ code?12File: "C:\Program Files\Microsoft Visual Studio\VC98\Include\WINUSER.H" 1384: #define WM_COPYDATA 0x004A
终于等来WM_COPYDATA啦。。。 WM_COPYDATA用于进程间通信,可它也在WM_USER范围之内,按前面一个哥们说的也就是系统用的,这样不会冲突了么?
赵4老师 2013-01-22
  • 打赏
  • 举报
回复
File: "C:\Program Files\Microsoft Visual Studio\VC98\Include\WINUSER.H"
  1384: #define WM_COPYDATA                     0x004A
赵4老师 2013-01-22
  • 打赏
  • 举报
回复
引用 5 楼 GL_wuhan 的回复:
引用 3 楼 amoyman 的回复:这里的参数MSG,是指的消息的代码,一般用户自定义的在 WM_USER以上才行 WM_USER用于系统专用的类型。那WM_USER是多少啊?如果使用这以下的就意味着可能和系统的冲突对吗?
File: "C:\Program Files\Microsoft Visual Studio\VC98\Include\WINUSER.H"
  1650: #define WM_USER                         0x0400
sumos 2013-01-22
  • 打赏
  • 举报
回复
引用 11 楼 GL_wuhan 的回复:
引用 9 楼 zhoujielunzhimi 的回复:简单点说, switch(kMsg) { 系统Msg id: 用户Msg id: } 如果和系统Msg id重复了,你觉得你自己的能够被执行到吗跟楼下说的不太一样啊,到底是分不清还是压根执行不到
你觉得呢?switch语句,肯定是压根执行不到。
GL_wuhan 2013-01-22
  • 打赏
  • 举报
回复
引用 9 楼 zhoujielunzhimi 的回复:
简单点说, switch(kMsg) { 系统Msg id: 用户Msg id: } 如果和系统Msg id重复了,你觉得你自己的能够被执行到吗
跟楼下说的不太一样啊,到底是分不清还是压根执行不到

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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