我用单文档做了个程序,用于画直线、矩形等,可以对其保存、打开!用了CPtrList类链表保存每个图形,画图、保存功能正常,但是第一次运行程序打开时,虽然正确显示了打开的内容,但是接着没反应了,象似死机一样!但是如果我任意画一个图形,然后在打开,则一切正常!我没有重写OnOpen函数,这重写了DeleteContents和Serialize函数,不知道是什么原因!
void CDrawView::OnDraw(CDC* pDC)
{
CDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); CBrush m_brush;
CPen *oldpen;
CMyGraph *g;
int w;
COLORREF col;
m_brush.CreateStockObject (NULL_BRUSH);
pDC->SelectObject (&m_brush);
POSITION p;
p=pDoc->m_data.GetHeadPosition ();
while(p)
{
CPen m_pen;
g=(CMyGraph *)pDoc->m_data.GetNext (p);
w=g->m_width ;
col=g->m_color ;
m_pen.CreatePen (PS_SOLID,w,col);
oldpen=pDC->SelectObject (&m_pen);
switch(g->m_type )
{
case 0:
pDC->MoveTo (g->m_sp );
pDC->LineTo (g->m_ep );
break;
case 1:
pDC->Rectangle (g->m_sp .x ,g->m_sp.y ,g->m_ep.x ,g->m_ep.y );
break;
case 2:
pDC->Ellipse (g->m_sp .x ,g->m_sp.y ,g->m_ep.x ,g->m_ep.y );
break;
}
pDC->SelectObject(oldpen);
}}
void CDrawView::OnDraw(CDC* pDC)
{
CDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); CBrush m_brush;
CPen *oldpen;
CMyGraph *g;
int w;
COLORREF col;
m_brush.CreateStockObject (NULL_BRUSH);
pDC->SelectObject (&m_brush);
POSITION p;
p=pDoc->m_data.GetHeadPosition ();
while(p)
{
CPen m_pen;
g=(CMyGraph *)pDoc->m_data.GetNext (p);
w=g->m_width ;
col=g->m_color ;
m_pen.CreatePen (PS_SOLID,w,col);
oldpen=pDC->SelectObject (&m_pen);
switch(g->m_type )
{
case 0:
pDC->MoveTo (g->m_sp );
pDC->LineTo (g->m_ep );
break;
case 1:
pDC->Rectangle (g->m_sp .x ,g->m_sp.y ,g->m_ep.x ,g->m_ep.y );
break;
case 2:
pDC->Ellipse (g->m_sp .x ,g->m_sp.y ,g->m_ep.x ,g->m_ep.y );
break;
}
pDC->SelectObject(oldpen);
}}
解决方案 »
- 如何判断一个edit是否含有某个字符
- 简单的问题,真的简单的问题
- 打印程序中没有用到CPrintInfo类,如何控制打印页数呢?
- 如何从没有头文件的dll中获取其输出的函数原型,包括函数参数,有什么工具吗
- 大家好 怎样替换制定.dll文件中的函数 使之先执行新函数然后再执行.dll 中的 一定给分哪怕只有一人
- 请问如何制作XP风格的窗口?那里能找到SAMPLE?
- 关于RUNTIME_CLASS()函数的问题。
- 紧急求救!!如何在CFormView中使用键盘输入(OnChar函数)?请详告,谢谢。
- 怎样开发类似VB直线控件的东东?
- 刚开始学mfc 用ado连接sql数据库执行查询语句时不成功 求助!QAQ
- 新手请教:为什么socket函数无法使用?
- X = 1+ ~ X 什么意思呢?
{
if (ar.IsStoring())
{
int num;
POSITION p;
CMyGraph *g;
num=m_data.GetCount ();
ar<<num;
p=m_data.GetHeadPosition ();
while(p)
{
g=(CMyGraph *)m_data.GetNext (p);
g->Serialize (ar);
}
}
else
{
int num;
int i;
ar>>num;
for(i=0;i<num;i++)
{
CMyGraph *g;
g=new CMyGraph;
g->Serialize (ar);
m_data.AddTail (g);
}
}
}
void CMyGraph::Serialize(CArchive &ar)
{
CObject::Serialize( ar );
if (ar.IsStoring())
{
ar<<m_type<<m_width<<m_sp.x <<m_sp.y <<m_ep.x <<m_ep.y <<m_color;
}
else
{
ar>>m_type>>m_width>>m_sp.x >>m_sp.y >>m_ep.x >>m_ep.y >>m_color;
}
}
void CDrawDoc::DeleteContents()
{
int num;
num=m_data.GetCount ();
for(;num>=1;num--)
{
delete (CMyGraph *)m_data.GetTail ();
m_data.RemoveTail ();
}
m_data.RemoveAll ();
CDocument::DeleteContents();
}有时候还会它自己莫名其妙画出直线来,可我的画图代码却没执行,
这里感觉都正常的,你查查其它地方的影响吧