我在学习托盘程序,需要自定义一个消息,我已经在.cpp和.h里的消息影射里填入了相关内容。但是报错说WM_TP未定义,请问应该在哪定义,是不是用define?应该怎么写?我的程序的头文件里加了一句#define WM_TP 1000,虽然能运行,但是消息没有响应

解决方案 »

  1.   

    我用了#define WM_TP WM_USER+1000,但是鼠标一移动到托盘上就出错unhandled exception int abc.exe (kernel32.dll),stack overflow是不是还有别的地方有错?请再给帮忙看一下
      

  2.   

    .h文件#define WM_MYMSG WM_USER+8BEGIN_MSG_MAP(CClassdefine)
    MESSAGE_HANDLER(WM_MYMSG/*你自己定义的*/, OnMyMsg/*你的消息处理含数*/)
    END_MSG_MAP().cpp文件
    OnMyMsg()
    {
       ....
    }
    最后就是怎么触发你的消息了
      

  3.   

    还是没有解决,我把重要代码贴出来大伙看看 NOTIFYICONDATA nid;
    nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
    nid.hWnd=m_hWnd;
    nid.uID=IDR_MAINFRAME;
    nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
    nid.uCallbackMessage=WM_TP;//自定义的消息名称
    nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
    strcpy(nid.szTip,"文本工具");//信息提示条 Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标BEGIN_MESSAGE_MAP(CTextToolsDlg, CDialog)
    //{{AFX_MSG_MAP(CTextToolsDlg)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_MESSAGE(WM_TP,onTp)
    ON_WM_TIMER()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP() virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg LRESULT onTp(WPARAM wParam,LPARAM lParam);
    afx_msg void OnTimer(UINT nIDEvent);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
      

  4.   

    #define WM_MYMSG (WM_USER+8)
    我一般从(WM_USER + 100)开始