2009-09-11 20 views
7

デスクトップの壁紙にウィジェットをペイントするデスクトップのアイコンの下にプログラムを書きました。 しかし、私は奇妙なバグを明らかにする - 私のプログラムは、他のコンピュータでは動作しませんでした - 彼らは 起動後にウィジェットのない同じデスクトップを表示します。デスクトップ上のアイコンの下に描画

だから、誰もがこの領域のexpirience、いくつかの知識を持っていますか?私を助けてください! :)

私は多くのテストプログラムを書いていますが、その試行ではむしろメソッドでデスクトップ上に何かを描画しますが、 テスト私の友人のコンピュータであまりにも何も表示されません)

描画方法:。私は自分のウィンドウプロシージャをインストールし、デスクトップ・ウィンドウ(progman->チャイルド>子)) を見つけ、フックを作成して、DLLを、書いた

デスクトップ。私はこのコードを取得し、高速な描画のためのクリッピング領域を設定する際にスキップ//

case WM_ERASEBKGND: 
    HDC hdc = (HDC)wparam; 
    PaintDesktop(hdc); 
    WidgetPaint(hdc); 
    return 1; 

: は、ウィンドウプロシージャでは、私はWM_ERASEBKGNDをフック。 (クリッピングとクリッピングなしですべての組み合わせを試しました)

またテストでも、同じ結果を持つWM_PAINTメッセージにウィジェットをペイントしようとしています - すべてはすでに私の作品ですが、私の友人ではありません。

更新:私はそれを解決しました! :)

+0

あなたのコードはWindows XPで動作し、Windows VistaまたはWindows 7では動作しませんか? – MusiGenesis

+0

はい、私のコードはXPとWindows Vistaで動作します。 しかし、Windows 7では正常に動作しません。Windows 7では、 はその保護メカニズムと思われます。 (私はexplorer.exeのプロセスでロードされたDLLをリストすることもできません) – vsvasya

+1

修正プログラムは何ですか? – Brian

答えて

3

私はそれを解決しました! これは単純な64ビットマシンでした) 私は64ビットとウィジェットのための私のコードをコンパイルする作業はかなり良い!また

そして、 -

PaintDesktop(hdc); 

はエアロとのWindows7(およびVista)で非常に明るい壁紙を生成します。 (ユーザーの壁紙が明るくなります) 本の

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam); 

原因でなければならない - エアロカラー総和と(仮想画面の壁紙の上に、それはデスクトップ上と同じである)通常の塗料としてPaintDesktop()を扱います。

よろしくお願いいたします。 :)

+0

私はちょうど同様のことを書こうとしています。デスクトップアイコンの下に画像を表示したい。私はWindowsのプログラミングの専門家ではないので、私はこれでいくつかの困難な時間があります。ウィジェットのソースコードをどこかに投稿してください。 – ciamej

+0

あなたはより詳細な回答を投稿できますか?私はあなたがデスクトップのアイコンの下でどのようにペイントするのか興味があります。 – Ampere

関連する問題