質問

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

それで、この分野での経験、知識はありますか?私を助けてください! :)

(ウィジェットが動作しない近くにコンピューターが見つかりません。私のコンピューターはすべて正常に動作します。 私は多くのテストプログラムを作成しましたが、それらのテストでは、メソッドを使用してデスクトップに何かを描画しようとしましたが、 ただし、テストでは友達のコンピューターにも何も表示されません。)

描画方法:

デスクトップウィンドウ(progman-> child-> child)を見つけるdllを作成しました) フックを作成し、デスクトップ用の独自のウィンドウプロシージャをインストールします。 ウィンドウプロシージャでWM_ERASEBKGNDをフックします:

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

//このコードではスキップして、高速描画のためにクリッピング領域を取得および設定します。 (クリッピングありとクリッピングなしのすべての組み合わせを試しました)

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

upd:解決しました! :)

役に立ちましたか?

解決

解決しました! それは単純な64ビットマシンでした) したがって、64ビット用にコードをコンパイルすると、ウィジェットの起動はかなりうまくいきます!

また、-

PaintDesktop(hdc);

Aeroを使用すると、Windows7(およびVista)で非常に明るい壁紙が生成されます。 (ユーザーの壁紙が明るくなります)。

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam);

この原因-AeroはPaintDesktop()を通常のペイント(仮想スクリーンの壁紙上、デスクトップと同じ)として扱い、色の総和を付けます。

よろしく! :)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top