windowswinapivisual-c++mfctaskbar

windows application showing behind the taskbar on vista


I have an MFC application. In my application if I run on Windows XP it's working fine. But if I run in Windows Vista the MFC dialog hides behind the taskbar.

bool bHide=true;
CRect rectWorkArea = CRect(0,0,0,0);
CRect rectTaskBar = CRect(0,0,0,0); 

CWnd* pWnd = CWnd::FindWindow("Shell_TrayWnd", ""); 
pWnd->ShowWindow(SW_SHOW);
if( bHide ) 
{  // Code to Hide the System Task Bar  
    SystemParametersInfo(SPI_GETWORKAREA,0,(LPVOID)&rectWorkArea,0);   
    if( pWnd ) 
    {   
        pWnd->GetWindowRect(rectTaskBar);   
    //    rectWorkArea.bottom -= rectTaskBar.Height();  
        rectWorkArea.bottom += rectTaskBar.Height();//-----to hide taskbar
        SystemParametersInfo(SPI_SETWORKAREA,0,(LPVOID)&rectWorkArea,0);    
    //    pWnd->ShowWindow(SW_SHOW);  
        pWnd->ShowWindow(SW_HIDE); //--to hide taskbar
    }
}

I used this code but it hides the taskbar. But I want to show the application above the task bar.


Solution

  • Finally i found the solution , what we want to do is we should add the below code in our oninitdialog,

    SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
    

    The above line is enough to show the mfc dialog on above the taskbar . but sometimes the focus of the dialog get changed looks hanged(no response in dialog) the application.if it occurs put the below code.

    SetWindowPos(&this->wndBottom,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);