我做了个基于对话框的应用程序,对话框类CMainDlg,在该对话框上点击按钮ButtonA时会弹出对话框B,此过程是CMainDlg 执行ShowWindow(SW_HIDE);对话框B执行ShowWindow(SW_SHOW);
当主对话框显示时会在任务栏显示程序名,且会显示托盘图标,但是点击ButtonA后,任务栏上就不显示程序名了,而只有对话框B显示在桌面。并且,如果此时执行左下角的“显示桌面”,那么会将所有的应用程序收到任务栏,但此时我的这个应用程序名仍然不会显示在任务栏,只能通过双击托盘图标才能把对话框B显示出来。如果对话框B隐藏了,主对话框显示出来,那么在任务栏就会显示应用程序名了。
另外一个问题,如果执行左下角的“显示桌面”,将所有的应用程序收到任务栏后,在其他应用程序恢复桌面显示以前首先通过双击托盘图标将对话框B显示出来,但此时在桌面的其他位置再点击一下桌面,这是这个对话框B仍然会隐藏掉,桌面也不显示,任务栏也不显示。
为什么会出现这种情况?但是如果有其他应用程序仍然显示在桌面,此时虽然把该应用程序缩在任务栏,再在桌面其他位置点击一下,对话框B就不会隐藏。为什么再执行一次“显示桌面”,再双击我的应用程序的托盘图标显示出对话框B后,再在桌面其他地方点击一下,就会隐藏对话框B?请高手指点

解决方案 »

  1.   

    你是想让一个子dialog在任务栏上显示吗?请参考CoCreateInstance
      

  2.   

    CoCreateInstance 和 CLSID_TaskbarList 配合可以将一个hwnd所对应的标题显示在任务栏中,或隐藏起来void
    showintaskbar( HWND hwnd, int bshow )
    {
    HRESULT hr;
    ITaskbarList* pTaskbarList; hr = CoCreateInstance( CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList, ( void** )&pTaskbarList ); pTaskbarList->HrInit( ); if( bshow )
    {
    pTaskbarList->AddTab( hwnd );
    }
    else
    {
    pTaskbarList->DeleteTab( hwnd );
    } pTaskbarList->Release();
    }
      

  3.   

    谢谢,这个函数应该在什么时候使用? 就是在主对话框ShowWindow(SW_HIDE);,子对话框ShowWindow(SW_SHOW); 时吗?我周一上班试试