0

背景が透明なフォームを作成しようとしています** (「半分見える」フォームではなく、「穴」のあるフォーム)。

これで、透明な背景 (アルファ チャネルなし) と、アルファ チャネルを使用するがフォームの移動時に更新されない背景の作成に成功しました。

フォームに追加したコードは次のとおりです。

    protected override void OnPaintBackground ( PaintEventArgs e ) {
        Graphics gfx = e.Graphics;
        gfx.DrawImage(this.BackgroundImage, new Rectangle(0, 0, this.Width, this.Height));
    }

    private void Form1_Paint ( object sender, PaintEventArgs e ) {
        Graphics gfx = e.Graphics;
        gfx.DrawImage(this.BackgroundImage, new Rectangle(0, 0, this.Width, this.Height));
    }

ここでの問題は、タイマーでウィンドウを移動すると (「左」プロパティを変更して)、背景が同じままになる (穴の下の画像が更新されない) ことです。

Paint 関数が呼び出されていることは確かです。

        this.Invalidate();
        this.Update();
        this.Refresh();
        this.Show();

タイマーに-念のため:)(記事の1つで読んだ提案でした)

基本的に問題は、移動時に背景が更新されないことです。

ここに来る前に、このテーマに関する記事を 30 本ほど読んだので、より良い方法で達成しようとしていることを書きます。形式は次のようになります。

  • 背景が透明であること (「穴」)

  • アルファチャンネルをサポート (エッジの「半透明ピクセル」)

  • フォームを移動しても透明のまま

どんな提案も素晴らしいでしょう。

4

0 に答える 0