6

私はこのようなものを見たことがありますが、これが可能かどうか疑問に思っていました。たとえば、アプリケーションを実行すると、その下にあるものにレンダリングが表示されます。

つまり、基本的には、ウィンドウなしで画面にレンダリングします。

可能か嘘か?

注: Windows と C++ でこれを行いたいです。

4

3 に答える 3

4

アプリケーションを使用して、他のアプリケーションのウィンドウに描画することができます。必要なウィンドウが見つかったら、それは HWND であり、描画目的で独自のウィンドウと同じように使用できます。しかし、そのウィンドウはあなたがこれを行ったことを認識していないので、自分自身を再描画しようとすると、おそらくあなたが描いたものを台無しにするでしょう.

これを回避するには非常に複雑な方法がいくつかあります。その中には、ウィンドウの「フック」を使用してそのウィンドウへの描画メッセージをインターセプトし、いつ再描画されたかがわかるようにして、再描画もできるようにする方法があります。

もう 1 つのオプションは、ウィンドウでクリッピング領域を使用することです。これにより、ウィンドウに変わった形を与えることができ、その背後にあるものはすべて正しく見えるようになります。

デスクトップの背景ウィンドウの描画を引き継ぐ方法もあり、デスクトップの背景にアニメーションなどを描画するアプリケーションを実際に実行できます (デスクトップがまだ使用可能な場合)。少なくとも、これは XP まで可能でしたが、Vista/Win7 で変更されたかどうかはわかりません。

残念ながら、これらのオプションはすべて非常に複雑すぎて、何をしようとしているのかについての詳細な情報がなければ、深く掘り下げることはできません.

于 2010-05-29T15:09:16.950 に答える
1

GetDesktopWindow()を使用してデスクトップを取得できHWNDます。ただし、以前の回答 (SoapBox) にあるように、OS がデスクトップを所有していると想定しているため、デスクトップを台無しにする可能性があることに注意してください。

于 2010-05-29T15:20:51.663 に答える
0

デスクトップの背景でこれを実現するために、私は数年前にオープンソース プロジェクトを作成しました。ウバーダッシュといいます。ウィンドウ階層に従うと、デスクトップは一種の「バックグラウンド」コンテナー内のウィンドウにすぎません。次に、メインコンテナとフロントコンテナがあります。フロント コンテナーは、ウィンドウが全画面表示または "常に手前" になる方法です。Aero コンポジションを使用して、フロント コンテナーにアルファを含むウィンドウをレンダリングできる場合がありますが、下部のウィンドウにイベントを渡す必要があります。それはきれいではありません。

また、一部のビデオ カードにはオーバーレイ/アンダーレイと呼ばれる技術があります。以前は、オーバーレイに直接レンダリングできました。GPU は、メイン メモリに干渉することなく、直接適用します。そのため、スクリーン キャプチャを行ったとしても、オーバーレイ/アンダーレイはスクリーン キャップに表示されません。残念ながら、MS は Vista でその技術を禁止しました...

于 2011-12-20T14:40:10.383 に答える