⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cg50view.cpp

📁 本系统是一个基于Windows平台
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		else
		{
			p = obj;
			while(p->next != end) p = p->next;
			p->next = NULL;
			delete end;
			end = p;
		}
		step = 0;
	}
	
	CBezierDlg dlg;
	dlg.m_Num = 4;
	if(dlg.DoModal() != IDOK) return ;
	
	if(!obj)
	{
		obj = new DrawObj;
		end = obj;
	}
	else
	{
		end->next = new DrawObj;
		end = end->next;
	}
	end->next = NULL;
	end->type = OBJ_BEZIER;
	state = STT_BEZIER;
	end->num = dlg.m_Num;
	
}

void CCg50View::OnDrawPubline() 
{
	DrawObj *p;
	bEditUndo = true;	
	dib.CaptureDIB(this);
	after=1;
	if(state != STT_SELECT)
	{
		if(obj == end)
		{
			delete end;
			obj = end = NULL;
		}
		else
		{
			p = obj;
			while(p->next != end) p = p->next;
			p->next = NULL;
			delete end;
			end = p;
		}
		step = 0;
	}
	
	if(!obj)
	{
		obj = new DrawObj;
		end = obj;
	}
	else
	{
		end->next = new DrawObj;
		end = end->next;
	}
	end->next = NULL;
	end->type = OBJ_PUBLINE;
	state = STT_PUBLINE;
	
}

void CCg50View::OnDrawRetangle() 
{
	DrawObj *p;
	bEditUndo = true;	
	dib.CaptureDIB(this);
	after=1;
	if(state != STT_SELECT)
	{
		if(obj == end)
		{
			delete end;
			obj = end = NULL;
		}
		else
		{
			p = obj;
			while(p->next != end) p = p->next;
			p->next = NULL;
			delete end;
			end = p;
		}
		step = 0;
	}
	
	CRctglDlg dlg;
	dlg.m_dens = 5;
	if(dlg.DoModal() != IDOK) return ;
	
	if(!obj)
	{
		obj = new DrawObj;
		end = obj;
	}
	else
	{
		end->next = new DrawObj;
		end = end->next;
	}
	end->next = NULL;
	end->type = OBJ_RETANGLE;
	end->num = dlg.m_dens;
	state = STT_RETANGLE;
	
}

void CCg50View::OnDrawRotate() 
{
	DrawObj *p;
	bEditUndo = true;	

	if(state != STT_SELECT)
	{
		if(obj == end)
		{
			delete end;
			obj = end = NULL;
		}
		else
		{
			p = obj;
			while(p->next != end) p = p->next;
			p->next = NULL;
			delete end;
			end = p;
		}
		step = 0;
	}

	bDrawRotate = !bDrawRotate;
    if(bDrawRotate)	
	{dib.CaptureDIB(this);
	after=1;}
	CCg50Doc *doc = GetDocument();
	doc->UpdateAllViews(NULL);
	
}

void CCg50View::OnDrawPalette() 
{
	DrawObj *p;
	bEditUndo = true;	
	
	if(state != STT_SELECT)
	{
		if(obj == end)
		{
			delete end;
			obj = end = NULL;
		}
		else
		{
			p = obj;
			while(p->next != end) p = p->next;
			p->next = NULL;
			delete end;
			end = p;
		}
		step = 0;
	}
	
	bDrawPalette = !bDrawPalette;
     if(bDrawPalette)
	 {dib.CaptureDIB(this);
	 after=1;}
	CCg50Doc *doc = GetDocument();
	doc->UpdateAllViews(NULL);
	
}

void CCg50View::OnDrawHouse() 
{
	DrawObj *p;
	bEditUndo = true;	
	
	if(state != STT_SELECT)
	{
		if(obj == end)
		{
			delete end;
			obj = end = NULL;
		}
		else
		{
			p = obj;
			while(p->next != end) p = p->next;
			p->next = NULL;
			delete end;
			end = p;
		}
		step = 0;
	}

	bDrawHouse = !bDrawHouse;

   if(bDrawHouse)
   {
	   dib.CaptureDIB(this);
	after=1;
   	CHouseDlg dlg;
		dlg.m_x = Vx; dlg.m_y = Vy; dlg.m_z = Vz;
		if(dlg.DoModal() != IDOK) return ;
		Vx = dlg.m_x; Vy = dlg.m_y; Vz = dlg.m_z;
   }

	CCg50Doc *doc = GetDocument();
	doc->UpdateAllViews(NULL);
	
}

void CCg50View::OnDrawClock() 
{
	DrawObj *p;
	bEditUndo = true;	
	
	if(state != STT_SELECT)
	{
		if(obj == end)
		{
			delete end;
			obj = end = NULL;
		}
		else
		{
			p = obj;
			while(p->next != end) p = p->next;
			p->next = NULL;
			delete end;
			end = p;
		}
		step = 0;
	}

	bDrawClock = !bDrawClock;

	if(bDrawClock) {SetTimer(1, 400, NULL);
	dib.CaptureDIB(this);
	after=1;}
   else
   {
   	KillTimer(1);
		TimeCounter = 0;
   }
   
	CCg50Doc *doc = GetDocument();
	doc->UpdateAllViews(NULL);
	
}

void CCg50View::OnUpdateDrawRotate(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(bDrawRotate);
}

void CCg50View::OnUpdateDrawPalette(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(bDrawPalette);	
}

void CCg50View::OnUpdateDrawHouse(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(bDrawHouse);	
}

void CCg50View::OnUpdateDrawClock(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(bDrawClock);	
}
void CCg50View::OnUpdateDrawPhong(CCmdUI* pCmdUI) 
{
		pCmdUI->SetCheck(bDrawPhong);
}
void CCg50View::OnUpdateDrawFree(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(bDrawFree);
}

void CCg50View::OnMouseDelete() 
{
	// TODO: Add your command handler code here
	DrawObj *p;
	//激活undo和undeleteall菜单项
	bEditUndo = true;	
	bMouseUndeleteall = true;
	//如上次选择绘图但未完成工作,去掉链表末尾无用结点
	if(state != STT_SELECT)
	{
		if(obj == end)
		{
			delete end;
			obj = end = NULL;
		}
		else
		{
			p = obj;
			while(p->next != end) p = p->next;
			p->next = NULL;
			delete end;
			end = p;
		}
		step = 0;
	}

	//显示delete对应对话框
	CDeleteDialog dlg;
	if(dlg.DoModal() != IDOK) return ;

	select = dlg.m_select;
	
	//把此次绘图动作作为一个新结点,加入链表末尾
	if(!obj)
	{
		obj = new DrawObj;
		end = obj;
	}
	else
	{
		end->next = new DrawObj;
		end = end->next;
	}
	end->next = NULL;
	end->type = OBJ_DELETE;
	state = STT_DELETE;
}


void CCg50View::OnMouseUndeleteall() 
{
	// TODO: Add your command handler code here
	DrawObj *p, *q;
	//从头访问链表,去掉链表中标志为删除的结点
	p = obj;
	while (p->type == OBJ_DELETE)
	{
		obj = p->next;
		delete p;
		p = obj;
	}
	if ((p) && (p != end))
	{
		while (p->next != end)
		{
			if (p->next->type == OBJ_DELETE)
			{
				q = p->next;
				p->next = q->next;
				delete(q);
			}
			else p = p->next;
		}
	}
	if (end->type == OBJ_DELETE)
	{
		end = p;
		delete(p->next);
		end->next = NULL;
	}
	state = STT_SELECT;
	//使undeleteall菜单项变为不可用
	bMouseUndeleteall = false; 
	//重绘
	CCg50Doc *doc = GetDocument();
	doc->UpdateAllViews(NULL);	
}

void CCg50View::OnEditUndo() 
{
	// TODO: Add your command handler code here
	DrawObj *p;
	p = obj;
	//把末尾结点存入ObjTemp
	ObjTemp = end;
	//去掉末尾结点
	if (p->next)
	{
		while (p->next != end)	p = p->next;
		end = p;
		end->next = NULL;
	}
	else obj = end = NULL;
	state = STT_SELECT;
	//激活redo项,使undo不可用
	bEditRedo = true;
	bEditUndo = false;
	//重绘
	CCg50Doc *doc = GetDocument();
	doc->UpdateAllViews(NULL);	
}

void CCg50View::OnEditRedo() 
{
	// TODO: Add your command handler code here
	//找到尾结点位置,把ObjTemp接入尾结点之后,
	//作为新的尾结点

	if (!obj)
	{
		obj = end = ObjTemp;
		end->next = NULL;
	}
	else
	{
		end->next = ObjTemp;
		end = ObjTemp;
		end->next = NULL;
	}
	//激活undo项,使redo不可用
	bEditUndo = true;
	bEditRedo = false;
	state = STT_SELECT;
	//重绘
	CCg50Doc *doc = GetDocument();
	doc->UpdateAllViews(NULL);	
}

void CCg50View::OnUpdateEditRedo(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	//当bEditRedo为真时,激活Edit->Redo菜单项
	pCmdUI->Enable(bEditRedo);
}

void CCg50View::OnUpdateEditUndo(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(bEditUndo);
}

void CCg50View::OnUpdateMouseUndeleteall(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(bMouseUndeleteall);
}

void CCg50View::OnUpdateMouseDelete(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(bMouseDelete);
}

void CCg50View::OnDrawPhong()
{
DrawObj *p;
	bEditUndo = true;	
	
	if(state != STT_SELECT)
	{
		if(obj == end)
		{
			delete end;
			obj = end = NULL;
		}
		else
		{
			p = obj;
			while(p->next != end) p = p->next;
			p->next = NULL;
			delete end;
			end = p;
		}
		step = 0;
	}
	if (!bDrawPhong)
	{CPhong dlg;
	dlg.m_width = 500;
	dlg.m_length = 500;
	if(dlg.DoModal() != IDOK) return;
    }
	bDrawPhong = !bDrawPhong;
	if (bDrawPhong)
	{dib.CaptureDIB(this);
	after=1;
	}
	CCg50Doc *doc = GetDocument();
	doc->UpdateAllViews(NULL);
}


void CCg50View::OnPalette() 
{
CHOOSECOLOR cc;
    cc.hwndOwner=this->m_hWnd;
    cc.Flags=CC_ANYCOLOR;
    cc.lStructSize=sizeof(CHOOSECOLOR);
	dib.CaptureDIB(this);
    if (ChooseColor(&cc))
    {
	 pen=CreatePen(PS_SOLID,1,cc.rgbResult);
	}
    after=1;
	InvalidateRect(NULL,0);
}

void CCg50View::OnDrawFree() 
{
DrawObj *p;
	bEditUndo = true;	
	
	if(state != STT_SELECT)
	{
		if(obj == end)
		{
			delete end;
			obj = end = NULL;
		}
		else
		{
			p = obj;
			while(p->next != end) p = p->next;
			p->next = NULL;
			delete end;
			end = p;
		}
		step = 0;
	}
	
	bDrawFree = !bDrawFree;
	
    InvalidateRect(NULL,0);
}


void CCg50View::OnLButtonUp(UINT nFlags, CPoint point) 
{
bdraw=false;
newMousePoint.x=-1;
newMousePoint.y=-1;	
CView::OnLButtonUp(nFlags, point);
}

BOOL CCg50View::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
if (bdraw) 
{CWinApp *pApp=AfxGetApp();
HICON hIconBang=pApp->LoadCursor(IDC_CURSOR2);
SetCursor(hIconBang);
return true;
}
return CView::OnSetCursor(pWnd, nHitTest, message);
}

void CCg50View::OnContextMenu(CWnd* pWnd, CPoint point) 
{
CPoint local = point;
  ScreenToClient(&local);
  CMenu menu;
  if (menu.LoadMenu(IDR_MAINFRAME))
  { CMenu* pPopup = menu.GetSubMenu(3);
    ASSERT(pPopup != NULL);
    if(pPopup!=NULL)
	{ 
	if (bDrawRotate)	
		pPopup->CheckMenuItem(ID_DRAW_ROTATE,MF_CHECKED);
	else 
       	pPopup->CheckMenuItem(ID_DRAW_ROTATE,MF_UNCHECKED);
    if (bDrawPalette)	
		pPopup->CheckMenuItem(ID_DRAW_PALETTE,MF_CHECKED);
	else 
       	pPopup->CheckMenuItem(ID_DRAW_PALETTE,MF_UNCHECKED);
	if (bDrawHouse)	
		pPopup->CheckMenuItem(ID_DRAW_HOUSE,MF_CHECKED);
	else 
       	pPopup->CheckMenuItem(ID_DRAW_HOUSE,MF_UNCHECKED);
	if (bDrawClock)	
		pPopup->CheckMenuItem(ID_DRAW_CLOCK,MF_CHECKED);
	else 
       	pPopup->CheckMenuItem(ID_DRAW_CLOCK,MF_UNCHECKED);
	if (bDrawPhong)	
		pPopup->CheckMenuItem(ID_DRAW_PHONG,MF_CHECKED);
	else 
       	pPopup->CheckMenuItem(ID_DRAW_PHONG,MF_UNCHECKED);
	if (bDrawFree)	
		pPopup->CheckMenuItem(ID_DRAW_FREE,MF_CHECKED);
	else 
       	pPopup->CheckMenuItem(ID_DRAW_FREE,MF_UNCHECKED);
		
      pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
       point.x, point.y,this);
	}
  }
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -