如何画一个矩形??? SelectObject((HBRUSH)GetStockObject(NULL_BRUSH)); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用 CDC::Draw3DRect fd朋友说的Draw3DRect能画一个矩形而不填充吗?能否详细解释一下 ? 是,看msdn 很简单 Holly,用你的方法好像不怎么行,能不能给个例子。email:[email protected] 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);} 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);} LineToLineToLineTo再LineTo搞定 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 1000void 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感谢各位的参与!!! 你为何没有对我的方法评测:void DrawRectangle3(CDC *pDC, CRect *pRect){SelectObject(pDC->GetSafeHdc(), (HBRUSH)GetStockObject(NULL_BRUSH));pDC->Rectangle(pRect);}我估计这才是最快的! 弱问一个访问的问题 如何将当前显示的窗口设置成不显示 100分 只求了解 关于CtreeCtrl 问一个关于配置文件的问题 差不多发了十帖了,都没有得到结果的问题。 还想问关于字符串的分隔后赋值的问题 请问怎么接收邮件? 怎样传递给ocx控件一个variant数组??是用safearray吗? 再问通过Jet:UPDATE [表名] SET [字段名] = '|' 不行,为什么 new操作符被MFC…… !!!!讨论OICQ的实现方法
能否详细解释一下 ?
email:
[email protected]
{
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);
}
{
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);
}
LineTo
LineTo
再LineTo搞定
{
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 1000void 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
感谢各位的参与!!!
void DrawRectangle3(CDC *pDC, CRect *pRect)
{
SelectObject(pDC->GetSafeHdc(), (HBRUSH)GetStockObject(NULL_BRUSH));
pDC->Rectangle(pRect);
}
我估计这才是最快的!