8

次のプロパティを使用して、カスタムの階層化されたWPFウィンドウを作成しました。

  1. AllowsTransparency = True
  2. ShowInTaskbar = False
  3. 背景=透明
  4. 最上位=True
  5. アイコン="Icon.ico"

[プロジェクトのプロパティ]->[アプリケーション]タブにIcon.icoを追加しました。

ShowInTaskBarがfalseの場合、アイコンはデフォルトのWPFウィンドウアイコンとして表示されますが、ShowInTaskbarがtrueの場合は正しく表示されます。

Alt+Tabメニューにアイコンが正しく表示されるようにします。どうすればこれを達成し、ShowInTaskbar = Falseにすることができますか?

4

1 に答える 1

4

ここにはいくつかの問題があります。まず、ShowInTaskbarプロパティがfalseに設定されている場合、非表示のウィンドウが作成され、現在のウィンドウの親として割り当てられます。この非表示のウィンドウのアイコンは、ウィンドウを切り替えるときに表示されます。

Interopでそのウィンドウをキャッチし、次のようにアイコンを設定できます。

private void Window_Loaded(object sender, RoutedEventArgs e) {
    SetParentIcon();
}

private void SetParentIcon() {
    WindowInteropHelper ih = new WindowInteropHelper(this);
    if(this.Owner == null && ih.Owner != IntPtr.Zero) { //We've found the invisible window
        System.Drawing.Icon icon = new System.Drawing.Icon("ApplicationIcon.ico");
        SendMessage(ih.Owner, 0x80 /*WM_SETICON*/, (IntPtr)1 /*ICON_LARGE*/, icon.Handle); //Change invisible window's icon
    }
}

[DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);

あなたが考える他の問題は次のとおりです。

  1. ShowInTaskbarプロパティが実行時に変更されたときに何が起こるかを調べます。
  2. ファイルからではなく、ウィンドウからアイコンを抽出します。
于 2010-03-02T18:02:37.170 に答える