0

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

このコードを使用しましたが、タスクバーが非表示になります。しかし、タスクバーの上にアプリケーションを表示したいです。

4

2 に答える 2

2

あなたはタスクバーを所有していないので、非表示にする必要はありません。ちなみに、自動的に最小化するオプションがあります。タスクバーなしでセカンダリ モニターを使用する別のオプションがあります。

アプリに作業領域が与えられているプラ​​イマリ モニターでは、場所を特定できます (上記のコード スニペットから判断)。ウィンドウがタスク バーの上にあろうとなかろうと、タスク バーの邪魔にならないように、この領域内にウィンドウを配置することをお勧めします。

タスク バーを使用して "誰がトップか" を競うようにしたい場合は、SetWindowPosAPI とウィンドウの Z オーダーを検討してください。

于 2012-10-17T10:20:29.910 に答える
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);
于 2012-10-18T10:13:09.620 に答える