2016-05-23 5 views
-1

上に描画するために失敗しました:は、私は、次の簡単なプログラムのように、<code>GetDC(GetDesktopWindow)</code>を使用して、デスクトップ画面上の任意のものを描画しようとしたDesktopWindow

#include <windows.h> 

int main() 
{ 
    TextOut(GetDC(GetDesktopWindow()), 10, 10, TEXT("Test TextOut Tester!!"), 21); 
    return 0; 
} 

私の現在のユーザー権限が描画動作に影響を与えると思われる、私はないです私のPC上の管理者は、これがその理由ですか?この問題のドキュメントはありますか?事前

+1

問題は、デスクトップウィンドウがあなたのものではないということです。これがサポートされているシナリオであることを示す契約書類はありません。 GDIには特権が適用されません。あなたがしていることは別の理由で失敗します。エラー処理の完全な欠如は、見つけ出すのに役立つものではありません。 – IInspectable

+0

どうすればいいですか?作成したウィンドウに 'TextOut'をしようとすると成功しますが、デスクトップウィンドウでは失敗しますので、何が問題なのですか? GetDC'と 'GetDesktopWindow'からの戻り値がゼロではないにもかかわらず、 –

+1

これを行うことは難しいですが、再描画と、99.9%の時間の間に非持続性があり、より優れた選択肢を持つ恐ろしいアイデアです(究極の目標を述べるべきです)。 GetDesktopWindow()ウィンドウは、GetShellWindow()から開始する必要があるsyslistviewのアイコン、壁紙などを含むウィンドウではありません。 –

答えて

1

あなたは、このようなデスクトップ画面上に描画することはできません単純な理由は、あなたが実際にデスクトップウィンドウを見ることができないです。 Windows 95以降、デスクトップウィンドウは、エクスプローラが所有するウィンドウのクラスタによって完全に隠されています。

GetDC(GetDesktopWindow())に電話をかけたときに得られるDCは完全にクリップされます。

ディスプレイに直接描画したい場合は、GetDC(NULL)を使用すると、デスクトップと可視ウィンドウ全体に描画するためのDCが得られます。しかし、これは言及されているように、Windowsの再描画ロジックの外部では完全に動作し、その結果は、まったく醜いものであり、実際の目的には合致しません(例えば、ウィンドウレスのアプリケーションから何らかのデバッグフィードバックを得る開発の過程で)。

"デスクトップ上に何かを表示"したいアプリケーションのほとんどは、ウィンドウを作成してそれを描画することで行います。なぜそれはここで適切ではないのですか?

+0

「GetDC(NULL)」がうまくいきました。私は直接画面に描いています。 –

-1

で おかげでこれはあなたが何をすべきかです:

HDC hdc = ::GetDC(NULL); 

//draw on the desktop using the hdc 

::ReleaseDC(NULL, hdc); 
+0

いいえしないでください。次のペイントサイクルで消去されます。そして、とにかくそれを描くのはあなたの窓ではありません。 –

+0

ありがとう、それは 'GetDC(NULL)'で動作しています。 –

+0

あなたは私にネガティブなランクを与えたという事実に驚いています。 デスクトップでR2_XORPENラスタ操作で:: SetROP2を使用して描画するときに、特にこのように描画することが非常に望ましいですか。 実際、これはこれがどのように行われたかということです。 これは残念です。 – AlphaP8

関連する問題