インターネット上では、プログラミングによる XP スタイルの実装について長い間議論されてきましたが、VB プログラミングによる XP スタイルの実装に対する完璧な解決策はありません。著者はN日夜にわたる猛勉強の末、ついにその秘密を明らかにした。以下に 3 つの側面に分けて説明します。
クリックしてソースコードファイルをダウンロードします
1つ。マニフェスト ファイルを使用して XP スタイルを実現する
通常の状況では、Windows XP システムでは、VB6 で開発されたアプリケーションのウィンドウ タイトル バーのみが XP スタイルを持ち、フォーム上のボタン、テキスト ボックス、その他のコントロールは従来の Windows スタイルを表示します。図 1 に示すように:
MSDN の Visual Style の章を参照すると、Windows XP は Comctl32.dll (バージョン 6) を使用して XP スタイルでコンポーネントを読み込み、アプリケーションは XML リソース ファイルを通じてこれを行うようにシステムに通知することがわかります。 XML ファイルの内容は次のとおりです。
<?xml バージョン=1.0 エンコード=UTF-8 スタンドアロン=はい?>
<assembly xmlns=urn:schemas-microsoft-com:asm.v1ですか?manifestVersion=1.0>
<アセンブリアイデンティティ
name=XP スタイル マニフェスト
プロセッサアーキテクチャ=x86
バージョン=1.0.0.0
type=win32/>
<依存関係>
<依存アセンブリ>
<アセンブリアイデンティティ
タイプ=win32
名前=Microsoft.Windows.Common-Controls
バージョン=6.0.0.0
プロセッサアーキテクチャ=x86
publicKeyToken=6595b64144ccf1df
言語=*
/>
</依存アセンブリ>
</依存関係>
</組み立て>
最終的にコンパイルされたプログラムの名前が abc.exe で、作業ディレクトリが d:/vbxp であると仮定します。上記の XML コンテンツをコピーし、テキスト ファイルとして保存します。次に、ファイルの名前を abc.exe.manifest に変更します (拡張子 .txt を削除する必要があることに注意してください)。 VB プログラムでは、すべてのフォームがロードされる前に、InitCommonControlsEx 関数を呼び出して、comctl32.dll (バージョン 6) からコンポーネント クラスを初期化する必要があります。 API 関数 InitCommonControlsEx と関連する定数およびデータ型は次のように宣言されます。
プライベート宣言関数 InitCommonControlsEx Lib comctl32.dll _
(iccex As tagInitCommonControlsEx) ブール値として
プライベートタイプ tagInitCommonControlsEx
長さの lng サイズ
lngICC の長さ
エンドタイプ
プライベート定数 ICC_USEREX_CLASSES = &H200
ここでは、初期化操作をカプセル化する関数を作成します。
ブール値としてのパブリック関数 InitCommonControlsVB()
エラー時は次へ再開
Dim iccex As tagInitCommonControlsEx
iccex付き
.lngSize = LenB(iccex)
.lngICC = ICC_USEREX_CLASSES
で終わる
InitCommonControlsEx iccex
InitCommonControlsVB = (エラー番号 = 0)
エラー時は0に移動
終了機能
初期化アクションはすべてのフォームがロードされる前に完了する必要があるため、関連するステートメントを Sub Main() に配置し、プロジェクトを Sub Main() から開始する必要があることに注意してください。コードは次のとおりです。
サブメイン()
InitCommonControlsVB
Form1.Show
エンドサブ
この時点で、コンパイルされた abc.exe は、図 2 に示すように XP スタイルになります。