問題タブ [dwm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
4044 参照

java - Aero (DWM) 効果を適切に表示するために、JFrame での背景描画を無効にします。

Java ウィンドウで Windows Vista/7 の DWM 機能を使用すると問題が発生します。フレームの背景に Aero スタイルを使用したいと考えています。DwmExtendFrameIntoClientAreaそのための Windows APIは、dwmapiライブラリ内の関数によって提供されます。私は JNA を介して適切にプロシージャを呼び出すことができました。それは本来の動作を実行します (たとえば、フレームのサイズを変更すると、次の再ペイントの前に、まだペイントされていない領域に適切なエアロ エフェクトが表示されることがわかります。添付画像をご覧ください)。

しかし、どこか (どこかわかりません) で、Aero 効果の上に背景がペイントされ、効果が失われます。

私がすでに試したこと:

  • ContentPane不透明度を設定してカスタムを使用するfalse
  • LayeredPaneとの不透明度RootPaneを falseに設定する
  • a のFrame代わりに aを使用するJFrame
  • JFrame/の背景色ContentPaneを黒/完全に透明に設定します
  • 使用setLayersOpaqueとそのカスタムバリアント、詳細については最初の回答を参照してください

これまでのところ、その背景を削除することはできませんでした。AWT/Swing の制限ですか? その背景を削除したり、Aero 効果を適切に使用したりするにはどうすればよいですか?

よろしくお願いいたします。

スクリーンショット

これは、RootPane、LayeredPane、および ContentPane の不透明度を false に設定した、コンテンツのないフレームのスクリーンショットです。リサイズしながら素早くやりました。Java がまだペイントされていない領域に効果が適切に適用されていることがわかります。

http://i55.tinypic.com/v614qo.png (新しいユーザーとして、画像を直接投稿することはできません...)

奇妙な振る舞い

さらに調査したところ、次の奇妙な動作に遭遇しました。ウィンドウ サイズが 150x150 以下の場合、コンテンツは透過的に表示されます。これは、通常のウィンドウ コンポーネントでは非常に問題があります。メソッドをオーバーライドしてフレームに直接ペイントすると、paint()すべてが半透明で描画されます。さらに、座標系が少しずれているように見えJFrameます。ウィンドウの実際のゼロ点に のゼロ点が設定されているように見えます。したがって、Swing は実際にウィンドウの境界が配置されている領域にペイントしようとしますが、もちろんそれは表示されません。

このスクリーンショットを参照してください: http://d-gfx.kognetwork.ch/java_aero_bug.png

サンプルコード

これは私が使用するコードです。

jna.jarとが必要platform.jarです。JNAのホームページから入手できます。

0 投票する
2 に答える
332 参照

c# - Registry.GetValue オーバーフローの防止

以下を使用し て DWM colorizationColorを取得しようとしています。Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\DWM").GetValue("ColorizationColor")

ただし、-2144154163を返しています(実際の値は2150813133 です)

これは、32ビットのintで値を保持できないためだと思います...ただし、int64へのイベントキャスト(または変換)は失敗します。

PD: 答えるのが簡単な質問のように聞こえるかもしれませんが、解決策が見つかりません :(

0 投票する
1 に答える
500 参照

windows - Windows 7 で DWM を使用してウィンドウを歪ませる

Windows 7 には、ウィンドウを歪める DWM 機能があります。これらの関数 (文書化されていない) を使用してウィンドウを歪める方法についての情報を探しています。

よろしくお願いいたします。

よろしく、

0 投票する
6 に答える
3945 参照

aero - Aero: ガラスに単色 (不透明) の色を描画する方法は?

GDI+ を使用してさまざまな色を描画します。

ガラス上では不透明な色が適切に表示されないことがわかります。 代替テキスト

ガラスに単色を描くにはどうすればよいですか?


また、完全に不透明な色は、その色に応じて異なる方法で処理されることにも気付くでしょう。

  • 不透明な黒: 完全に透明
  • opaque color: 部分的に透明
  • 不透明な白: 完全に不透明

代替テキスト

さまざまな色がどのように処理されるかを説明しているデスクトップ コンポジターのドキュメントを誰か教えてもらえますか?


アップデート 3

FillRectangleの動作が とは異なることにも気付くでしょうFillEllipse:

  • FillEllipse不透明な色で不透明な色を描く
  • FillRectangle不透明な色で描画すると、部分的に (または完全に) 透明になります

代替テキスト

無意味な行動の説明をお願いします。

更新 4

Alwayslearningは、合成モードを変更することを提案しました。MSDNから:

CompositingMode 列挙体

CompositingMode列挙体は、レンダリングされた色を背景色と組み合わせる方法を指定します。この列挙は、 Graphicsクラスの 'Graphics::SetCompositingMode'メソッドによって使用さGraphics::GetCompositingModeれます。

色をレンダリングするときに背景色とブレンドすることを指定します。ブレンドは、レンダリングされる色のアルファ コンポーネントによって決定されます。

色がレンダリングされるときに背景色を上書きすることを指定します。このモードは、TextRenderingHintClearTypeGridFit と一緒に使用することはできません。

の説明からCompositingModeSourceCopy、それは私が望むオプションではないように思えます。それが課す制限から、それは私が望むオプションのように思えます. そして、構成、または透明度が無効になっている場合、 SourceBlendではなくSourceCopyを実行するため、必要なオプションではありません

代替テキスト

幸いなことに、それは私の実際の問題を解決しないので、私が考えなければならない悪ではありません. オブジェクトを作成した後graphics、合成モードを変更してみました:

結果は出力に影響しません。

代替テキスト

ノート

  • Win32 ネイティブ
  • .NET ではない (ネイティブ)
  • Winforms ではない (すなわちネイティブ)
  • GDI+ (ネイティブ)

こちらもご覧ください

0 投票する
0 に答える
1726 参照

gdi+ - GDI +:FillEllipseが不透明であるのに、FillRectangleがガラス上で透明なのはなぜですか?

ガラスに長方形と楕円を描いています。

  • 楕円で描く:不透明です
  • 長方形で描く:不透明ではありません

代替テキスト

ここで何が起こっているのですか?

同じことが他の色にも当てはまることがわかります。

代替テキスト

結論:なぜですか:

  • FillEllipse不透明な色で不透明に描く
  • FillRectangle不透明な色で部分的に透明に描画します

注:この質問は、他の質問とほぼ同じです。この質問を除いて、との違いに焦点を当てていますがFillRectangleFillEllipseその質問は*ガラスに不透明な色を描く方法を扱っています。

も参照してください

0 投票する
3 に答える
560 参照

winapi - Windows Vista/7 のガラスが完全に割れた?

アプリケーションでメディア プレーヤーのガラス効果を取得しようとしていますが、あらゆる障害に直面しています。それは私ですか、それとも API ですか?

私は電話することから始めました:

背景を黒く消去します。

編集ボックスを追加するまではすべて問題ありませんでした。EditBox を使用すると、黒いテキストが表示される場所がガラスに置き換えられます。この問題は、ComboBoxEx などのより高度なコントロールを使用すると、途方もなく大きくなります。それらは混乱のように見え始めます。

このアプローチの明るい面は、アルファ ブレンドされた画像が問題なく見えることです。そして徐々にグラスに溶け込んでいきます。

編集ボックスの解決策は、LWA_COLORKEY で WS_EX_LAYERED を使用し、ガラス マスキングにひどい色を使用し、その色の背景を消去することのようです。残念ながら、これは他のものを壊します。ウィンドウに WS_EX_TRANSPARENT スタイルを設定していなくても、アイコンのアルファ ブレンディングは放射性グリーンにブレンドされた影で非常に見苦しく、ガラス自体はクリックスルー可能になります。

3 番目の提案は、GDI+ を使用した一種のカスタム構成ですが、GDI+ はソフトウェア フォールバックであり、EditBox または ComboBoxEx を構成に使用できる画像にレンダリングする方法が見つからないため、これは悪いアプローチのようです。後で。

何か不足していますか?

SO のソースも同じ問題に直面しているようです: link1 link2

0 投票する
1 に答える
13678 参照

vb.net - 境界線のない Windows フォームで Aero Glass を取得するにはどうすればよいですか?

DWM APIを使用してVB.NET 2010アプリのフォームにAero Glassを表示しようとしていますが、関数呼び出しが示唆するように、フレームの外観をクライアント領域に拡張します。フォームに境界線がない場合、何も起こらず、フォームが形成されます見えなくなります。ということで、縁なしの形でエアログラスを手に入れることはできるのでしょうか....??

0 投票する
4 に答える
1166 参照

delphi - Delphi:サブクラスを逆の順序で削除する方法は?

Mike LischkeのTThemeServicesサブクラス。これにより、テーマが変更されたときにApplication.HandleWindows(つまり)からブロードキャスト通知を受信できるようWM_THEMECHANGEDになります。

Applicationオブジェクトのウィンドウをサブクラス化します。

次に、サブクラス化されたウィンドウプロシージャは、想定どおりにWM_DESTROYメッセージを送信し、そのサブクラスを削除してから、次のメッセージを渡しWM_DESTROYます。

TThemeServicesオブジェクトはシングルトンであり、ユニットのファイナライズ中に破棄されます。

そして、それはすべてうまく機能します-TThemeServicesがアプリケーションのハンドルをサブクラス化した唯一の人である限り。

Application.Handle私は同様のシングルトンライブラリを持っていますが、これもフックしてブロードキャストを受信できるようにしたいと考えています。

そして、ユニットがファイナライズすると、私のシングルトンも同様に削除されます。


今、私たちは問題に行き着きます。誰かがThemeServicesまたはにアクセスすることを選択する可能性のある順序を保証することはできませんDWM。それぞれがサブクラスを適用します。また、Delphiがユニットをファイナライズする順序もわかりません。

サブクラスが間違った順序で削除されており、アプリケーションを閉じるとクラッシュします。

直し方?私が終わった後に他の人が完了するまで、サブクラス化メソッドを十分長く保つにはどうすればよいですか?(結局、メモリをリークしたくない)

も参照してください


更新: Delphi7はを書き直すことでバグを解決しているようですTApplication。><

Grrrr

言い換えると、TApplicationをサブクラス化しようとするのはバグであり、BorlandはMikeのを採用したときに修正しましたTThemeManager

TApplicationこれは、サブクラスを逆の順序で削除する方法がないことを意味している可能性があります。誰かがそれを答えの形で入れて、私はそれを受け入れます。

0 投票する
2 に答える
568 参照

c# - Windows 7のUIを模倣するにはどうすればよいですか?

戻るボタン/アドレスバー/検索ボックスが表示されるように、Aero Glassを少しだけドロップダウンして、Windows7と同じ外観を試してみたいと思います。これを行う方法についてのチュートリアルはありますか?C#でDWMを使用する方法を説明しようとする他のいくつかのチュートリアルを見てみたところ、完全に迷子になってしまったので、本当に簡単なものが必要です。

0 投票する
1 に答える
296 参照

c# - フォームをクリックできるのはなぜですか?

私は実験して、DWMとWindowsAeroを理解しようとしています。これまでのところ、私はほとんどそれを持っていると思いますが、奇妙な理由を除いて、フォームの厚い部分をクリックすると、クリックがそれを通り抜け、それを止める方法がわかりません。