0

私は、Windows 7に移行している学校のシンプルなアクティブデスクトップの置き換えに取り組んでいます。アイデアは、読書に苦労している幼児がそれらを使用できるように、写真付きのいくつかの大きなボタンを備えたウィンドウを作成することです。

SetParent()を使用して、ウィンドウの親を「Progman」に設定しているので、ウィンドウは常に後ろにあり、ユーザーが「デスクトップを表示」を選択したときに最小化されません。Windows XPではすべて正常に動作しますが、Windows 7では、ユーザーが[デスクトップの表示]をクリックするとウィンドウは残りますが、コンテンツはユーザーのWindowsの背景に置き換えられます。ボタンは引き続き機能し(ボタンは表示されません)、ウィンドウのサイズを変更したり更新したりすると、ボタンが再び表示されます。問題の写真:
https://files.me.com/adt100/ggi99t

なぜこれが起こっているのか考えはありますか?「デスクトップの表示」が押されたときにウィンドウを強制的に更新する方法を知っている人はいますか?

4

1 に答える 1

2

あなたの場合、アプリは例外をスローしていますが、クラッシュしていないと思われます。WPFアプリは、一部のUI要素のコンストラクター中に例外がスローされた場合にこれを行う傾向があります。レンダリングスタックを混乱させる可能性があります。

問題を再現しようとしましたが、失敗しました。私のテストから、「Progman」へのハンドルを取得し、Windows 7の基本テーマ(矢印ガラスなし)を使用するときにメインウィンドウを親として設定することができました。

Arrowテーマを使用した場合、SetParentを呼び出すと、ウィンドウが消えてしまいます。少し調べてみると、修正の可能性が見つかりました。親を「Progman」ウィンドウとして設定する代わりに、「SysListView32」子(デスクトップアイコンを保持するために使用される子ウィンドウ)を使用してみることができます。

問題は、「SysListView32」の取得が簡単ではないことです。以前は「Progman」から「SHELLDLL_DefView」、「SysListView32」へと移動する問題でしたが、Windows7ではこれが変更されました。'SHELLDLL_DefView'はWorkerWの子になりました....時々。

これを説明するために私が見つけた最高の記事は次のとおりです:http: //fernandomachadopirizen.wordpress.com/2010/08/09/give-me-a-handle-and-i-will-move-the-earth/

于 2011-09-25T19:19:58.053 に答える