我想把我程序隐藏到托盘去,请问大虾,我的程序执行了ShowWindow(SW_HIDE),但并没有在任务栏上消失,只是隐藏到任务栏而并非托盘,代码如下:
void COnTimerOutDlg::HideTheWindows()
{
pnid.cbSize = sizeof(NOTIFYICONDATA);
pnid.hIcon = LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON1));
pnid.hWnd = m_hWnd;
sprintf(pnid.szTip, "隐藏程序\n");
pnid.uCallbackMessage = WM_SYSTRAY;
pnid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
pnid.uID = 100;
this->ShowWindow(SW_HIDE);
Shell_NotifyIcon(NIM_ADD, &pnid);
}LRESULT COnTimerOutDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
// TODO: Add your specialized code here and/or call the base class
if (message == WM_SYSCOMMAND)
if (wParam ==SC_MINIMIZE)
{
HideTheWindows();
} return CDialog::DefWindowProc(message, wParam, lParam);
}

解决方案 »

  1.   

    LRESULT res;
    if(message == WM_SYSCOMMAND)
    {
    if(wParam == SC_MINIMIZE)
    {
    res = CDialog::DefWindowProc(message,wParam,lParam);
    HideWindows();
    return res;
    }

    }
    return CDialog::DefWindowProc(message, wParam, lParam);
      

  2.   

    原因是:
    return CDialog::DefWindowProc(message, wParam, lParam);操作会使对话框最小化,而这样的系统行为是在任务栏上有窗口横条(表达不好,)。你先最小化,再隐藏就行了。
      

  3.   

    HideWindows()就是你的HideTheWindows()函数。
      

  4.   

    是不是因为你用的是模态对话框的原因
    ShowWindow(SW_HIDE)对模态对话框不起作用