0

GlassForm(Microsoft.WindowsAPICodePack.Shell;を使用)でWindowsフォームを使用しています。フォームをGlassFormに変更すると、テキストボックスのテキストが表示されないという私の問題

4

3 に答える 3

3

フォームにパネルを配置し、塗りつぶすドックスタイルを設定し、パネルのBackColorを色Xに設定してから、フォームのTransparencyKeyを同じ色Xに設定します。

于 2012-10-13T05:00:15.163 に答える
3

はい、そのように動作します。エアロ グラス効果を適用すると、黒で描画されたものはすべて透明にレンダリングされます。これには、テキスト ボックス コントロール内のテキストが含まれます。この一般的なテーマは、ここで他の多くの質問の対象となっています。よく書かれていれば、多くの賛成票を集めますが、答えはほとんどありません。

ここにはあまり良い解決策はありません。私が遭遇したそれらはすべて、「醜い」と「ハック」の両方に分類されます。ラベル コントロールのようなものを使用している場合、オーナー描画は合理的なアプローチですが、独自のテキスト ボックスを描画しようとすることはお勧めしません。誰かがここでそれをしようとしました; 私が言ったように、結果は醜くハックです。私自身の使用には満足できませんでしたが、あなたの基準がどれほど高いかによっては、うまくいくかもしれません.

もちろん、オーナー描画の目標は、GDI (すべての組み込みコントロールがデフォルトで使用する) の代わりに GDI+ (透過性をネイティブにサポートする) を使用してすべての描画を行うか、または次のような関数を呼び出すことDrawThemeTextExです。ガラス越しに [ある程度] 判読できる影付きのテキストをレンダリングするために特別に設計されています。

同様に、互換性のあるテキスト レンダリングを有効にする (.NET の初期のバージョンで行っていたように、組み込みコントロールが GDI+ ルーチンを使用して描画する) などの通常のトリックは、テキスト ボックスでは機能しません。

正直なところ、ガラスとしてレンダリングされていないフォームの領域にテキストボックスを配置するのが最善の策です。DwmEnableBlurBehindWindowこの関数を使用して、フォーム全体ではなく、フォームの特定の領域の背後にあるガラス効果を選択的に有効にします。ここでの回答で、すぐに使用できる完全な .NET 実装を提供します。

于 2011-05-12T13:39:11.973 に答える
1

このサンプルをチェックしてください: http://www.danielmoth.com/Blog/Glass-In-C-An-Alternative-Approach.aspx

それ以上は調べていませんでしたが、この Aero グラス領域に TextBox や Button などのコンポーネントを配置するとうまくいきました。レンダリングされたコンポーネントには透過性の問題はありませんでした。ラベルは完璧ではありませんが、GDI+ で簡単に描画できます サンプル プロジェクトへの直接リンクは次のとおりです: http://www.danielmoth.com/Blog/MothGlass.zip

コントロールの後ろにパネルを配置し、パネルの TransparencyKey を設定しているようです。

ここに画像の説明を入力

于 2011-12-08T12:11:58.970 に答える