如何画一个矩形???
我要画一个矩形,但画矩形的函数
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




