2

MFC 機能パックのこのバグを回避しようとしています:ウィザードで構築された MFC アプリが最大化されている場合、Windows 7 タスクバーは自動的に非表示になりません

問題:

アプリが最大化され、ユーザーがタスク バーに自動非表示を設定している場合、ウィンドウは "非表示" のタスク バーを覆います (まだ表示されているはずですが、高さは 1 ピクセルのみです)。非表示のタスク バーがこのように覆われている場合、ユーザーはマウスを画面の下部に移動しても非表示に戻すことができません。

タスクバーにアクセスするには、Windows キーまたは Alt-Tab を押す必要があります。

私が試したこと:

  • ウィンドウ フォーカスでウィンドウが最大化されているかどうかをテストし、タスクバーで ShowWindow/BringWindowToFront を呼び出します。これにより、タスクバーが表示されますが、マウスをその上に移動したかのように自動的に開きます。タスクバーを「非表示」状態 (高さ 1 ピクセル) で表示したいだけです。
  • 画面の下部に 1 行のピクセルを残すようにウィンドウのサイズを変更する - これは最大化されたウィンドウでは機能しません。

どうもありがとう。

4

2 に答える 2

2

キャプションのないすべてのウィンドウをタスクバー上でフルスクリーンで実行する Windows 7 の厄介な機能 ... Windows 7 は実際に TOPMOST フラグをリセットすることでこれを実現します。そのため、元に戻す必要があります。これが、タスクバーのプロパティに [常に手前に表示] チェックボックスがなくなった理由でもあります。

void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
  // TODO: Add your message handler code here and/or call default
  CWnd::OnSysCommand(nID, lParam);

  // Windows7 bug fix
  if (nID == SC_MAXIMIZE)
  {
    HWND hTaskbar = ::FindWindowW(L"Shell_TrayWnd", NULL);
    ::SetWindowPos(hTaskbar, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );
  }
}
于 2014-01-07T01:22:40.920 に答える
1
  1. 処理をすれば、最大化されたウィンドウのサイズ変更が機能する可能性がありますWM_GETMINMAXINFO。パッチptMaxSize/ ptMaxPosition「DefWindowProc」の後に。
  2. 試しましたSetWindowPos (hTaskbar, *YourHwnd*, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE)か?
于 2012-07-30T18:57:00.350 に答える