search cancel

CA Gen : Microsoft.Windows.Common-Controls (ComCtl32.dll) バージョン 6 を使った Gen GUI ランタイム

book

Article ID: 134305

calendar_today

Updated On:

Products

Gen

Issue/Introduction

Microsoft.Windows.Common-Controls (ComCtl32.dll) バージョン 6 を使った Gen GUI ランタイム

Environment

Release:

CA Gen Run Time, GUI: r7.6

Resolution

 

AllFusion Gen r7.6 から Gen r8 で生成した GUI アプリケーションは Microsoft.Windows.Common-Controls (以下ComCtl32.dllと記載) バージョン 6 を使用しています。それ以前のバージョンの Gen では、ComCtl32.dll バージョン 5もしくはそれ以前のバージョンを使用していました。

コモンコントロール バージョン 6 では、生成した GUI アプリケーションのクライアント領域にデスクトップで選択した visual style (外観、画面設定) を利用できるようになっています。そのため、Windows コントロール パネルのデスクトップの画面のプロパティを[デザイン] タブで変更すると、ウィンドウ上のコントロールのvisual style (外観、画面設定) も変更されます。

Gen r7.6 のリリース サマリには、コモン コントロール バージョン 6 を新たに採用していること、アプリケーションの外観を保つために必要な変更を記述しています。

- ステータスバー付きのウィンドウは、中のフィールドの線が正しく引かれるように高さを増やす必要があります。

- ウィンドウの背景色を設定していて(デフォルト設定以外)、Windowsのテーマや配色を変更している場合は、コントロールがデスクトップの設定を引き継いでウィンドウの背景色がデスクトップと同じになり、見えにくくなる場合があります。

- Sheridan DateCombo OCX コントロールなどいくつかのコントロールでは、ComCtl32.dll バージョン 6 を使用した場合の問題が見つかっています。

そのような場合には ComCtl32.dll バージョン 5. を使用するようアプリケーション マニフェスト ファイルを変更してください。

ComCtl32.dll バージョン 6 を使用することによる問題がいくつか報告されています。ここでは障害内容とその回避策、解決方法をご紹介いたします。

1. ドロップダウンを選択すると、すべてのコンテンツ(行)が表示されます。ComCtl32.dll バージョン 5 では、指定した高さの範囲でドロップダウン メニューが表示されていましたが、バージョン 6 では、設定した高さにデータが収まらない場合は、データ数に合わせてドロップダウン メニューの高さが調整されます。(下部のスペースはありません。)

解決策  : アプリケーションのリソース管理ファイルにドロップダウン用の CBS_NOINTEGRALHEIGHT パラメータを追加する Generator ptf GEN76013 が

                 2007年9月にリリースされています。これにより、リストボックスを希望通りの高さで表示することができます。

 

注          : ComboBox の高さに分けた後で個々のアイテムの高さを四捨五入するため、ドロップダウンの下部に余白ができる場合があります(その高さによります)。

                これは、CBS_NOINTEGRALHEIGHT プロパティの性質であり、仕様通りの動きです。

2. 実行中、ウィンドウ上のコントロールをタブで移動すると、チェックボックスで入力フォーカス インジケータ(オブジェクトの周囲に点線で表示される長方形)が見えない場合があります。マシンによって、プッシュボタンやラジオボタンでは、入力フォーカス インジケータが表示されているのに、チェックボックスには表示されないことがあります。他のマシンでは、コマンドプロンプトからテストをすると全フィールドに表示されるのに、ビルドツールからテストを行うと一切表示されない場合もあります。

 

解決策   : Windows 画面の「下線を表示しない」機能のチェックを外していると、入力フォーカス インジケータが表示されることがわかっています。

                a. 画面のプロパティを開きます。

                b. [デザイン]を選択し、[効果(E)...] ボタンをクリックします。

                c. [Alt キーを押さないときはキーボード ナビゲーションの下線を表示しない(H)] のチェックを外します。

                このチェックボックスについて、Windows のヘルプには、「キーボードの Alt キー、Tab キー、方向キーなどを使って Windows の操作を始めるまで、

                アクセスキー(メニューやコントロールの下線付きの文字)と入力フォーカスインジケータ(オブジェクトの周囲に点線で表示される長方形)を非表 示にするかどうかを指定します。」と説明されています。 

3. 編集フィールドでシステム フォント(Gen のデフォルト フォント)が使用されている場合、Microsoft Word 2003 からフィールドへのダブル クォートのコピー/貼り付けがうまくいかず、文字化けします。ノートパッドやワードパッドからのコピーの場合は問題ありません。Unicode でサポートされていないフォントで同様の問題が発生する可能性があります。

回避策   :Unicode 文字をサポートしている別のフォントを使用するようフィールドの設定を変更します。

 

4. システム フォント(Gen のデフォルト フォント)が使用されている場合、パスワード フィールドの表示が変わります。

回避策    :Unicode 文字をサポートしている別のフォントを使用するようパスワード フィールドの設定を変更します。

 

5. DBCS 入力フィールドにダブルバイト文字を入力すると、文字化けします。

  上記回避策が実施できない場合は、ComCtl32.dll バージョン 5.8 に戻していただいてもかまいません。単一ロード モジュール(.exe) あるいは全アプリケーションで戻すことができます。バージョン 5.8 をお使いいただく場合は、リリース サマリに記載している バージョン 6 の機能はご利用いただけません。

Gen アプリケーションが ComCtl32.dll バージョン 5.8 を使用するよう変更する

デフォルトでは、Gen アプリケーションは組込みマニフェストでビルドされます。使用されるマニフェストファイルは ..\Gen\version\ ディレクトリにあるgeneric.manifest ファイルです。このファイルには、ComCtl32.dll バージョン 6.0.0.0 を使用するためのside-by-sideアセンブリ情報が含まれています。

    a. generic.maniest ファイルから バージョン 6 を使用するためのアセンブリ情報を削除すると、全てのアプリケーションが変更を認識し、バージョン 5を使用するようになります。あるいは、ロード モジュール毎に外部のマニフェストファイルを作成し、特定の実行ファイルのみが バージョン 5 を使用するように編集することもできます。

単一ロード モジュール(.exe) 用の外部マニフェストを更新する

    1. 1. Gen ビルド ツールで、[ツール] -> [プロファイル マネージャ] -> [C] を選択します。

    2. OPT.APPMANIFEST キーを EMBEDDED から EXTERNAL に変更します。

    3. アプリケーションをリビルドし、<application>.exe.manifest ファイルが作成されていることを確認します。

    4. <application>.exe.manifest ファイルから以下のコードを削除します。

          <dependency>

               <dependentAssembly>

                   <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls'

         version='6.0.0.0' processorArchitecture='x86'

         publicKeyToken='6595b64144ccf1df' language='*' />

                  </dependentAssembly>

         </dependency>

    5. コードの再ビルドは行わず、アプリケーションを実行します。

全アプリケーションで使用するデフォルト マニフェストを更新する

    1. Gen のversion ディレクトリ(..\Gen\version) にある generic.manifest ファイルを開きます。

    2. ..\Gen\version\generic.manifest ファイルから以下のコードを削除します。

        <dependency>

            <dependentAssembly>

                 <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls'

       version ='6.0.0.0' processorArchitecture='x86'

       publicKeyToken='6595b64144ccf1df' language='*' />

          </dependentAssembly>

      </dependency>

    3. EMBEDDED / EXTERNAL どちらのマニフェストが選択されているかに関わらず、アプリケーションビルド時に、<application>.exe.manifest に変更が反映されます。

    

免責事項:ComCtl32.dll バージョン 5.8 を使用することによる問題は想定しておりませんが、Gen 7.6 および Gen r8 は バージョン 5.8 での認証は行っておりません。"

ご質問等がございましたら、恐れ入りますが弊社サポートまでご連絡ください。

Additional Information

Old Japanese Knowledge document ID : JTEC001779 

CA Genのその他のFAQについては、以下のリンクからご確認ください。

CA Gen FAQ一覧表