📄 cg50view.cpp
字号:
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 + -