0

通常のフレームでアプリケーションの大部分が透明な WinForm を作成したいと考えています。ウィンドウを最大化して元に戻すと、フレームの境界線がクリックできなくなるという問題が発生しました。クリックすると、アプリケーションの背後にあるアプリケーションに単純に通過します。次のようにして、簡単なWinFormsアプリでこれを再現できました。

  1. 新しい WinForms アプリケーションを作成します。
  2. デフォルト フォームの TransparencyKey と BackgroundColor を同じ色に設定します。
  3. アプリを実行します。
  4. 実行中のフォームの最大化ボタンをクリックします。
  5. 下に復元をクリックします。
  6. フォームの境界線がクリックできなくなりました (ただし、片側に 1 ピクセルのクリック可能な境界線が表示されることがあります)。

透明なフォームとコントロールについて Web 上にたくさんありますが、このバグについては何も見つかりませんでした。再現が簡単であることを考えると、私が最初にこれに遭遇したとは思えません。それを回避するためのアイデアはありますか?

4

1 に答える 1

-1
const int WM_SYSCOMMAND = 0x0112;
const int SC_MINIMIZE = 0xF020;
const int SC_MAXIMIZE = 0xF030;
const int SC_RESTORE = 0xF120;
const int SC_TOP = 0xF003;
const int SC_LEFTTOP = 0xF004;
const int SC_RIGHTTOP = 0xF005;
const int SC_DBCLICKTITLEBARMAX = 0xF122;
protected override void WndProc(ref Message m)
{
    base.WndProc(ref m); 
    if (m.Msg == WM_SYSCOMMAND)
    {
        int sc = m.WParam.ToInt32();
        if (sc == SC_RESTORE | sc == SC_LEFTTOP | sc == SC_TOP | sc == SC_RIGHTTOP | sc == SC_DBCLICKTITLEBARMAX )
        {
            FormBorderStyle oldvalue = this.FormBorderStyle;
            this.FormBorderStyle = FormBorderStyle.None;
            this.FormBorderStyle = oldvalue;
        }
    }
}
于 2012-09-15T15:43:48.987 に答える