AQUA's .NET 奮闘記

Hobby Programmer の成長記録

目次

ニュース

  • わんくま同盟
    わんくま同盟
  • わんくま掲示板
    C# と VB.NET の質問掲示板
スカウター : AQUA's .NET 奮闘記

日記カテゴリ

記事カテゴリ

書庫

Blog 利用状況

わんくま同盟 AWARD

わんくま同盟 影

どうすれば良いのだろうか?

まずはこのリンク先を見てください。

( 中の技術日誌 : 空色の電卓ふゅーちゃりんぐ  )

私の電卓アプリのフォームを透明にしたところ、中さんが興味を持ってくださって、出来上がったのがこのリンク先にある画像です。

折角Vista機を手に入れたのですから同じものに挑戦してみたのですが、どうもこのリンク先にあるようなフォームの背景設定にならないのです。

 

背景色を透明にするとはいえ、違うコンセプトで行われているのだろうな…と思っているのですが、ググってみても、なかなかヒントらしいヒントに辿り着つきません。

私は、このようなしょ~もない(?)技が好きなので、もう少しMSDNなりで調べてみようと思っています。

とはいえ、ヒントらしいヒントが見付からないのも、ちょっと挫けます。




さて、このままのエントリでは少しもったいないので、私が使った背景を透明にする技を紹介します。

と言っても、大した事ではなく、フォームの描画処理に

Me.TransparencyKey = Color.FromKnownColor(KnownColor.Control)

と、こっそり忍ばせただけです。

他にも、

BackColorプロパティを任意に設定しておき、( 例えばActiveCaption等)さらにTransparencyKeyプロパティをBackColorプロパティと同じにしてやればいいと思います。

 

投稿日時 : 2007年7月29日 11:09

Feedback

# re: どうすれば良いのだろうか? 2007/07/29 11:25 中博俊

こんなかんじ


struct MARGINS
{
public MARGINS(Thickness t)
{
Left = (int)t.Left;
Right = (int)t.Right;
Top = (int)t.Top;
Bottom = (int)t.Bottom;
}
public int Left;
public int Right;
public int Top;
public int Bottom;
}

[DllImport("dwmapi.dll", PreserveSig = false)]
static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);

[DllImport("dwmapi.dll", PreserveSig = false)]
static extern bool DwmIsCompositionEnabled();


protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
if (!DwmIsCompositionEnabled()) return;
IntPtr hwnd = new WindowInteropHelper(this).Handle;
if (hwnd == IntPtr.Zero) return;
this.Background = Brushes.Transparent;
HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;
MARGINS margins = new MARGINS(new Thickness(-1));
DwmExtendFrameIntoClientArea(hwnd, ref margins);
}

# re: どうすれば良いのだろうか? 2007/07/29 13:02 えムナウ

私がWPFの勉強会で紹介したやつです。

# re: どうすれば良いのだろうか? 2007/07/29 13:14 中博俊

そうそう。
まるぱくり

# re: どうすれば良いのだろうか? 2007/07/29 15:32 アクア

ありがとうございます。

使ったことのない技術が多く、コード見ていて首を傾げる所が多々…orz


WPFのセッションという事で、大阪勉強会#8のVTRを見てみることにします。

大いに勉強不足ですね(汗

# re: どうすれば良いのだろうか? 2007/07/29 20:59 えムナウ

VTRは東京のほうがいいよ。

# re: どうすれば良いのだろうか? 2007/07/30 12:01 ぽぴ王子

Dwm~っていうのが Vista で新しく追加された API ですね。
そんでもって、WindowInteropHelper も .NET 3.0 で追加された
関数で、WPF 関係くさい。

いろいろと調べると出てくるけど(えムナウさんのセッションVTR
を見ればわかると思いますが)なんだか楽しそうなので僕も後で
遊んでみます。
(やっと Vista マシンを手に入れました)

# re: どうすれば良いのだろうか? 2007/07/30 15:24 アクア

まる写しでVBに変換しました。

東京勉強会のVTRは音声が小さいのが難点ですね。

タイトル
名前
Url
コメント