我有一个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
}
}
我使用了这段代码,但它隐藏了任务栏。但我想在任务栏上方显示应用程序。
答案 0 :(得分:2)
您不拥有任务栏,因此您不应该隐藏它。您可以选择自动将其最小化。您可以选择使用没有任务栏的辅助监视器。
在主监视器上,您的应用程序被赋予工作区域,您可以找到(从上面提供的代码段判断)。最好将窗口放在此区域内,而不会干扰任务栏,无论是高于还是超出任务栏。
如果您仍然希望通过任务栏让它更像“竞争对手”,那么您可能需要查看SetWindowPos
API和Z-Order窗口。
答案 1 :(得分: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);