Windows では、Windows の非クライアント領域が自動的にテーマの色 (Windows Aero) になっていることに気付きました。これは素晴らしいアイデアだと思います。なぜなら、プログラム間で一貫したテーマになり、全体的により良いインターフェースになるからです。よこしまな個人として、私はここで Microsoft の意図を覆し、オペレーティング システムの設定ではなく、私のプログラムによって設定された色を使用する GUI を実現したいと考えています。
考え?
Windows では、Windows の非クライアント領域が自動的にテーマの色 (Windows Aero) になっていることに気付きました。これは素晴らしいアイデアだと思います。なぜなら、プログラム間で一貫したテーマになり、全体的により良いインターフェースになるからです。よこしまな個人として、私はここで Microsoft の意図を覆し、オペレーティング システムの設定ではなく、私のプログラムによって設定された色を使用する GUI を実現したいと考えています。
考え?
はい、可能ですが、文書化されていない機能を使用する必要があります。つまり、将来のバージョンのWindowsで、またはサービスパックやその他の更新プログラムがリリースされたとしても、プログラムが実行されない可能性があります。
リスクを冒すことをいとわない場合は、このブログ投稿に詳細が記載されており、関数とその使用方法がリバースエンジニアリングされています。達成できることのスクリーンショットが含まれています。
基本的に、必要な関数は2つあります。DwmGetColorizationParameters
とDwmSetColorizationParameters
。それらに渡す構造とメソッドのプロトタイプは次のとおりです(Delphiの場合ですが、C ++を使用している場合は、C ++に変換できると確信しています)。
tagCOLORIZATIONPARAMS = record
clrColor : COLORREF; //ColorizationColor
clrAftGlow : COLORREF; //ColorizationAfterglow
nIntensity : UINT; //ColorizationColorBalance -> 0-100
clrAftGlowBal : UINT; //ColorizationAfterglowBalance
clrBlurBal : UINT; //ColorizationBlurBalance
clrGlassReflInt : UINT; //ColorizationGlassReflectionIntensity
fOpaque : BOOL;
end;
COLORIZATIONPARAMS=tagCOLORIZATIONPARAMS;
TColorizationParams=COLORIZATIONPARAMS;
PColorizationParams=^TColorizationParams;
TDwmGetColorizationParameters = procedure(out parameters :TColorizationParams); stdcall;
TDwmSetColorizationParameters = procedure(parameters :PColorizationParams; unknown:BOOL); stdcall;
その構文に慣れていない場合は、上の部分が構造体を定義し、下の2行がメソッドのプロトタイプです。^はポインタを意味するため、Setメソッドは構造体へのポインタを取得しています。 out
トリッキーであり、そのメソッドが構造体へのポインタも取得していることを意味します。procedure
voidを返すことを意味します。それでも読みにくい場合は、コメントを残してください。Cに翻訳します。
そこから必要なものすべてを理解できるはずですが、詳細や使用例が必要な場合は、ブログ投稿を読んでください。(これは優れた投稿であり、トラフィックに値します。)