2

基本的に、次の画像のようなウィンドウが必要です。http: //screenshots.thex9.net/2010-05-31_2132.png

(サイズ変更はできませんが、ガラスの境界線は保持されます)

Windowsフォームで動作させることができましたが、WPFを使用する必要があります。Windowsフォームで機能させるために、次のコードを使用しました。

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x84 /* WM_NCHITTEST */)
        {
            m.Result = (IntPtr)1;
            return;
        }
        base.WndProc(ref m);
    }

これは私が望んでいることを正確に実行しますが、WPFに相当するものが見つかりません。私がWPFで取得できた最も近いものにより、ウィンドウはマウス入力を無視しました。

どんな助けでも大歓迎です:)

4

2 に答える 2

2

非常に簡単な解決策は、各ウィンドウの最小サイズと最大サイズを互いに等しく設定し、ウィンドウ コンストラクターで固定数に設定することです。ちょうどこのような:

public MainWindow()
{
    InitializeComponent();

    this.MinWidth = this.MaxWidth = 300;
    this.MinHeight = this.MaxHeight = 300;
}

この方法では、ユーザーはウィンドウの幅と高さを変更できません。また、ガラス枠を取得するには、「WindowStyle=None」プロパティを設定する必要があります。

于 2010-05-31T14:18:29.127 に答える
1

メッセージ ループ用のフックを追加する必要があります。

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var interopHelper = new WindowInteropHelper(this);
    var hwndSource = HwndSource.FromHwnd(interopHelper.Handle);
    hwndSource.AddHook(WndProcHook);
}

private IntPtr WndProcHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    if (msg == 0x84 /* WM_NCHITTEST */)
    {
         handled = true;
         return (IntPtr)1;
    }
}
于 2010-05-31T12:03:48.077 に答える