2008-09-17 8 views
4

.Netフォームをグラスでサポートするためのいくつかのテクニックがあります。ヘルプ.Netを入手するWinFormsのアプリケーションでVistaエアログラスをサポートする

私はこの方法のためにオリジナルのソースはここにあると思う:基本的にhttp://blogs.msdn.com/tims/archive/2006/04/18/578637.aspx

//reference Desktop Windows Manager (DWM API) 
[DllImport("dwmapi.dll")] 
static extern void DwmIsCompositionEnabled(ref bool pfEnabled); 

[DllImport("dwmapi.dll")] 
static extern int DwmExtendFrameIntoClientArea(IntPtr hWnd, ref MARGINS pMarInset); 


//then on form load 
//check for Vista 
if (Environment.OSVersion.Version.Major >= 6) 
{ 
    //check for support 
    bool isGlassSupported = false; 
    DwmIsCompositionEnabled(ref isGlassSupported); 

    if (isGlassSupported) 
     DwmExtendFrameIntoClientArea(this.Handle, ref margins); 
... 

//finally on print draw a black box over the alpha-ed area 
//Before SP1 you could also use a black form background 

最後のステップは問題であること - その領域の上に描かれた任意のサブコントロールはまた、黒扱うように見えますアルファ透明マスク。

たとえば、クラス領域のタブストリップには透明なテキストが表示されます。

方法はありますか?

これを行う簡単な方法はありますか?

私が取り組んでいるアプリケーションは、XPとVistaの両方で動作する必要があります。私はそれらを正常に機能させる必要があります。ここにベストプラクティスはありますか?

答えて

3

本当にこれを行う簡単な方法はありません。これらのAPIは.NET Frameworkによって公開されていません(まだ)ので、これを行う唯一の方法は何らかのinterop(またはWPF)を使用する方法です。

両方のWindowsバージョンでの作業については、実際に関数を呼び出すまでランタイムがDLLへのエントリポイントを探していないため、コードは問題ありません。

1

DannySmurfはそれを言った。 .NETフレームワーク(私は数週間前にこれを試しました)では、これらのAPIへの直接の「管理」アクセスはありません。

私は何か面倒なことをやりました。私自身のUIをGDI +で作成しました。 (ボタン、丸いラベルなど)。 Windowsのバージョンにかかわらず同じように見えます。 Win.Formsは実際には醜いですが、それはあなたがXP <側で得たすべてのものです。

0

私はアンマネージドコールを気にしません。ブラックボックスを使用してアルファの動作を模倣し、それが問題の上部のいくつかのコンポーネントの黒い要素に及ぼす影響です。

1

あなたがガラスにしたい領域のTransparencyKeyを設定するのを忘れたと思います。記事から、あなたのWindowsでは

フォームアプリケーション、あなた は、単にあなたがアプリケーション内の別の場所 を使用することはありません色にTransparencyKey プロパティを設定する必要があります(私は理由のために、 Gainsboro使用しているwill が明らかになる)。次に フォームの余白にドッキングされた のパネルを1つ以上作成し、 パネルの背景色を透明キーに設定します。 DwmExtendFrameIntoClientAreaを呼び出すと、の透明キーが設定されていれば、 ガラスの余白内に が表示されます。

+0

ありがとうございますが、SP1の後では動作しません。ボックスが黒くなっているようです。 – Keith

0

安価なハックを使用すると、透明なPanelコントロールをフォームに配置し、コントロールを配置することができます。黒は黒です。

関連する問題