在视图中同步显示鼠标的位置(2)
//画坐标
coordString---坐标字符串
drawPt--绘制起点坐标
void CDrawMouseView::DrawCoord(CDC* pDC,CString& coordString,CPoint drawPt)
{
if(m_StoreBmp.GetSafeHandle())//有位图才画
{
drawPt.Offset(OFF_X,OFF_Y);
CRect rect(drawPt,CSize(m_nCoordStrLen,WORD_HEIGHT));
pDC->SetBkMode(TRANSPARENT);//设置透明背景
COLORREF crf = pDC->SetTextColor(TEXT_COLOR);
pDC->DrawText(coordString,rect,DT_CENTER);
pDC->SetTextColor(crf);
}
}
//擦除上次的坐标
void CDrawMouseView::DoRubberCoord(CDC* pDC,CPoint showPt)
{
if(m_StoreBmp.GetSafeHandle())
{
m_StoreDC.SelectObject(&m_StoreBmp);
pDC->BitBlt(showPt.x+OFF_X,showPt.y+OFF_Y,m_nCoordStrLen,WORD_HEIGHT,&m_StoreDC,0,0,SRCCOPY);
m_StoreDC.DeleteDC();
m_StoreBmp.DeleteObject();
}
}
//鼠标移动事件
void CDrawMouseView::OnMouseMove(UINT nFlags, CPoint point)
{
CDC* pDC = GetDC();
if(!m_bStart)
m_bStart = true;
else
DoRubberCoord(pDC,m_OldPt);//当不是第一次移动鼠标时才需要先擦除上次的坐标
CString str;
str.Format("[%d,%d]",point.x,point.y);
m_nCoordStrLen=str.GetLength()*WORD_WIDTH;
m_OldPt = point;
CopyBitmap(pDC,point);
DrawCoord(pDC,str,point);
ReleaseDC(pDC);
}
【编者注】本文所用程序在VC6.0下编译运行正确。如果大家有不同的见解和看法,欢迎讨论。
- 上一篇:得到远程机器MAC地址源代码
- 下一篇:浅谈无标题窗口的拖放