◀ANSI版開発トップへ
  • 4482 Vista バージョン番号
    • 4489 Vista β2でのタブアイコン表示
      • 4490 RE: Vista β2でのタブアイコン表示
        • 4491 Re2: Vista β2でのタブアイコン表示
          • 4492 manifestの優先順位
  • [4482] Vista バージョン番号 ryoji 2006年06月17日 02:30

    Windows Vista β2で、COsVersionInfo::IsLuna() が
    FALSE になってしまっています。
    Windows Ver6.0 も TRUE になるように...

    Index: sakura_core/COsVersionInfo.h
    ===================================================================
    --- sakura_core/COsVersionInfo.h (revision 975)
    +++ sakura_core/COsVersionInfo.h (working copy)
    @@ -109,8 +110,8 @@
    @date 2003.09.06 genta
    */
    BOOL IsLuna(){
    - return (m_cOsVersionInfo.dwMajorVersion >= 5 &&
    - m_cOsVersionInfo.dwMinorVersion >= 1 );
    + return ( m_cOsVersionInfo.dwMajorVersion >= 6 || // Ver 6.0も含める
    + (m_cOsVersionInfo.dwMajorVersion >= 5 && m_cOsVersionInfo.dwMinorVersion >= 1) );
    }

    /*! Windows 2000以上か調べる

    ■別件
    Vistaではタブのアイコンが表示されなかった orz
    (落ちたりはしないので、操作に問題はないけど)
    やりかたを変えないとだめなのかしら?
    • [4489] Vista β2でのタブアイコン表示 ryoji 2006年06月20日 22:09

      > Vistaではタブのアイコンが表示されなかった orz

      ImageList_Duplicate() が NULL を返していました。
      以下の修正で表示されるようになります。

      Index: sakura_core/CTabWnd.cpp
      ===================================================================
      --- sakura_core/CTabWnd.cpp (revision 977)
      +++ sakura_core/CTabWnd.cpp (working copy)
      @@ -1591,13 +1591,18 @@
      HIMAGELIST CTabWnd::ImageList_Duplicate( HIMAGELIST himl )
      {
      // 本物の ImageList_Duplicate() があればそれを呼び出す
      + HIMAGELIST hImlNew;
      if( m_RealImageList_Duplicate )
      - return m_RealImageList_Duplicate( himl );
      + {
      + hImlNew = m_RealImageList_Duplicate( himl );
      + if( NULL != hImlNew )
      + return hImlNew;
      + m_RealImageList_Duplicate = NULL; // 2006.06.20 ryoji 失敗時は代替処理に切り替え
      + }

      // 本物の ImageList_Duplicate() の代替処理
      // 新しいイメージリストを作成してアイコン単位でコピーする
      //(この場合、多色アイコンは綺麗には表示されないかもしれない)
      - HIMAGELIST hImlNew;
      hImlNew = ImageList_Create( CX_SMICON, CY_SMICON, ILC_COLOR32 | ILC_MASK, 4, 4 );
      if( hImlNew )
      {

      NULL を返すようなら ImageList_Duplicate() が存在しないのと同じ扱いにしてます。
      正式版 Vista では従来通りでも動くようになるかと思われますが、
      エラー処理としても妥当な気がするので修正しておくのがいいかもしれません。
      • [4490] RE: Vista β2でのタブアイコン表示 げんた 2006年06月21日 07:39

        >> Vistaではタブのアイコンが表示されなかった orz
        VISTA対応のこの2件,他に影響は出なさそうなので忘れないうちにcommitnしておいてください.
        • [4491] Re2: Vista β2でのタブアイコン表示 ryoji 2006年06月21日 23:11

          ▼ げんたさん
          > >> Vistaではタブのアイコンが表示されなかった orz
          > VISTA対応のこの2件,他に影響は出なさそうなので忘れないうちにcommitnしておいてください.

          Vista 対応の上記 2 件と、やはり Vista 絡みの 1 件を commit しました。
          追加の 1 件(trunk#980)は次の通りです。

          ・VC2005 用に /manifestdependency リンカオプションを追加

          Vista では外部マニフェスト(.exe.manifest)よりも埋め込みマニフェストが優先されるようです。
          trunk#980 よりも前のソースを VC2005 で .dsw 変換してそのままビルドした sakura.exe には空のマニフェストが埋め込まれるため、Vista 上ではビジュアルスタイル適用のための sakura.exe.manifest は無効果です。
          プロジェクトのプロパティで埋め込みマニフェストを作成しないように設定変更すれば大丈夫ですが、その場合は空の sakura.exe.manifest が作成されて紛らわしいです。
          なので、ビジュアルスタイル適用のためのマニフェストが自動生成されるようにしました。

          ■VC2005 ユーザー用の説明
          trunk#980 以後のソースを VC2005 で .dsw 変換してそのままビルドした sakura.exe にはビジュアルスタイル適用のためのマニフェストが自動的に埋め込まれます。
          従って、Windows XP 以降の環境では sakura.exe.manifest 無しでもビジュアルスタイルが適用されます。
          正式リリース版と同様にマニフェスト埋め込みの無い sakura.exe を作成したいときは、プロジェクトのプロパティページ画面で [マニフェストツール]-[入力と出力] を選択し、[埋め込みマニフェスト]を「いいえ」に変更してリビルドしてください。
          そうすると、sakura.exe からマニフェストが分離され、別にビジュアルスタイル適用のための sakura.exe.manifest が作成されるようになります。
          • [4492] manifestの優先順位 ryoji 2006年06月22日 21:42

            補足です。

            > Vista では外部マニフェスト(.exe.manifest)よりも埋め込みマニフェストが優先されるようです。

            実際に Vista β2 ではそうなっているわけですが、
            MSDNライブラリ「C/C++ 分離アプリケーションおよび side-by-side アセンブリのトラブルシューティング」の項に Windows Server 2003 以降は XP とは優先順位が変わるとの記述もあります。