基于对话框在托盘图标上加的弹出菜单
.......
CMenu menu;menu.CreatePopupMenu();//声明一个弹出式菜单//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已//隐藏),将程序结束。menu.AppendMenu(MF_STRING,WM_DESTROY,"关闭");
menu.AppendMenu(MF_STRING,WM_OpenAbout,"还原");.......
WM_OpenAbout是个自定义消息头文件加入#define WM_OpenAbout WM_USER+101
afx_msg LRESULT OnOpenAbout(WPARAM wParam,LPARAM lParam);cpp的消息Map里加入ON_MESSAGE(WM_OpenAbout,OnOpenAbout)
定义了函数LRESULT CTiXingDlg::OnOpenAbout(WPARAM wParam,LPARAM lParam)

  this->ShowWindow(SW_SHOWNORMAL); //点托盘菜单后还原对话框显示
    return 0;
}
通过了编译,但是点击托盘菜单“还原”不响应,换了执行其他语句也不响应WM_OpenAbout,但响应“关闭”
请教达人,谢谢

解决方案 »

  1.   

    菜单消息用ON_COMMAND来处理,你似乎搞混了。
      

  2.   


    你可以先跟踪一下你的消息相应函数实际上被执行了没有,设个断点就可以。
    你很有可能是少了下面架星号的那一句:
        NOTIFYICONDATA nid;
        nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
        nid.hWnd = this->m_hWnd;
        nid.uID = IDR_MAINFRAME;
        nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ;
     ***   nid.uCallbackMessage = WM_OpenAbout;
        nid.hIcon = LoadIcon( AfxGetInstanceHandle(), 
            MAKEINTRESOURCE( IDI_ICON ));
        strcpy( nid.szTip, "show window" );        Shell_NotifyIcon( NIM_ADD, &nid );
            ShowWindow( SW_HIDE );       
      

  3.   

    nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称
    这个有写,化为托盘图标隐藏窗口用的,也管用ON_COMMAND(id , messageFxn)需要资源id,而我不想借助资源,纯文本菜单实现。既然menu.AppendMenu(MF_STRING,WM_DESTROY,"关闭");可以不借助资源响应关闭按钮,
    自定义的menu.AppendMenu(MF_STRING,WM_OpenAbout,"还原");应该也可以