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

📄 p_rview.cpp

📁 此为地球物理中的
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			 SetCapture();     //捕捉鼠标
			 if(m_TotleObj==0)
			 {
			      dc.MoveTo(rc.left+10,point.y);
			      dc.LineTo(point.x,point.y);           //重画移动到点的直线
                  
                 // if(m_RgnPoint!=NULL)
				//	  delete m_RgnPoint;
				  m_RgnPoint=new CPoint[2];
                  g_Terrain =new Terrain[100];

                  int g=sizeof(Terrain);

				  m_RgnPoint[0]=CPoint(rc.left+10,point.y);
                  m_RgnPoint[1]=CPoint(point);
                  
				  g_Terrain[g_SumTer]=Terrain(CPoint(rc.left+10,point.y),point);//给地形类赋值
				  g_SumTer++;
				  //Terrain p(CPoint(rc.left+10,point.y),point);
                  //g_Terrain[0]=p;

                  m_TotleObj++;
                  
				  m_PointOrign= point;//得出画地形时的原始点
                  m_PointOld  = point;//得到画地形时的前一点

				  g_HaveTerrain=true;
			 }
			 else
			 {    
                  dc.MoveTo(m_PointOrign); 
			      dc.LineTo(m_PointOld);  //重画移动到点的直线
                  

				  m_TotleObj++;

                  m_RgnPoint=(CPoint*)realloc(m_RgnPoint,sizeof(CPoint)*(m_TotleObj+1));//重新分配空间
                  
				 
				 // g_Terrain =(Terrain*)realloc(g_Terrain, sizeof(Terrain)*(++g_SumTer));//重新分配空间
                  //同时地形总个数自增
				 
				  g_Terrain[g_SumTer]=Terrain(m_PointOrign,point);//给地形类赋值
                  g_SumTer++;

				  m_RgnPoint[m_TotleObj]=point;

				  m_PointOrign= point;//得出画地形时的原始点
                  m_PointOld  = point;//得到画地形时的前一点
			 }

		
		 CBrush b;

		 b.CreateSolidBrush(RGB(0,255,0)); // 创建填充色画刷 
         
		 CBrush* pOldBrush;

		 pOldBrush=(CBrush*)dc.SelectObject(&b);//选择对象进DC


         dc.SelectObject(pOldBrush);//恢复系统画刷

		 b.DeleteObject();//删除临时画刷

		break;
	
	}

	}
	dc.SelectObject(pOldPen);    //恢复画笔

	CView::OnLButtonDown(nFlags, point);
}

void CP_RView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	m_bLdown=false;   //鼠标按下为假
   
	ReleaseCapture();  //释放鼠标

	CView::OnLButtonUp(nFlags, point);
}

void CP_RView::OnMouseMove(UINT nFlags, CPoint point) 
{   
//	m_OldPoint=point;//为了画第一道线而设

    CClientDC dc(this);

	CString str;  //零时字符串

	OnPrepareDC(&dc);
	
	CMainFrame * pFrame = (CMainFrame *) AfxGetApp()->m_pMainWnd;//得到主框架指针

	CStatusBar * pStatus = (CStatusBar *) &pFrame->m_wndStatusBar;//得到状态栏指针

    CPoint m_ptMouse;//记录当前点

	m_ptMouse = point;

	str.Format ("坐标 X=%i pixel, Y=%i pixel", m_ptMouse.x, m_ptMouse.y);
	
	pStatus->SetPaneText(0, str);//显示坐标
//以上程序是为了在状态栏中显示坐标
		  CRect rc;
          GetClientRect(&rc);//得到视图区大小

   switch(NOWACTION)
   {
   case NULLACTION:
	   {
		if(m_bLdown==true)
            if(OnPoint)
			{
                InvalidateRect(CRect((int)g_fEXAxis-6,(int)g_fEYAxis-6, 
					           (int)g_fEXAxis+76,(int)g_fEYAxis+26),true);//重画放炮点区域
			    CRect rc;
                GetClientRect(&rc);

				if(point.x<rc.left+10)
                    point.x=rc.left+10;
				if(point.y<rc.top+10)
                    point.y=rc.top+10;
				if(point.x>rc.right-10)
                    point.x=rc.right-10;
				if(point.y>rc.bottom-10)
                    point.y=rc.bottom-10;

				g_fEXAxis=(float)point.x;
				g_fEYAxis=(float)point.y;
			}
		break;
	   }
   	 case DRAWTERRAIN:
		 {
			   dc.SetROP2(R2_NOT);//选择反色的绘画模式   
		       if(m_TotleObj==0)
			   {  
				  if(m_OldPoint!=point)
				  {

				  dc.MoveTo(rc.left+10,m_OldPoint.y); 
			      dc.LineTo(m_OldPoint.x,m_OldPoint.y);   //擦除原来的直线
			      dc.MoveTo(rc.left+10,point.y);
			      dc.LineTo(point.x,point.y);           //重画移动到点的直线
                  m_OldPoint  = point;
				  }
			   }
            //dc.SelectStockObject(NULL_BRUSH);
	        //dc.SetROP2(R2_NOT);	//选择反色的绘画模式    
		        //如果鼠标的现在移动点与上一个点不相同
                //将上一个顶点到上一个移动点的直线擦除,绘制从上一个顶点到移动点的直线
			   else
			   {  
				  if(m_PointOld!=point)
				  {
                     dc.MoveTo(m_PointOrign); 
			         dc.LineTo(m_PointOld);   //擦除原来的直线 ;

					 dc.MoveTo(m_PointOrign); 
			         dc.LineTo(point);   //重画移动到点的直线

                     m_PointOld=point;  
				  }
			   }
			
		 }
			  
		break;
		
   }
	CView::OnMouseMove(nFlags, point);
}
void CP_RView::OnButtonErase() 
{

	Invalidate(true);//搽除所有点

	NOWACTION = NULLACTION; //当前动作置为空
    

	m_hMouseCursor=LoadCursor(NULL,IDC_ARROW);//恢复系统鼠标指针

    ::SetCursor(m_hMouseCursor);
}

BOOL CP_RView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{

	ASSERT(m_hMouseCursor!=NULL);
	::SetCursor(m_hMouseCursor);
	return TRUE;
}

void CP_RView::OnContextMenu(CWnd* pWnd, CPoint point) 
{   
	if(NOWACTION != NULLACTION)
		return;
    CMenu menu;
	menu.LoadMenu(IDR_MAINFRAME); //这个ID对应你在资源中创建的一个菜单
	CMenu *submenu=menu.GetSubMenu(3); //对应你自定义菜单的第一列
	submenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);//显示菜单
	
}
void CP_RView::OnFileOpen() 
{
	Invalidate(true);
    //Invalidate(true);
	//g_Array.
	//g_Array.SaveArray(false);
}

void CP_RView::OnFileSave() 
{

}

void CP_RView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
		
}
void CP_RView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
    CClientDC dc(this);
	CPen pen(0,3,RGB(4,36,255)); //创建画笔
	CPen* pOldPen=dc.SelectObject(&pen);//选入画笔
   	
	CRect rc;
    GetClientRect(&rc);//得到视图区大小

   switch(NOWACTION)
   {
      case DRAWTERRAIN:
		  {
			dc.MoveTo(m_PointOrign); 
			dc.LineTo(point);   //擦除原来的直线

            //g_Terrain =(Terrain*)realloc(g_Terrain, sizeof(Terrain)*(++g_SumTer));//重新分配空间
                  //同时地形总个数自增
			
			g_Terrain[g_SumTer]=Terrain(m_PointOrign,point);//给地形类赋值
            g_SumTer++;

			m_TotleObj++;
			
		    m_RgnPoint=(CPoint*)realloc(m_RgnPoint,sizeof(CPoint)*(m_TotleObj+4));//重新分配空间
                  
			m_RgnPoint[m_TotleObj]=point;

            dc.MoveTo(point); 
			dc.LineTo(rc.right-10,point.y);   //擦除原来的直线
            
		//	g_Terrain =(Terrain*)realloc(g_Terrain, sizeof(Terrain)*(++g_SumTer));//重新分配空间
                  //同时地形总个数自增
		
			g_Terrain[g_SumTer]=Terrain(point,CPoint(rc.right-10,point.y));	//给地形类赋值
            g_SumTer++;

			m_TotleObj++;
                  
			m_RgnPoint[m_TotleObj]=CPoint(rc.right-10,point.y);
			m_RgnPoint[m_TotleObj+1]=CPoint(rc.right-10,rc.bottom-10);
			m_RgnPoint[m_TotleObj+2]=CPoint(rc.left+10,rc.bottom-10);	//	

			m_Rgn.CreatePolygonRgn(m_RgnPoint,m_TotleObj+3,WINDING);

			CBrush pointKnob(::GetSysColor(COLOR_3DSHADOW));
	//	
	        dc.FillRgn(&m_Rgn, &pointKnob);

	        pointKnob.DeleteObject();

	        NOWACTION = NULLACTION; //当前动作置为空
    
	        m_hMouseCursor=LoadCursor(NULL,IDC_ARROW);//恢复系统鼠标指针

           Invalidate(true);

          ::SetCursor(m_hMouseCursor);
		    
           RayBegin();
		  }
		  break;
   }   
    dc.SelectObject(pOldPen);    //恢复画笔  
	
	CView::OnLButtonDblClk(nFlags, point);
}
void CP_RView::Center(CPoint *point,int totle,int *xp,int *yp)
{  
   int sumx=0,sumy=0;
   for(int i=0;i<totle;i++)
   {
       sumx+=point[i].x;
       sumy+=point[i].y;
   }
   sumx+=point[i-1].x;
   sumy+=point[i-1].y;
   sumx+=point[i-2].x;
   sumy+=point[i-2].y;
   sumx+=point[i-1].x;
   sumy+=point[i-1].y;
   sumx+=point[i-2].x;
   sumy+=point[i-2].y;
   *xp=int((float)sumx/(totle+4));
   *yp=int((float)sumy/(totle+4));
} 
void CP_RView::RayBegin()
{
   //g_fEXAxis;//炮点x坐标
  // g_fEYAxis;//炮点y坐标
   CRect rc;
   GetClientRect(&rc);//得到视图区大小
   /*
   CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();

     // 0 行 1 列对应于右面的CVPNView
   int row = 0, col = 1;

         // 得到分割条的指针
   CSplitterWnd* pSplitter = &pMainWnd->m_wndSplitter;

   CView* pOldActiveView = (CView* )pSplitter->GetPane(row,col);

   CClientDC dc(this);

   pOldActiveView->OnDraw(&dc);
  */

}

⌨️ 快捷键说明

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