次のコードのように、mpDC を使用してマウス ポイントに十字線を描画したいのですが、マウスを移動すると、マウス ポイントで十字線が移動します。
しかし、BitBlt の使用方法がわからないため、描画領域 (rectRange) に線が表示されない可能性があります。
CWnd *pWnd;
CRect rect;
CDC mShowDC;
CBitmap mShowBmp;
CPen mpen;
CPen *mOldpen;
CDC *mpDC;
mpDC = GetDC();
mShowDC.CreateCompatibleDC(mpDC);
mShowBmp.CreateCompatibleBitmap(mpDC,rectRange.Width(),rectRange.Height());
mShowDC.SelectObject(mShowBmp);
BitBlt(mShowDC,0,0,rectRange.Width(),rectRange.Height(),
mbkCurveDC,0,0,SRCCOPY);
//InvalidateRect(rectRange);
if(boolShowMouseLine)
{
mpen.CreatePen(PS_SOLID,1,RGB(0,0,0));
mOldpen = mShowDC.SelectObject(&mpen);
mShowDC.MoveTo(rectRange.left,mMousePoint.y);
mShowDC.LineTo(mMousePoint.x - 1,mMousePoint.y);
mShowDC.MoveTo(mMousePoint.x + 1,mMousePoint.y);
mShowDC.LineTo(rectRange.bottom,mMousePoint.y);
mShowDC.MoveTo(mMousePoint.x,rectRange.top);
mShowDC.LineTo(mMousePoint.x,mMousePoint.y - 1);
mShowDC.MoveTo(mMousePoint.x,mMousePoint.y + 1);
mShowDC.LineTo(mMousePoint.x,rectRange.right);
mpen.DeleteObject();
mShowDC.SelectObject(mOldpen);
}
mpDC->BitBlt(rectRange.left, rectRange.top,
rectRange.Width(), rectRange.Height(),
&mShowDC, rectRange.left, rectRange.top, SRCCOPY);
コードに従ってクロスラインを描画する別の方法
CDC *cdc;
cdc = GetDC();
if(boolShowMouseLine)
{
cdc->MoveTo(rectRange.left,mMousePoint.y);
cdc->LineTo(mMousePoint.x - 1,mMousePoint.y);
cdc->MoveTo(mMousePoint.x + 1,mMousePoint.y);
cdc->LineTo(rectRange.right,mMousePoint.y);
cdc->MoveTo(mMousePoint.x,rectRange.top);
cdc->LineTo(mMousePoint.x,mMousePoint.y - 1);
cdc->MoveTo(mMousePoint.x,mMousePoint.y + 1);
cdc->LineTo(mMousePoint.x,rectRange.bottom);
}
現状は写真です
しかし、このコードでは、マウスの位置をずらすと多くの十字線が描画されます。
前のクロスラインをクリアするにはどうすれば...