VC++6.0でXPビジュアルスタイルを使うには(2006/02/07)
Category: プログラミング
Posted by: WIND-MASTER
マニフェスト
XPのビジュアルスタイルを使うには、勿論WindowsXP以降のOSが必要になります。WindowsXPにはComCtl32.dllのバージョン5と6が両方入っていて、通常の手順でVC++6.0でアプリケーションを作成するとバージョン5が使用されます。つまりComCtrl32.dllのバージョン6を使うようにしてやればいいのですが、これにはマニフェストを使用します。
マニフェストはファイルの拡張子が.manifestのファイルです。このファイルをEXEファイルと同じ場所に置いてあげれば、アプリケーションの起動時に読み込まれてXPビジュアルスタイルになります。
では実際にやってみましょう。まずマニフェストのファイルの中身ですが、以下をコピーして赤で書かれた部分を作成するアプリケーションに合わせて書き換えてください。そしてファイル名を○○○.exe.manifestとして保存します。○○○はEXEファイルのファイル名と同じにする必要があります。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="CompanyName.ProductName.YourApp"
type="win32"
/>
<description>アプリケーションの説明</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
あとは作成したマニフェストをEXEファイルと同じ場所置いて、アプリケーションを実行すればXPビジュアルスタイルになっているはずです。
マニフェストをリソースに組み込む
さて、上記のやり方で確かにXPビジュアルスタイルが適用になったと思いますが、わざわざファイルを置くというのも格好悪い気がします。そこで、マニフェストをリソースに組み込んでしまうことにします。
とりあえず普通にVC++6.0でプロジェクトを作成すると、resというフォルダが作成されてリソースファイルが置かれます。そこに○○○.rc2という独自にリソースを編集するためのファイルがあるので、これを編集してマニフェストをリソースに組み込みます。
編集内容は以下の3行を○○○.rc2の最後に追加するだけです。このとき○○○.exe.manifestはresフォルダにコピーしておきます。
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 #define RT_MANIFEST 24 CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\○○○.exe.manifest"
これでビルドすればXPビジュアルスタイルが適用されます。
ソースの修正
気づいた方も居ると思いますが、ツールバーのグリップ部分がちゃんと描画されていないはずです。これを改善するには、ソースをほんの少し修正する必要があります。修正箇所は以下の2点です。(説明はMFCを使うプロジェクトを作成した場合のものです)
1. アプリケーションクラスのInitInstanceでInitCommonControls()を呼び出す
2. CMainFrame::OnCreate()のツールバーを作成している部分を修正
以下の部分を
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE
| CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS
| CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // 作成に失敗
}
以下のように修正
if (!m_wndToolBar.CreateEx(this, 0, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // 作成に失敗
}
m_wndToolBar.ModifyStyle( 0, TBSTYLE_FLAT );
以上で全ての作業は終了です。
前後3件の記事
Visual Studio 2005
(2006/03/16)
メモリリークの検出
(2006/02/27)
VC++6.0でWTLを使った時にClassViewがバグる
(2006/02/13)
VC++6.0でXPビジュアルスタイルを使うには(2006/02/07)
SPM Ver.0.61
(2006/02/03)
スレッドとハンドルのクローズ
(2006/01/30)
「窓の手」でアイコンの色が変になったら
(2006/01/17)
コメントを追加
このアイテムは閉鎖されました。このアイテムへのコメントの追加、投票はできません。
