CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何画一个矩形???

楼主ywbby(ywbby)2000-09-21 08:57:00 在 VC/MFC / 基础类 提问

我要画一个矩形,但画矩形的函数  
  Rectangle(...)默认是填充方式的,我不需要填充,现在我是使用一个  
  Polyline(   ,   )函数,将一个矩形的四个点顺序写在一个POINT数组中,这样总觉得代码太长,有没有什么别的好一点的办法?BRUSH有没有效果为不填充的?  
  问题点数:30、回复次数:11Top

1 楼Areslee(懒虫易水)回复于 2000-09-21 09:06:00 得分 5

在填充时使用空画刷就可以了。Top

2 楼Holly()回复于 2000-09-21 09:43:00 得分 6

SelectObject((HBRUSH)GetStockObject(NULL_BRUSH));Top

3 楼fd()回复于 2000-09-21 11:42:00 得分 5

    用     CDC::Draw3DRectTop

4 楼ywbby(ywbby)回复于 2000-09-21 17:22:00 得分 0

fd朋友说的Draw3DRect能画一个矩形而不填充吗?  
  能否详细解释一下   ?  
  Top

5 楼fd()回复于 2000-09-21 19:11:00 得分 0

    是,看msdn   很简单Top

6 楼ywbby(ywbby)回复于 2000-09-22 13:37:00 得分 0

Holly,用你的方法好像不怎么行,能不能给个例子。  
  email:  
  ywbby@21cn.com  
  Top

7 楼Holly()回复于 2000-09-22 14:26:00 得分 0

void   CMyView::OnDraw(CDC*   pDC)  
  {  
          CMyDoc*   pDoc   =   GetDocument();  
          ASSERT_VALID(pDoc);  
          //   TODO:   add   draw   code   for   native   data   here  
          SelectObject(pDC->GetSafeHdc(),   (HBRUSH)GetStockObject(NULL_BRUSH));  
          pDC->Rectangle(10,   10,   100,   200);  
          pDC->Rectangle(20,   20,   110,   210);  
  }  
  Top

8 楼Eagle_118(语夜)回复于 2000-09-22 15:26:00 得分 6

void   CMyView::OnDraw(CDC*   pDC)  
  {  
          CMyDoc*   pDoc   =   GetDocument();  
          ASSERT_VALID(pDoc);  
          //   TODO:   add   draw   code   for   native   data   here  
          CBrush   brush;  
          brush.CreateStockObject(NULL_BRUSH);  
          CBrush   *   pOldbrush=pDC->SelectObject(&brush);  
          //draw   rect   in   here;  
          pDC->SelectObject(pOldbrush);  
  }  
  Top

9 楼Un1()回复于 2000-09-22 15:44:00 得分 8

LineTo  
  LineTo  
  LineTo  
  再LineTo搞定Top

10 楼ywbby(ywbby)回复于 2000-09-22 16:30:00 得分 0

void   DrawRectangle0(CDC   *pDC,   CRect   *pRect)  
  {  
  POINT   p[5];  
  p[0].x   =   pRect->left; p[0].y   =   pRect->top;  
  p[1].x   =   pRect->right; p[1].y   =   pRect->top;  
  p[2].x   =   pRect->right; p[2].y   =   pRect->bottom;  
  p[3].x   =   pRect->left; p[3].y   =   pRect->bottom;  
  p[4].x   =   pRect->left; p[4].y   =   pRect->top;  
  pDC->Polygon   (&p[0],   5);  
  }  
   
  void   DrawRectangle1(CDC   *pDC,   CRect   *pRect)  
  {  
          CBrush   brush,   *pOldBrush;  
          brush.CreateStockObject(NULL_BRUSH);  
          pOldBrush=pDC->SelectObject(&brush);  
  pDC->Rectangle(pRect);  
          pDC->SelectObject(pOldBrush);  
  }  
   
  void   DrawRectangle2(CDC   *pDC,   CRect   *pRect)  
  {  
  pDC->MoveTo(pRect->left,   pRect->top);  
  pDC->LineTo(pRect->right,pRect->top);  
  pDC->LineTo(pRect->right,pRect->bottom);  
  pDC->LineTo(pRect->left,   pRect->bottom);  
  pDC->LineTo(pRect->left,   pRect->top);  
  }  
   
  #define   TEST_COUNT     1000  
   
  void   CTestDrawView::OnDraw(CDC*   pDC)  
  {  
  CTestDrawDoc*   pDoc   =   GetDocument();  
  ASSERT_VALID(pDoc);  
  //   TODO:   add   draw   code   for   native   data   here  
  long   l[3][3];  
  int     i;  
  CRect   rect(1,1,400,400);  
   
  l[0][0]   =   GetTickCount();  
  for(i=0;i<TEST_COUNT;i++)  
  DrawRectangle0(pDC,   &rect);  
  l[0][1]   =   GetTickCount();  
   
  l[1][0]   =   GetTickCount();  
  for(i=0;i<TEST_COUNT;i++)  
  DrawRectangle1(pDC,   &rect);  
  l[1][1]   =   GetTickCount();  
   
  l[2][0]   =   GetTickCount();  
  for(i=0;i<TEST_COUNT;i++)  
  DrawRectangle2(pDC,   &rect);  
  l[2][1]   =   GetTickCount();  
   
  l[0][2]   =   l[0][1]   -   l[0][0];  
  l[1][2]   =   l[1][1]   -   l[1][0];  
  l[2][2]   =   l[2][1]   -   l[2][0];  
   
  CString   strTmp;  
  strTmp.Format("0,1,2方法分别耗时:%d,%d,%d",   l[0][2],l[1][2],   l[2][2]);  
  pDC->TextOut(1,   410,   strTmp);  
  }  
   
  结果是:1833,130,120  
  感谢各位的参与!!!  
  Top

11 楼Holly()回复于 2000-09-23 10:37:00 得分 0

你为何没有对我的方法评测:  
  void   DrawRectangle3(CDC   *pDC,   CRect   *pRect)  
  {  
  SelectObject(pDC->GetSafeHdc(),   (HBRUSH)GetStockObject(NULL_BRUSH));  
  pDC->Rectangle(pRect);  
  }  
  我估计这才是最快的!  
  Top

相关问题

  • 如何画透明的矩形或圆
  • 如何进行矩形的重画
  • 怎么画矩形
  • 如何在屏幕上画虚线矩形框?在线等候
  • 如何在桌面上画图(矩形,椭圆,圆)?(二)
  • 如何在基本对话框上画矩形并填色
  • 如何更改CRectTracker类画的矩形的颜色?
  • 我想在电脑屏幕上画矩形框,如何实现。
  • gobject.DrawRectangle(p,1,1,6,6);画了一个矩形,如何删除呢〉
  • 如何画个四角为弧行的矩形?

关键词

  • 矩形
  • top
  • code
  • null
  • prect
  • pdc
  • brush
  • poldbrush
  • selectobject
  • pdoc

得分解答快速导航

  • 帖主:ywbby
  • Areslee
  • Holly
  • fd
  • Eagle_118
  • Un1

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo