3

Windows では、Windows の非クライアント領域が自動的にテーマの色 (Windows Aero) になっていることに気付きました。これは素晴らしいアイデアだと思います。なぜなら、プログラム間で一貫したテーマになり、全体的により良いインターフェースになるからです。よこしまな個人として、私はここで Microsoft の意図を覆し、オペレーティング システムの設定ではなく、私のプログラムによって設定された色を使用する GUI を実現したいと考えています。

考え?

4

1 に答える 1

6

はい、可能ですが、文書化されていない機能を使用する必要があります。つまり、将来のバージョンのWindowsで、またはサービスパックやその他の更新プログラムがリリースされたとしても、プログラムが実行されない可能性があります。

リスクを冒すことをいとわない場合は、このブログ投稿に詳細が記載されており、関数とその使用方法がリバースエンジニアリングされています。達成できることのスクリーンショットが含まれています。 DelphiDWMAeroガラスの色の変更のスクリーンショット

基本的に、必要な関数は2つあります。DwmGetColorizationParametersDwmSetColorizationParameters。それらに渡す構造とメソッドのプロトタイプは次のとおりです(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トリッキーであり、そのメソッドが構造体へのポインタも取得していることを意味します。procedurevoidを返すことを意味します。それでも読みにくい場合は、コメントを残してください。Cに翻訳します。

そこから必要なものすべてを理解できるはずですが、詳細や使用例が必要な場合は、ブログ投稿を読んでください。(これは優れた投稿であり、トラフィックに値します。)

于 2012-10-16T08:13:36.473 に答える