急!!请教如何在FormView下绘图!

Ycaptain 2003-01-19 11:39:28
我在FormView下自己写一个Draw()函数,通过CDC* pDC= GetDC();
再使用pDC->Textout()函数,pDC->SetPixel( 10*i, y, MYCOLOR);也无法绘出图形。为什么??而把自己的绘图代码加在OnDraw()函数中就可以画出来。急急急!!
...全文
57 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ycaptain 2003-01-19
  • 打赏
  • 举报
回复
我的View是从FormView派生出来的,且在下面函数中有这些代码:因为要打印。
void CFileView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
//设置映射模式。
CSize sizeTotal( m_rectPrint.Width(),m_rectPrint.Height() );
CSize sizePage( sizeTotal.cx / 2,sizeTotal.cy / 2);
CSize sizeLine( sizeTotal.cx / 100, sizeTotal.cy / 100 );
SetScrollSizes(MM_TWIPS,sizeTotal,sizePage,sizeLine);


}
Billy_Chen28 2003-01-19
  • 打赏
  • 举报
回复
void CTest4View::OnDraw(CDC* pDC)
{
Draw(pDC);

}

void CTest4View::Draw(CDC*pDC)
{
pDC->TextOut(0,0,"sdfsd");

Ycaptain 2003-01-19
  • 打赏
  • 举报
回复
刚刚试了这个方法,还是不行;(
我怎么调Draw(CDC *pDC)都无法画出来;(

hnyyy 2003-01-19
  • 打赏
  • 举报
回复
这是因为又被刷新了的原因,如果不被刷新,它绝对还在的。
(当然你不能画在其它控件挡住的位置)

你如果要使它总是存在的话,可以这样:
void CTest4View::OnDraw(CDC* pDC)
{
Draw(pDC);//可以考虑直接传递参数pDC

}

void CTest4View::Draw(CDC*pDC)
{
pDC->TextOut(0,0,"aaaaaaaa");

}




Ycaptain 2003-01-19
  • 打赏
  • 举报
回复
我不是这个意思,我是说
void CTest4View::Draw()
{
CDC* pDC1 = GetDC() ;

pDC1->TextOut(0,0,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");

}
Draw()函数是自己的绘图代码,画不出来,在OnDraw()里当然可以画出来啦。
xt_jat 2003-01-19
  • 打赏
  • 举报
回复
void CTest4View::OnDraw(CDC* pDC)
{
CDC* pDC1 = GetDC() ;

pDC1->TextOut(0,0,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");

}

上面的代码是可以看到效果的,你那个不行,我觉得可能是你的Draw()没被调用结果
despider 2003-01-19
  • 打赏
  • 举报
回复
up
hnyyy 2003-01-19
  • 打赏
  • 举报
回复
最后一句是
pDC->SelectObject(pOldPen);
hnyyy 2003-01-19
  • 打赏
  • 举报
回复
肯定不行了,
void CFileView::Draw(CDC *pDC)
{

double r1,r2,r3,r4,r5,r6,r7;
Invalidate();//这里怎么能有呢?
....
}
好乱的代码!



大致应该这样:

void CFileView::OnDraw(CDC* pDC)
{
Draw(pDC);

}

void CFileView::Draw(CDC *pDC)
{

double r1,r2,r3,r4,r5,r6,r7;
/*****************绘图代码*******************************/
int i,j;
CString String;
//设定打印区域。
pDC->Rectangle(m_rectPrint + CRect(0,0,-10,10));
pDC->SetTextColor(MYCOLOR);
CPen Pen(1,1,MYCOLOR);

CPen* pOldPen = pDC->SelectObject(&Pen);
j = m_rectPrint.Height() /1440;

int y;
y = -5000;
…………以下是一些绘图代码,只是用了Textout,和SetPixel

pDC->SelectObject(&pOldPen);
}

Ycaptain 2003-01-19
  • 打赏
  • 举报
回复
下面的是源代码:
void CFileView::Draw(CDC *pDC)
{

double r1,r2,r3,r4,r5,r6,r7;
Invalidate();
/*****************绘图代码*******************************/
int i,j;
CString String;
//设定打印区域。
pDC->Rectangle(m_rectPrint + CRect(0,0,-10,10));
pDC->SetTextColor(MYCOLOR);
CPen Pen(1,1,MYCOLOR);

pDC->SelectObject(&Pen);
j = m_rectPrint.Height() /1440;

int y;
y = -5000;
…………以下是一些绘图代码,只是用了Textout,和SetPixel
}


void CFileView::OnDraw(CDC* pDC)
{
// TODO: Add your specialized code here and/or call the base class


/**************Draw code are here*******************************/

double r1,r2,r3,r4,r5,r6,r7;

int i,j;
CString String;
CFileDoc *pDoc = GetDocument();


pDC->Rectangle(m_rectPrint + CRect(0,0,-10,10));
pDC->SetTextColor(MYCOLOR);
CPen Pen(1,1,MYCOLOR);

pDC->SelectObject(&Pen);
j = m_rectPrint.Height() /1440;

…………以下是一些绘图代码,只是用了Textout,和SetPixel
}
请各位高手看看到底是什么问题。
hnyyy 2003-01-19
  • 打赏
  • 举报
回复
兄弟,你说可以发源码,为何不发给我看看呢?

你确认Draw(...) 执行了吗?
改为MM_TEXT,并使用
Invalidate();
UpdateWindow();
后还不行?
Ycaptain 2003-01-19
  • 打赏
  • 举报
回复
我的是FormView,映射模式是MM_TWIPS,怎么用OnPaint()?
GoogleGeek 2003-01-19
  • 打赏
  • 举报
回复
你在OnPaint()里面响应就行了
-------------------------------------
Ycaptain 2003-01-19
  • 打赏
  • 举报
回复
试试这样,在我的主机上工作正常:
void CMyView::OnDraw(CDC* pDC)
{
Draw();

}

void CMyView::Draw()
{
CDC* pDC = GetDC();
pDC->TextOut(0,0,"sdfsd");
}


在我这里不行啊,你的view是从那个派生出来的,而已我的view还设了打印的映射模式啊。
despider 2003-01-19
  • 打赏
  • 举报
回复
列位大虾, 不通过OnDraw画为什么不行?
watalou 2003-01-19
  • 打赏
  • 举报
回复
试试这样,在我的主机上工作正常:
void CMyView::OnDraw(CDC* pDC)
{
Draw();

}

void CMyView::Draw()
{
CDC* pDC = GetDC();
pDC->TextOut(0,0,"sdfsd");
}
Ycaptain 2003-01-19
  • 打赏
  • 举报
回复
该过了,也不行,
To:snollow

不信我发的源程序给你自己看看。帮我查查也好:)
hnyyy 2003-01-19
  • 打赏
  • 举报
回复
将MM_TWIPS改为MM_TEXT试试。
snollow 2003-01-19
  • 打赏
  • 举报
回复
那怎么可能列!!
你重新再建立一个看看
我一直是这么画的
Ycaptain 2003-01-19
  • 打赏
  • 举报
回复
Re:cg1120
void CTest4View::OnDraw(CDC* pDC)
{
Draw(pDC);

}

void CTest4View::Draw(CDC*pDC)
{
pDC->TextOut(0,0,"sdfsd");
}
我就是这样用也不行啊~~

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧