当前位置: 代码迷 >> VC >> VS2005利用鼠标响应事件作图解决方案
  详细解决方案

VS2005利用鼠标响应事件作图解决方案

热度:9183   发布时间:2013-02-25 00:00:00.0
VS2005利用鼠标响应事件作图
各位朋友,大家好!
本人有个问题想请教大家,我希望在Picture控件上,利用鼠标响应事件画矩形框。我在程序中利用CDC* pDC,pDC->Retangle()画图,画出来的是填充式的矩形图案,请问大家,怎么改成只显示边框的。附上主要代码:

CPoint m_newpos;
CPoint m_oldpos;

在OnLButtonDown中:
CStatic* pPicture1 = (CStatic*)GetDlgItem(IDC_PictureShow);  
pDC = (CDC*)pPicture1->GetDC(); // 取得CDC 
m_newpos=point;
m_oldpos=point;

在OnLButtonUp中:
CStatic* pPicture1 = (CStatic*)GetDlgItem(IDC_PictureShow);  
pDC = (CDC*)pPicture1->GetDC(); // 取得CDC  
HBRUSH pbrush;
pbrush=(HBRUSH)pDC->SelectObject(HBRUSH(GetStockObject(NULL_BRUSH)));
pDC->SelectObject(pbrush);

if(GetCapture()!=this)
return;
pDC->Rectangle(CRect(m_newpos,point));
ReleaseDC(pDC);
ReleaseCapture();

在OnMouseMove中:
CStatic* pPicture1 = (CStatic*)GetDlgItem(IDC_PictureShow);  
pDC = (CDC*)pPicture1->GetDC(); // 取得CDC  
HBRUSH pbrush;
pbrush=(HBRUSH)pDC->SelectObject(HBRUSH(GetStockObject(NULL_BRUSH)));
pDC->SelectObject(pbrush);

if(GetCapture()!=this)
return;
int oldmode;
oldmode=pDC->GetROP2();
pDC->SetROP2(R2_NOT);

pDC->Rectangle(CRect(m_newpos,m_oldpos));
pDC->Rectangle(CRect(m_newpos,point));
pDC->SetROP2(oldmode);
m_oldpos=point;

请各位朋友指教,谢谢了!

  


------解决方案--------------------------------------------------------
pDC->SetROP2(oldmode);
pDC->Rectangle(CRect(m_newpos,point));
不过这样的效果好像也不好..缩小尺寸的时候好多黑色块...
------解决方案--------------------------------------------------------
还是用polyline的比较好,因为rectangle有画刷内部填充了.....
或是用moveto,lineto,这几个函数画矩形出来....
------解决方案--------------------------------------------------------
你是用HBrush来填充的pDC 画出来的当然是填充的图形 你可以用HPen的对戏那个来填充pDC 这样画出来的就是只有边框
画刷 画刷 画笔 画笔 楼主可以联系实际 想一想
  相关解决方案