我用如下方法隐藏:
LRESULT CBlueComChatDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
// TODO: Add your specialized code here and/or call the base class
if(message==133 )   
ShowWindow(SW_HIDE); 

return CDialog::DefWindowProc(message, wParam, lParam);
}
我把对话框做成托盘了,想点击托盘菜单,再弹出对话框,但就是不可以LRESULT CBlueComChatDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
.... case IDM_ANIMATE:
ShowWindow(SW_SHOW);
break;
...
}

解决方案 »

  1.   

    一会儿发给你一个例子。E-MAIL?
      

  2.   

    没必要把,我只想把他重新SHOW出来
      

  3.   

    This is my menu's ID
      

  4.   

    This is my menu's ID
      

  5.   

    问题可能在这里:
                if(message==133 ) //133 == WM_NCPAINT?  
    ShowWindow(SW_HIDE);执行ShowWindow(SW_SHOW)->处理WM_NCPAINT->ShowWindow(SW_HIDE)。
      

  6.   

    能不能这样呢:
    BOOL CBlueComChatDlg::OnInitDialog()
    {
        .
        .
        ShowWindow(SW_HIDE);
        .
        .
    }
      

  7.   

           
    switch(message)
    {
     case MYWM_NOTIFYICON:       
    //如果是用户定义的消息
     {
     if(lParam==WM_LBUTTONDBLCLK)
     {   //鼠标双击时主窗口出现
    AfxGetApp()->m_pMainWnd->
    ShowWindow(SW_SHOWMAXIMIZED);
       ::Shell_NotifyIcon(NIM_DELETE ,&m_tnid);
    }
        else   
    if(lParam==WM_RBUTTONDOWN)

    //鼠标右键单击弹出菜单
           CMenu menu;    
    //载入事先定义的菜单
                   if (!menu.LoadMenu(IDR_MENU2))//你必须确定资源中有ID为IDR_POPUP的菜单
       {
        MessageBox("菜单装载错误","错误",MB_ICONEXCLAMATION|MB_OK);
                 return 0;
       }           CMenu* pMenu=menu.GetSubMenu(0);
            CPoint pos;
            GetCursorPos(&pos);               // SetForegroundWindow(); 
                   pMenu->TrackPopupMenu(TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd());
    }
         break;
     }
    case WM_SYSCOMMAND:     
    //如果是系统消息
    if(wParam==SC_MINIMIZE)

    //接收到最小化消息时主窗口隐藏
          AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
       ::Shell_NotifyIcon(NIM_ADD  ,&m_tnid);
          return 0;
    }
    break;
    } return CFrameWnd::WindowProc(message, wParam, lParam);
      

  8.   

    再加一句BringWindowToTop试试看。
      

  9.   

    参考我以前的作AutoShutDown2.1
    里面实现的功能跟你的要求一样http://www.csdn.net/cnshare/soft/12/12414.shtm
      

  10.   

    建议你在OnInitDialog()设一个定时器
              {
                    ....
                    settimer(0,100,NULL);
               }
    在OnTimer()中隐藏窗口
    {
             NOTIFYICONDATA nid;
    nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
    nid.hWnd=this->m_hWnd;
    nid.uID=IDR_TRAYICON; //icon ID
    nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
    nid.uCallbackMessage=WM_SYSTEMTRAY;//自定义的消息名称
    nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_TRAYICON));
    strcpy(nid.szTip," 侦听中...");//信息提示条为“计划任务提醒”
    Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标
    ShowWindow(SW_HIDE);//隐藏主窗口
    }
    //define WM_SYSTEMTRAY WM_USER+100(加在XXXdlg.h文件开头)
    建立消息响应函数OnShowTask
    afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam);(加在XXXdlg.h文件)
    ON_MESSAGE(WM_SYSTEMTRAY,OnShowTask)(加在XXXdlg.cpp文件)
    LRESULT CSocketDlg::OnShowTask(WPARAM wParam,LPARAM lParam)
    //wParam接收的是图标的ID,而lParam接收的是鼠标的行为
    {
    if(wParam!=IDR_TRAYICON)
    return 1;
    switch(lParam)
    {
    ..................................
                      ...................................
    case WM_LBUTTONDBLCLK: //双击左键的处理
    {
    this->ShowWindow(SW_SHOW); //简单的显示主窗口完事儿
    }
    break;
    }
    return 0;
    }