質問: デスクトップ上の描画ラインは勝利7で非常に遅い このコードを使用して、マウスですべてのウィンドウの上に線を描画します。私はマウスのフックを使ってマウスの座標を取得しています。右マウスボタンが押されている間は、マウスの動きごとに線を描いています。私は `NOTXORPEN` を使用していますので、再度描画するだけで行を削除することができます。 その中に: ``` ScreenDC := GetDcEx(GetDesktopWindow,0,DCX_LOCKWINDOWUPDATE); PenHandle := CreatePen(PS_SOLID,HitStorage.GetPenWidth,10); SelectObject(ScreenDC ,PenHandle); OldPenMode := SetRop2(ScreenDC, R2_NOTXORPEN); //Setting the PenMode to NotXor MoveToEx(ScreenDC, X, Y, Nil); //Move The Pen Position to the Cursor Position ``` 私はこのコードをマウスの動きごとに使用しています: ``` LineTo(ScreenDC, X, Y);//Draw a Line between the prev Point to Current Point ``` このコードはWindows 95,98,2000、XPで動作しましたが、Windows 7では非常に遅いです。 私は、Delphi 3でマウスジェスチャープログラム(1999年に書かれた)をWindows API(マウスフックはバージョン3のDelphi BUGのためにVCで書かれています)を使って書いています。このプログラムは、 StrokeIt がやっていることを正確に行っていますが、何とかStrokeItがこの問題の解決策を見つけ出しました。 私のコードはDelphiにありますが、どの言語でも答えが分かります! 私は正確に何を構築しようとしているのかをより詳細に説明します。私のアプリケーションは3つの部分に分かれています: 1. 右マウスボタンがクリックされている間のマウスジェスチャーの追跡と保存 2. 限られた数の図形に基づくジェスチャ認識 3. 認識されたジェスチャーとジェスチャーの開始時にカーソルの下にあったアプリケーションに基づくマクロのアクティブ化 私はPart1をWindows7(Vista)で動かすのに問題があります。そして、Martynが答えて書きましたように、私はコンセプトを変えなければならないと思います。今では、マウスメッセージとジェスチャー描画を上記のコードに引っ掛けて追跡しています...階層化されたウィンドウの基本を理解しましたが、私にとってはうまくいくでしょうか?あなたはフルスクリーンの一番透明なウィンドウを作ってそれを描くと思うのですか?私はこれのためのコードを書くのを助けることができますか?
回答: Windows Vistaが登場する前は、デスクトップは実際のGDIサーフェスとして描かれていたので、この種のアクティビティはうまくいきましたが、GDIドライバのアクセラレーションに依存していました。 Vista以上では、デスクトップウィンドウマネージャはDXを使用して、複数のウィンドウ(いくつかはGDIを使用する可能性がありますが、その一部は使用できない場合があります)を新しいドライバーモデルにレンダリングされる単一の最終シーンに合成します。その結果、画面のピクセルを直接突き刺すのがずっと遅くなります。 もっと根本的に、これは物事を終わらせる方法ではありません。ビルドしようとしていることは私には分かりませんが、階層化されたWindowsについて知りたいと思うかもしれません。 http ://msdn.microsoft.com/en-us/library/ms997507.aspx で、実際のアプリケーションの上に複雑なシーンを作成するためのサポートされた適切な方法を提供します。また、マウスフックの使用を避けるのにも役立ちます。これはまた悪い考えです。 マーティン