首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

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

2012-03-13 
VS2005利用鼠标响应事件作图各位朋友,大家好!本人有个问题想请教大家,我希望在Picture控件上,利用鼠标响应

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 这样画出来的就是只有边框
画刷 画刷 画笔 画笔 楼主可以联系实际 想一想

热点排行