none
Windows 10 Insider Preview (10130) で、CFrameWnd::ShowWindow(SW_HIDE)したものが、タスクビューに出てしまう RRS feed

  • 質問

  • Windows 10 Pro Insider Preview Build 10130でテストしています。

    2つのフレームウィンドウ(画面モード)を持ち、それらを排他的に切り替えるようなアプリケーションで問題が出ています。
    「タブレット モード」で起動した場合、一度メインウィンドウを切り替えると、両方のウィンドウがタスクビューに出てしまいます。

    本来、片方の画面モードだけをユーザーには見せたいので、これは望ましくありません。

    簡単なプログラムでも再現します。

     CMainFrame* m_pMainFrame;
     CFrameWnd* m_pSubFrame;

    のようにm_pMainFrame以外にもう1つCFrameWndクラスを作ります。

    例えば、InitInstanceで、

     CSingleDocTemplate* pSubDocTemplate;
     pSubDocTemplate = new CSingleDocTemplate(IDR_SUBFRAME,
      RUNTIME_CLASS(CFrameTestDoc),
      RUNTIME_CLASS(CFrameWnd), 
      RUNTIME_CLASS(CFrameTestView));
     if (!pDocTemplate)
      return FALSE;
     AddDocTemplate(pSubDocTemplate);
     m_pSubFrame = new CFrameWnd;
     if (!m_pSubFrame || !m_pSubFrame->LoadFrame(IDR_SUBFRAME))
     {
      delete m_pSubFrame;
      return FALSE;
     }
     m_pSubFrame->ShowWindow(SW_HIDE);

    のようにインスタンスを生成しておき、メニューハンドラーで

     m_pMainWnd = m_pSubFrame;
     m_pMainFrame->ShowWindow(SW_HIDE);
     m_pMainWnd->ShowWindow(SW_SHOW);
     m_pMainWnd->UpdateWindow();

    元に戻すとき、

     m_pMainWnd = m_pMainFrame;
     m_pSubFrame->ShowWindow(SW_HIDE);
     m_pMainWnd->ShowWindow(SW_SHOW);
     m_pMainWnd->UpdateWindow();

    のように切り替えます。

    (m_pMainFrameの生成はスケルトン通りなので省略します)

    「タブレット モード」でないときは、普通に2つのフレームを切り替えて表示でき、タスクビューにも一方しか表示されませんが、「タブレット モード」にしていると、一度メインウィンドウを切り替えるとなぜか両方のウィンドウがタスクビューに出てしまいます。

    フレームウィンドウのShowWindow(SW_HIDE)は、「タブレット モード」では機能しないのでしょうか?

    それか、タスクビューに表示させない方法が、何か他にあるのでしょうか?

    開発環境は、VS2012です。

    2015年6月22日 23:17