私は、ユーザーがマウスの左ボタンを押し下げてマウスをどこかにドラッグし、「ボーダーのついた矩形」(下にあるものを示す四角形、基本的にはボーダー)を描画する機能を実装しようとしています。WM_MOUSEMOVEに枠線をドラッグして描画しますか?
は、私が何かは、このコードでの作業があります。
case WM_MOUSEMOVE:
if (draw) {
endX = GET_X_LPARAM(lParam);
endY = GET_Y_LPARAM(lParam);
hdc = GetDC(hwnd);
SelectObject(hdc, GetStockObject(NULL_BRUSH));
Rectangle(hdc, startX, startY, endX, endY);
ReleaseDC(hwnd, hdc);
}
break;
(WM_LBUTTONDOWNが解雇とWM_LBUTTONUPが発射されたときにfalseに設定されている場合は引き分けがtrueに設定されています)。
これは次のようなものです。私は基本的にこれを望んでいます。内側に黒い線がなく、おそらく太い境界線があります。
私が抱えている問題は、矩形領域内で「失われた」ものを再描画する方法を理解できないことです。私は、私は、Rectangleの代わりにInvalidateRectを使用する必要があると思うが、WM_PAINTで再描画する方法がわからない。おそらく、私はこれとはまったく異なる方法に接近しているはずですか?これは私の初めてのWinapiです。デビッドHeffernanのに
通常、ラバーバンディング(この方法でボックスを描く)では、背景上に単色が塗られず、代わりに背景とXORされます。行を消去するには、元の背景が戻ってくる同じ行をもう一度XORするという単純な問題です。 – enhzflep
私は上記のように矩形を描画する前にROP2をXORPENに設定しようとしましたが、あなたの言うことに似ていますが、その関数では成功しませんでした: SetROP2(hdc、R2_XORPEN); – Zhinkk
ここで例をご覧ください:https://msdn.microsoft.com/en-us/library/windows/desktop/dd145184(v=vs.85).aspx –