CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

用户自定义的消息问题

楼主asbeforelong(martin)2005-04-03 16:43:02 在 VC/MFC / 基础类 提问

对消息映射还不是很熟悉  
  为什么要在源文件开头加入  
  #define   WM_MYMESSAGE WM_USER+1  
  这样的一行才能正确用自定义的消息   WM_MYMESSAGE?   用MSDN查了一下WM_USER,好像是个很特别的东西呵。没有#define   WM_MYMESSAGE WM_USER+1为什么就不能直接用WM_MYMESSAGE? 问题点数:30、回复次数:10Top

1 楼hiiiiiijiang(等待毕业)回复于 2005-04-03 16:46:23 得分 5

没有什么不可以,只是为了不和系统预定义的消息值冲突  
   
  你同样可以  
  #define   WM_MYMESSAGE   0x111;  
  这样Top

2 楼surstar(我要写个操作系统出来……)回复于 2005-04-03 17:01:53 得分 0

都可以~Top

3 楼Featured(我握着爱情的门票静静排队……)回复于 2005-04-03 17:02:30 得分 5

>>没有#define   WM_MYMESSAGE WM_USER+1为什么就不能直接用WM_MYMESSAGE?  
   
  你试试看,会提示WM_MYMESSAGE未定义的!  
  其实,这个仅仅是定义一个标识,当程序把它从消息队列中取出来时好辨认。  
   
  另外,最好定义在1024之上。(因为WM_USER是1024;0-1024的有系统消息占用了,虽然这个消息不一定出现在你的程序里,但总归不太舒服。)Top

4 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-04-03 17:37:28 得分 5

1.消息其实就是一个数值  
  2.   如hiiiiiijiang(还差两个星期升到▲▲▲▲)   的方法是可以的,但是为什么不用呢?可能你使用的数值已经被使用于一般的系统定义的消息.避免冲突.  
  Top

5 楼xuzheng318(忧郁王子)回复于 2005-04-03 17:40:14 得分 0

消息都是一一对应一个数值!Top

6 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-03 18:35:18 得分 0

避免和系统自定义的消息冲突就好了Top

7 楼gyj_china(透明)回复于 2005-04-03 20:01:20 得分 10

#define   WM_MYMESSAGE WM_USER+1  
  这是消息声明,我们都知道C++的习惯是先声明后使用.定义消息之前我们习惯定义1024以外的,因为1024以前的一般留给系统使用.  
  所以WM_USER以外的都可以留给用户使用  
  如WM_USER+100Top

8 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2005-04-03 20:49:37 得分 0

那是为了不和现有的消息冲突,所以预留了一个WM_USER消息,此消息及其以上的值,都可以拿来当作自定义消息。Top

9 楼AnnLiu(Ann)回复于 2005-04-04 00:22:44 得分 0

自定义声明要大于1024Top

10 楼jiangsheng(蒋晟.Net[MVP])回复于 2005-04-04 04:07:22 得分 5

MSDN杂志   2004年7月   C++   Q&A  
  消息值,托管字符串,扰乱代码及其它  
  Paul   DiLascia  
  在你   2004   年   3   月   的专栏中,你通过重定义   WM_USER+1   实现   了   CMyOpenDlg   的初始化。我认为在通常意义上你误用了   WM_USER   的范围(它是保留给所有   RegisterClass   使用者的),此外还错在   WM_USER+1   已经   是一个预定义的对话框消息   DM_SETDEFID。你不应该再对这个消息用不同的值了吧?  
   
  Jeff   Partch  
   
    你说得完全正确!WM_USER   是为所有实现窗口类的人保留的——无论是你,还是友好的   Redmondtonians(译注:Microsoft),   仰或是   Gleepoid   行星上的叛逆者。Figure   1   展示了正式的   Windows   消息值的细目分类,对此每个人都应该至少每十年复习一次。WM_USER   到   0x7FFF   是为私有窗口类保留的。你可以将这个范围   认为是在特定的窗体类中有意义的专用消息。举个例子,状态栏控件的   SB_SETTEXTA   使用   WM_USER+1。同时正如你所指出的一样,   对话框的   DM_GETDEFID   和   DM_SETDEFID   使用   WM_USER+0   和   WM_USER+1。我在   2004   年   3   月的专栏中使用   WM_USER+1   是与   DM_GETDEFID   相冲突的。  
    想要定义其自己消息的应用程序应该使用   WM_APP。WM_APP   是确保不会与系统(WM_CREATE   等等)或类/特定控件消息如   DM_GETDEFID   相冲突的。Windows   定义   的   WM_APP   如下:  
   
  #if   (WINVER   >=   0x0400)  
  #define   WM_APP   0x8000  
  #endif  
    正如每个   Windows   极客(Geek)所知道的那样,WINVER   0x0400   是指   Windows   95、Windows   98   和   Windows   NT。所以   WM_APP   的使用还不到十年,这解释了为什么我没注意到它——在   2005   年之前,我不应该对下一个十年的消息范围妄加评论!  
   
  摘自小刀人的译文  
  http://www.vckbase.com/document/viewdoc/?id=1276Top

相关问题

  • 怎么自定义用户消息?
  • 自定义消息。。
  • 自定义消息!
  • 自定义消息
  • 自定义消息
  • 关于“用户自定义的消息”我有些不清楚
  • 在ATL中添加对用户自定义消息的响应
  • 请问如何响应用户自定义消息啊?
  • 用户自定义对象
  • 用户自定义界面

关键词

  • c++
  • 消息
  • 系统
  • wm
  • 自定义
  • mymessagewm
  • 定义
  • mymessage
  • getdefid
  • 使用

得分解答快速导航

  • 帖主:asbeforelong
  • hiiiiiijiang
  • Featured
  • fanqing
  • gyj_china
  • jiangsheng

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo