0

起動時にフォームを起動し、実行中ずっとアプリケーションのバックグラウンドとして維持しようとしています。基本的に、すべてのデスクトップ アイコンを非表示にして、背景を空白にしたいと考えています。さらに、ユーザーが特定のボタンをクリックすると、フォーム BackColor が変更されます。

私はたくさん検索しましたが、半分の解決策を見つけ続けています。これが私がこれまでに試したことです:

WndProc イベントをオーバーライドする BackBaseForm を作成しました。その場合はWM_WINDOWPOSCHANGING、呼び出しを行わずbase.WndProc(ref m)、代わりに次のメッセージを送信します。

SetWindowPos(Handle, new IntPtr(1), 0, 0, this.width, this.height, SWP_NOZORDER);

ただし、フォームをクリックするたびに、フォームが前面に表示されます。また、構造体を作成し、WINDOWPOS構造体へのポインターをマーシャリングしてから、構造体を変更しようとしました。lParamただし、これがメッセージの実際の内容を変更するとは思いません。

4

2 に答える 2

0

frmBackground.Enabledfalse に設定します。

あなたのメインフォームで:

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        var bg = new Form();
        bg.WindowState = FormWindowState.Maximized;
        bg.ShowInTaskbar = false;
        bg.FormBorderStyle = FormBorderStyle.None;
        bg.Show();
        bg.Enabled = false;
        this.Owner = bg; // optional - see below
    }

これを行う場合:

this.Owner = f; 

次に、背景フォームをクリックすると、メイン フォームの境界線が点滅します (少なくとも Windows 7 では、他のバージョンについてはわかりません)。どちらの方法でも、Enabled を false に設定すると機能します。ただし、背景のフォームをクリックするとビープ音が鳴るので、煩わしい場合があります。防ぐ方法がきっとあるはずです。

于 2011-11-04T18:34:19.267 に答える
0

背景フォームを作成し、「メイン」フォームの所有者フォームをその背景フォームに設定します。例えば:

frmBackground backgroundForm = new frmBackground();
frmMain mainForm = new frmMain();
mainForm.Owner = backgroundForm;
backgroundForm.Show();
mainForm.Show();
于 2011-11-04T16:45:31.257 に答える