0

SetPixel 関数を呼び出して iTunes でピクセルを設定すると、その特定のアプリケーションでピクセルが表示されますが、Windows Media Player で同じ関数を呼び出してもまったく表示されません。また、この機能はフルスクリーン ウィンドウでも機能しないようです。なぜこのような大きな多様性があるのでしょうか? どんな説明でも大歓迎です。前もって感謝します。

4

2 に答える 2

3

前述のように、ウィンドウは自分のウィンドウではないため、期待した結果が得られないことは非常に簡単であり、最終的にはウィンドウの動作を制御できません。

あなたができる2つのこと(明らかに一方が他方よりも優れています)は次のとおりです。

  • GetDC (NULL)画面デバイス コンテキストへのハンドルを取得するために使用します。ClientToScreen画面上のピクセルの位置を計算するために使用します。SetPixelそのハンドルで呼び出します。ただし、これはかなり迅速にクリアされます。

  • 適切なカラー キーを使用して、独自の最上位のポップアップ、透明 (メッセージに対して) のレイヤード ウィンドウを作成します。ClientToScreen画面の位置を計算するために使用しScreenToClient、ウィンドウに適切に配置されることを確認するために使用します (理論的には、クライアントのサイズが画面と同じである必要があります)。ピクセルをウィンドウに描画すると、いつ離れるかを制御できます。

2 番目を使用する場合、拡張ウィンドウ スタイルは次のようになります。

WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_LAYERED

通常のウィンドウ スタイルは次のようになります。

WS_POPUP | WS_VISIBLE

GetSystemMetrics寸法は、 と の値を使用してSM_CXSCREEN見つけることができますSM_CYSCREEN

カラーキーを設定するには、次を使用しますSetLayeredWindowAttributes

SetLayeredWindowAttributes (hwnd, RGB (red, green, blue), 0, LWA_COLORKEY);

redgreen、およびはウィンドウblueの背景色を構成し、実際の色として表示されることはありません。そうすれば、背景は描画されず、ユーザーに目立たない違いを与えますが、何かが描画されると表示されます.

于 2012-06-03T20:01:32.330 に答える
1

コントロールの描画は、コントロールのWM_PAINTハンドラーで実行する必要があります。それはあなたのコントロールではないので、あなたはメッセージループに直接アクセスすることはできません。これは、コントロールが無効になっている場合、ピクセルが失われることを意味します。

ビデオを再生したり、コンテンツを頻繁に更新したりするアプリケーションは、フレームごとにコントロールを無効にします。これにより、コントロールが非常に迅速に更新されます。

ここでは、透明なオーバーレイウィンドウが唯一の方法だと思います。コントロールがメッセージループを処理した後、メッセージループにフックして、WM_PAINTハンドラーに反応できない限り...

于 2012-06-03T20:07:39.497 に答える