写了个光驱控制程序,当程序最小化后,点托盘图标没有反应。不知道什么原因。。请各位帮帮忙//托盘图标处理函数单击右键弹出个菜单。。如果不选择菜单在其他地方单击则菜单消失。。当双击左键时程序主窗口重新弹开。。
void CCDROMControlDlg::OnWM_NOTIFYICON(WPARAM wParam, LPARAM lParam)
{
UINT nID=(UINT)wParam;
UINT uMouseMsg=(UINT)lParam;
switch(uMouseMsg)
{
case WM_LBUTTONDBLCLK:
if(m_blsMinimized==TRUE)
{
ShowWindow(SW_SHOW);
m_blsMinimized=!m_blsMinimized;
}
break;
case WM_RBUTTONDOWN:
CMenu menu;
CPoint curpos;
GetCursorPos(&curpos);
if(menu.LoadMenu(IDR_MENU))
{
CMenu * pPopup;
pPopup=menu.GetSubMenu(0);
ASSERT(pPopup!=NULL);
SetForegroundWindow();
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,curpos.x,curpos.y,AfxGetMainWnd());
}
break;
}
}
//在文件前面定义了下面两个消息ID#define WM_NOTIFYICON WM_USER+1
#define IDC_NOTIFYICON WM_USER+2

解决方案 »

  1.   

    m_blsMinimized 如果为false, 则不会弹出。看看是不是这个问题。
      

  2.   

    你调试一下  看看程序能不能走到if(m_blsMinimized==TRUE) 这行代码,看看是消息循环出的问题还是代码的问题
      

  3.   

    http://c.chinaitlab.com/vc/813960.html这篇文章 你看看吧
      

  4.   

    应该是m_blsMinimized的问题
    处理这里你还在哪改过这个值
    调试看看操作这个变量是否合理
      

  5.   

    我试着改了下。。发现那个没问题
    但是又出现了这个问题:c:\users\administrator.dao-pc\documents\visual studio 2008\projects\cdromcontrol\cdromcontrol\cdromcontroldlg.cpp(78) : error C2440: “static_cast”: 无法从“void (__thiscall CCDROMControlDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
    1>        在匹配目标类型的范围内没有具有该名称的函数
    出错的地方是:ON_MESSAGE(WM_NOTIFYICON,OnWM_NOTIFYICON)
    void CCDROMControlDlg::OnWM_NOTIFYICON(WPARAM wParam, LPARAM lParam)
    {
    UINT nID=(UINT)wParam;
    UINT uMouseMsg=(UINT)lParam;
    switch(uMouseMsg)
    {
    case WM_LBUTTONDBLCLK:
    if(m_blsMinimized==TRUE)
    {
    ShowWindow(SW_SHOW);
    m_blsMinimized=!m_blsMinimized;
    }
    break;
    case WM_RBUTTONDOWN:
    CMenu menu;
    CPoint curpos;
    GetCursorPos(&curpos);
    if(menu.LoadMenu(IDR_MENU))
    {
    CMenu * pPopup;
    pPopup=menu.GetSubMenu(0);
    ASSERT(pPopup!=NULL);
    SetForegroundWindow();
    pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,curpos.x,curpos.y,AfxGetMainWnd());
    }
    break;
    }
    }
    //在文件前面定义了下面两个消息ID#define WM_NOTIFYICON WM_USER+1
    #define IDC_NOTIFYICON WM_USER+2
      

  6.   

    这里也有个资料,你参考以下吧。
    http://hi.baidu.com/qiujiejia/blog/item/1002a93492b7d547251f1481.html/cmtid/55844101785d710b1d9583e5#55844101785d710b1d9583e5
      

  7.   

    将头文件的函数声明和源文件里的定义
    void CCDROMControlDlg::OnWM_NOTIFYICON(WPARAM wParam, LPARAM lParam)
    改成
    afx_msg LRESULT CCDROMControlDlg::OnWM_NOTIFYICON(WPARAM wParam, LPARAM lParam)
      

  8.   

    谢谢刚刚楼上的提醒////上面的问题终于解决了。但是又有新问题。
    当我右击那个托盘图标时,程序出现错误
    case WM_RBUTTONDOWN:
    CMenu menu;
    CPoint curpos;
    GetCursorPos(&curpos);
    if(menu.LoadMenu(IDR_MENU))
    {
    CMenu * pPopup;
    pPopup=menu.GetSubMenu(0);
    ASSERT(pPopup!=NULL);
    SetForegroundWindow(); pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,curpos.x,curpos.y,AfxGetMainWnd());

    }
    我自己调试时总是在SetForegroudWindow()函数处出错。
    请各位帮忙看看