使用MFC自定义消息,初学者常常容易出错,根据书上得到的 例子输入的 代码,编译常常不能通过.本人根据亲身经历,得出几点思考:
1.#define wm_user_message wm_user+int (shift)语句后不能加";"号;
2.上述shift 为1~1000以内的 整数值;
3.该值的选择与系统消息,窗口消息,控件消息等无关;
4.消息映射必须在BEGIN_MESSAGE_MAPS()和END_MESSAGE_MAPS()之内;
5.消息处理的声明以及代码添加必须在指定的类中.
一般书上没有考虑初学者的接受能力,往往忽略了这几点,不知各位高手是否认同?

解决方案 »

  1.   

    我不是高手,但是你的第一个绝对不正确,一般已经很少用WM_USER了,都改成 WM_APP了
      

  2.   

    建议用 RegisterWindowMessage 来自动分配消息IDstatic const UINT MsgUpdateCounters = ::RegisterWindowMessage("Update Frame Counters");
    static const UINT MsgDataReady = ::RegisterWindowMessage("data ready");映射消息的时候:ON_REGISTERED_MESSAGE(MsgUpdateCounters, OnUpdateCounters)
    ON_REGISTERED_MESSAGE(MsgDataReady, OnDataReady)
      

  3.   

    所发帖子的结论均在MSVS VC++6.0中测试通过~~
      

  4.   

    #define应该用const unsigned int代替
      

  5.   

    呵呵,MSDN上的文档明确表明了WM_USER,WM_APP,RegisterWindowMessage是三种不同的消息,有各自的定义与用途,因此这三种方式都是可以的,没有哪一种取代哪一种的说法的。
      

  6.   

    呵呵 我一直都是用的4楼的 RegisterWindowMessage