Windows 应用程序显示在 Vista 上的任务栏后面

问题描述 投票:0回答:2

我有一个 MFC 应用程序。在我的应用程序中,如果我在 Windows XP 上运行,它工作正常。但如果我在 Windows Vista 中运行,MFC 对话框就会隐藏在任务栏后面。

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
    }
}

我使用了这段代码,但它隐藏了任务栏。但我想在任务栏上方显示应用程序。

windows winapi visual-c++ mfc taskbar
2个回答
2
投票

您不拥有任务栏,因此您不应该隐藏它。顺便说一下,您可以选择自动最小化它。您还有另一种选择,即使用没有任务栏的辅助显示器。

在主显示器上,您的应用程序被指定为工作区域,您可以找到(从上面提供的代码片段来看)。最好将窗口放置在该区域内,而不会干扰任务栏,无论任务栏位于上方还是上方。

如果您仍然想让它更像是与任务栏进行的“谁在上面”的竞赛,您可能需要看看

SetWindowPos
API 和窗口 Z 顺序。


1
投票

终于找到了解决方案,我们要做的是在 oninitdialog 中添加以下代码,

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

上面的行足以在任务栏上方显示 mfc 对话框。但有时对话框的焦点发生变化看起来应用程序挂起(对话框中没有响应)。如果发生这种情况,请输入以下代码。

SetWindowPos(&this->wndBottom,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
© www.soinside.com 2019 - 2024. All rights reserved.