Windows XP以降でアプリケーションにThemeを反映させるには(2)
Windows XP以降でアプリケーションにThemeを反映させるには、3通りの方法があります。
(1) manifestファイルを作成し、exeと同一フォルダに配置する。
(2) manifestファイルを作成し、リソースに追加する。
(3) APIによりThemeを反映させる。
上記の中で(1)が一番カンタンですが、(2)が一番安全です。
Windows Vistaで権限上昇manifestを適用した場合、(1)の方法ではThemeが反映されなくなるためです。詳細についてはWindows Vistaの「管理者権限でアプリケーションを動作させるためには - 注意点」を参照してください。
ただし、権限上昇manifestを適用しないのであれば、(1)で問題ありません。
(2)の方法ですが、"exeファイル名と同じファイル名 + manifest"というファイル名で manifest ファイルを作成し、リソースに追加します。
リソースに追加する場合、rcファイルには、下記のように記載する必要があります(XXXXはexeファイル名です)。
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "xxxx.exe.manifest"
環境によっては、CREATEPROCESS_MANIFEST_RESOURCE_IDやRT_MANIFESTは定義されていません。
その場合は、下記のように記載してください。
1 24 "xxxx.exe.manifest"
以下、サンプルになります。
※ manifest ファイルの中身は、UTF-8で保存してください(UTF-8以外でも動きますが、推奨されています)。
■■■ themexp プロジェクト
■ main.cpp
#include <windows.h>
#include <tchar.h>
#include "resource.h"
BOOL CALLBACK DialogFunc ( HWND hWnd,
UINT nMessage,
WPARAM wParam,
LPARAM lParam )
{
switch ( nMessage ) {
case WM_COMMAND:
switch ( LOWORD ( wParam ) ) {
case IDCANCEL:
EndDialog ( hWnd, 0 );
return TRUE;
}
break;
}
return FALSE;
}
// エントリポイント
int WINAPI _tWinMain ( HINSTANCE hThisInstance,
HINSTANCE,
_TCHAR *,
int )
{
DialogBox ( hThisInstance, MAKEINTRESOURCE ( IDD_MAIN_DIALOG ), NULL, DialogFunc );
return 0;
}
|
■ themexp.exe.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<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> |
■ resource.h
#define IDD_MAIN_DIALOG 101
#define IDC_SPIN1 1000
#define IDC_SLIDER1 1001
#define IDC_EDIT1 1002
#define IDC_SCROLLBAR1 1003
#define IDC_COMBO1 1004
|
■ resrc.rc
#include <winres.h>
#include "resource.h"
1 24 "themexp.exe.manifest"
IDD_MAIN_DIALOG DIALOG DISCARDABLE 0, 0, 187, 89
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Theme xp"
FONT 9, "MS Pゴシック"
BEGIN
PUSHBUTTON "キャンセル",IDCANCEL,130,24,50,14
CONTROL "Spin1",IDC_SPIN1,"msctls_updown32",UDS_ARROWKEYS,14,10,
10,14
CONTROL "Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_BOTH |
TBS_NOTICKS | WS_TABSTOP,14,45,100,15
EDITTEXT IDC_EDIT1,114,62,40,14,ES_AUTOHSCROLL
SCROLLBAR IDC_SCROLLBAR1,64,11,40,11
COMBOBOX IDC_COMBO1,6,68,48,30,CBS_DROPDOWN | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
END
|
※ Themeが反映されるのはオーナードローしていないコントロールだけです。オーナードローしていると、Themeは反映されません。
※ APIによりThemeを反映することもできますが、普通行われていません。
|