私のアプリケーションはスクリーンショットメーカーです。スクリーンショットを作成するには、ユーザーが画面領域を選択する必要があります。私は PureBasic で Win32 API を使用していますが、問題ありません。すべて C++ と同様です。ユーザーがアプリケーションを実行すると、半透明のボーダレス フォームが全画面表示され、他のすべてのウィンドウにマウスが移動します。マウス ダウン イベントの選択が開始され、XORed 領域をフォームに適用して、現在の選択のサイズで穴を開けます。
すべてのmousemoveイベントで新しい領域を作成して適用します。
rgn1 = CreateRectRgn_(0,0,DWidth,DHeight) ; full size of desktop
rgn2 = CreateRectRgn_(sx, sy, ex, ey) ; current selection points
CombineRgn_(rgn1, rgn1, rgn2, #RGN_XOR)
SetWindowRgn_(WindowID(0), rgn1, #True); apply region
Windows XP を搭載した私のコンピューターでは問題なく動作しますが、Vista を搭載した他のコンピューターではバグがあります。マウスを動かすたびに新しい領域オブジェクトを作成するのは間違っていると思います。たぶん、一度作成してからサイズを変更する必要がありますか?誰かがこれを正しく行う方法を説明できますか? C++ の例は問題ありません。