今天抄了一个托盘程序,发现有一个自定义的消息
#define WM_SHOWTASK WM_USER+1
是用来处理点击托盘图标的可是如何触发的该消息呢?
(这样的例子好像还不少,有一个孙鑫教程里的例子也是这样的,一个网络聊天程序
定义了一个WM_RECVDATA,可以处理网络消息,可是如何触发的该消息没有写)
听说是自动触发,真的吗?如果是,还有哪些是这样的啊?请各位指点,谢谢!

解决方案 »

  1.   

    自定义的消息不可以自动触发,应该用PostMessage或SendMessage来发送!
      

  2.   

    不可能自动触发的。
    PostMessage/SendMessage还需要自己进行消息映射
    ON_MESSAGE
      

  3.   

    像托盘程序的话你应该可以找到如下结构:
    NOTIFYICONDATA
    其中成员
    uCallbackMessage就是指定自定义的消息名称
    在置托盘时给其付值,然后在消息处理中像处理其它消息一样处理该消息就可以了
      

  4.   

    首先要在需要接收该消息的类中增加消息映射。
    在.h中增加 afx_msg LRESULT OnRouteChange(WPARAM wParam,LPARAM lParam);
    在.cpp中增加       ON_MESSAGE(WM_ROUTECHANGE,OnRouteChange)
    然后再增加函数体  LRESULT C***::OnRouteChange(WPARAM wParam,LPARAM lParam)
    {
        //****
        return TRUE;
    }
    这样,该类的消息响应已经完成,然后其它类就可以给该类发送自定义的WM_ROUTECHANGE消息了。
      

  5.   

    这是那个程序,原来的是MFC写的
    //taskicon.h
    #define WM_SHOWTASK WM_USER+101void toTray(HWND hWnd,HINSTANCE hInstance)
    {
    NOTIFYICONDATA nid;
    nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
    nid.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_SMALL));
    nid.hWnd=hWnd;
    strcpy(nid.szTip,"TEST");
    nid.uCallbackMessage=WM_SHOWTASK;
    nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
    nid.uID=IDI_SMALL;
    Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标
    // ShowWindow(hWnd,SW_HIDE);//隐藏主窗口
    }
    这是响应的部分:switch(message)
                    {
    case WM_SHOWTASK:
    wmId=LOWORD(lParam);  switch(wmId)
    {
    case WM_RBUTTONUP:
    GetCursorPos(&point);
    TrackPopupMenu (hMenu, TPM_RIGHTBUTTON|TPM_RIGHTALIGN,
    point.x, point.y,0,hWnd,NULL);
    return 0;
    }
                        }