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

📄 htuview.cpp

📁 这是一个能简单处理测量里面导线网平差的程序
💻 CPP
字号:
// HtuView.cpp : implementation file
//

#include "stdafx.h"
#include "demo_devstudio.h"
#include "HtuView.h"
#include "afxpriv.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CHtuView

IMPLEMENT_DYNCREATE(CHtuView, CZoomView)

CHtuView::CHtuView()
{
	m_myljb=NULL;
}

CHtuView::~CHtuView()
{m_myljb=NULL;
}


BEGIN_MESSAGE_MAP(CHtuView, CZoomView)
	//{{AFX_MSG_MAP(CHtuView)
	ON_WM_CONTEXTMENU()
	ON_WM_ERASEBKGND()
	ON_COMMAND(ID_FANGDA, OnViewZoomin)
	ON_COMMAND(ID_SUOXIAO, OnViewZoomout)
	ON_COMMAND(ID_CHONGMAN, OnViewZoomfull)
	ON_COMMAND(ID_PPPP, OnPppp)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHtuView drawing

void CHtuView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	CPen newpen;
	newpen.CreatePen(PS_SOLID,1,RGB(255,255,255));
    CPen* oldpen=pDC->SelectObject(&newpen);
    if(!m_myljb)
		return;

	if(!m_yzarray)
		return;

    
	pDC->SetBkColor(RGB(0,0,0));
	pDC->SetTextColor(RGB(0,255,0));
	for(int j=0;j<=m_myljb->m_xian.GetUpperBound();j++)
	{   
	    int xzb,yzb;
		xzb=int((m_myljb->m_xian.GetAt(j)->y-m_miny)*500/m_max);
	    yzb=int((m_maxx-m_myljb->m_xian.GetAt(j)->x)*500/m_max); 
		
		pDC->MoveTo(xzb,yzb);
	    pDC->TextOut(xzb,yzb,m_myljb->m_xian.GetAt(j)->czdian);
		
		zzd p_zzd=m_myljb->m_xian.GetAt(j)->pzzdian;
		while(p_zzd)
		{int  pindex=m_myljb->Findczd(p_zzd->dianhao);
		 if(pindex!=-1)
		 {   
			 if(m_myljb->m_xian.GetAt(j)->isknow&&m_myljb->m_xian.GetAt(pindex)->isknow)
			 {   CPen mypen;
			     mypen.CreatePen(PS_SOLID,3,RGB(0,0,255));
			 	 CPen *myoldpen=pDC->SelectObject(&mypen);
				 
				 pDC->LineTo((m_myljb->m_xian.GetAt(pindex)->y-m_miny)*500/m_max,(m_maxx-m_myljb->m_xian.GetAt(pindex)->x)*500/m_max);
                 pDC->TextOut((m_myljb->m_xian.GetAt(pindex)->y-m_miny)*500/m_max,(m_maxx-m_myljb->m_xian.GetAt(pindex)->x)*500/m_max,p_zzd->dianhao);
				 pDC->SelectObject(myoldpen); 
				 mypen.DeleteObject();
			 }
			 else
                 
			 {
				 pDC->LineTo((m_myljb->m_xian.GetAt(pindex)->y-m_miny)*500/m_max,(m_maxx-m_myljb->m_xian.GetAt(pindex)->x)*500/m_max);
			     pDC->TextOut((m_myljb->m_xian.GetAt(pindex)->y-m_miny)*500/m_max,(m_maxx-m_myljb->m_xian.GetAt(pindex)->x)*500/m_max,p_zzd->dianhao);
			 }   
		 }
		 else
		 {   
			 for(int p_index=0;p_index<=m_yzarray->GetUpperBound();p_index++)
			 {
				 if(!strcmp(p_zzd->dianhao,m_yzarray->GetAt(p_index)->dianhao))
				 {   
					 if(m_myljb->m_xian.GetAt(j)->isknow)
					 {
                        CPen mypen;
			            mypen.CreatePen(PS_SOLID,3,RGB(0,0,255));
			 	        CPen* myoldpen=pDC->SelectObject(&mypen);
				 
				         pDC->LineTo((m_yzarray->GetAt(p_index)->y-m_miny)*500/m_max,(m_maxx-m_yzarray->GetAt(p_index)->x)*500/m_max);
                         pDC->TextOut((m_yzarray->GetAt(p_index)->y-m_miny)*500/m_max,(m_maxx-m_yzarray->GetAt(p_index)->x)*500/m_max,m_yzarray->GetAt(p_index)->dianhao);
						 pDC->SelectObject(myoldpen); 
				        mypen.DeleteObject();
					
					 }
				      else
					  {
						 
						  pDC->LineTo((m_yzarray->GetAt(p_index)->y-m_miny)*500/m_max,(m_maxx-m_yzarray->GetAt(p_index)->x)*500/m_max);
					      pDC->TextOut((m_yzarray->GetAt(p_index)->y-m_miny)*500/m_max,(m_maxx-m_yzarray->GetAt(p_index)->x)*500/m_max,m_yzarray->GetAt(p_index)->dianhao);
					  }
				 }
			 }

		 }
         p_zzd=p_zzd->myzzdian;
         pDC->MoveTo((m_myljb->m_xian.GetAt(j)->y-m_miny)*500/m_max,(m_maxx-m_myljb->m_xian.GetAt(j)->x)*500/m_max);

		}

         int  h_index=m_myljb->Findczd(m_myljb->m_xian.GetAt(j)->dxdian);
		 
		 if(h_index!=-1)
		 {   
			 if(m_myljb->m_xian.GetAt(j)->isknow&&m_myljb->m_xian.GetAt(h_index)->isknow)
			 {   CPen mypen;
			     mypen.CreatePen(PS_SOLID,3,RGB(0,0,255));
			 	 CPen *myoldpen=pDC->SelectObject(&mypen);
				 
				 pDC->LineTo((m_myljb->m_xian.GetAt(h_index)->y-m_miny)*500/m_max,(m_maxx-m_myljb->m_xian.GetAt(h_index)->x)*500/m_max);
                 pDC->TextOut((m_myljb->m_xian.GetAt(h_index)->y-m_miny)*500/m_max,(m_maxx-m_myljb->m_xian.GetAt(h_index)->x)*500/m_max,m_myljb->m_xian.GetAt(j)->dxdian);
				 pDC->SelectObject(myoldpen); 
				 mypen.DeleteObject();
			 }
			 else
			 {pDC->LineTo((m_myljb->m_xian.GetAt(h_index)->y-m_miny)*500/m_max,(m_maxx-m_myljb->m_xian.GetAt(h_index)->x)*500/m_max);
		       pDC->TextOut((m_myljb->m_xian.GetAt(h_index)->y-m_miny)*500/m_max,(m_maxx-m_myljb->m_xian.GetAt(h_index)->x)*500/m_max,m_myljb->m_xian.GetAt(j)->dxdian);
			 }
		 }
		 else
		 {   
			 for(int p_index=0;p_index<=m_yzarray->GetUpperBound();p_index++)
			 {   
				 if(!strcmp(m_myljb->m_xian.GetAt(j)->dxdian,m_yzarray->GetAt(p_index)->dianhao))
				 {   
					 if(m_myljb->m_xian.GetAt(j)->isknow)
					 {
                        CPen mypen;
			            mypen.CreatePen(PS_SOLID,3,RGB(0,0,255));
			 	        CPen* myoldpen=pDC->SelectObject(&mypen);
				 
				         pDC->LineTo((m_yzarray->GetAt(p_index)->y-m_miny)*500/m_max,(m_maxx-m_yzarray->GetAt(p_index)->x)*500/m_max);
                         pDC->TextOut((m_yzarray->GetAt(p_index)->y-m_miny)*500/m_max,(m_maxx-m_yzarray->GetAt(p_index)->x)*500/m_max,m_yzarray->GetAt(p_index)->dianhao);
						 pDC->SelectObject(myoldpen); 
				        mypen.DeleteObject();
					
					 }
				      else
					  {
						  pDC->LineTo((m_yzarray->GetAt(p_index)->y-m_miny)*500/m_max,(m_maxx-m_yzarray->GetAt(p_index)->x)*500/m_max);
					      pDC->TextOut((m_yzarray->GetAt(p_index)->y-m_miny)*500/m_max,(m_maxx-m_yzarray->GetAt(p_index)->x)*500/m_max,m_yzarray->GetAt(p_index)->dianhao);
					  }
				 }
			 }

		 }
		
	}



//	pDC->SelectObject(oldpen);
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CHtuView diagnostics

#ifdef _DEBUG
void CHtuView::AssertValid() const
{
	CZoomView::AssertValid();
}

void CHtuView::Dump(CDumpContext& dc) const
{
	CZoomView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CHtuView message handlers

void CHtuView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	// TODO: Add your message handler code here
    CMenu menupopup;
	menupopup.LoadMenu(IDR_MENU1);
	menupopup.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);	
}

BOOL CHtuView::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	CRect rect;
	pDC->GetClipBox(rect);
	CBrush newbrush;
	newbrush.CreateSolidBrush(RGB(0,0,0));
	CBrush* oldbrush=pDC->SelectObject(&newbrush);
	pDC->PatBlt(rect.left,rect.top,rect.right,rect.bottom,PATCOPY);
	pDC->SelectObject(oldbrush);
   //	CZoomView::OnEraseBkgnd(pDC);
	return true;
}

void CHtuView::OnInitialUpdate() 
{
	CZoomView::OnInitialUpdate();
	SetZoomSizes(CSize(500,500));
	
//	HDC pdc=(HDC)GetWindowDC();
//	if(!pdc)
//		return;
//	SetBkColor(pdc,RGB(0,0,0));
  //  Invalidate();
	// TODO: Add your specialized code here and/or call the base class
	
}

void CHtuView::OnViewZoomin() 
{
	// TODO: Add your command handler code here
		CWnd *pWin = ((CWinApp *) AfxGetApp())->m_pMainWnd;
	if (GetZoomMode() == MODE_ZOOMIN) {
		SetZoomMode(MODE_ZOOMOFF);
		// Clear the statusbar
		pWin->SendMessage(WM_SETMESSAGESTRING, 0, 
			(LPARAM)(LPCSTR)"");
	} else {
		SetZoomMode(MODE_ZOOMIN);
		// Give instructions in the statusbar
		pWin->SendMessage(WM_SETMESSAGESTRING, 0, 
			(LPARAM)(LPCSTR)"Click to zoom in on point or drag a zoom box.");
	}
}

void CHtuView::OnViewZoomout() 
{
	// TODO: Add your command handler code here
	CWnd *pWin = ((CWinApp *) AfxGetApp())->m_pMainWnd;
	if (GetZoomMode() == MODE_ZOOMOUT) {
		SetZoomMode(MODE_ZOOMOFF);
		// Clear the statusbar
		pWin->SendMessage(WM_SETMESSAGESTRING, 0, 
			(LPARAM)(LPCSTR)"");
	} else {
		SetZoomMode(MODE_ZOOMOUT);
		// Give instructions in the statusbar
		pWin->SendMessage(WM_SETMESSAGESTRING, 0, 
			(LPARAM)(LPCSTR)"Click to zoom out on point.");
	}	
}

void CHtuView::OnViewZoomfull() 
{
	// TODO: Add your command handler code here
	DoZoomFull();
	RedrawWindow();
	
}
HBITMAP CHtuView::capturebitmap(CDC *pDC, CPoint luPoint, CRect bmprect)
{

	CDC memdc;
	CBitmap bitmap;
	int bmpwidth=bmprect.right-bmprect.left;
	int bmpheight=bmprect.bottom-bmprect.top;
	memdc.CreateCompatibleDC(pDC);
	bitmap.CreateCompatibleBitmap(pDC,bmpwidth,bmpheight);
	memdc.SelectObject(&bitmap);
	memdc.BitBlt(0,0,bmpwidth,bmpheight,pDC,luPoint.x,luPoint.y,SRCCOPY);
	return HBITMAP(bitmap);
}





void CHtuView::savebitmap(HBITMAP hbmp, HDC hdc,CString filename)
{
	BITMAP bmp;
	
	PBITMAPINFO pbmi;
	WORD cclrbits;
	HANDLE hf;
	BITMAPFILEHEADER hdr;
	PBITMAPINFOHEADER pbih;
	LPBYTE lpbits;
	DWORD dwtotal;
	DWORD cb;
	BYTE *hp;
	DWORD dwtmp;
	LPCSTR pszfile=filename;
	if(!GetObject(hbmp,sizeof(BITMAP),(LPSTR)&bmp))
	{
		MessageBox("失败");
		return;
	}
		cclrbits=(WORD)(bmp.bmPlanes*bmp.bmBitsPixel); 
    if(cclrbits==1)
		cclrbits=1;
	if(cclrbits<=4)
		cclrbits=4;
	if(cclrbits<=8)
		cclrbits=8;
	if(cclrbits<=16)
		cclrbits=16;
	if(cclrbits<=24)
		cclrbits=24;
	else
		cclrbits=32;
	if(cclrbits!=24)
		pbmi=(PBITMAPINFO)LocalAlloc(LPTR,sizeof(PBITMAPINFOHEADER)+sizeof(RGBQUAD)*(1<<cclrbits));
	else
		pbmi=(PBITMAPINFO)LocalAlloc(LPTR,sizeof(BITMAPINFOHEADER));
	pbmi->bmiHeader.biSize=sizeof(BITMAPINFOHEADER); 
   	pbmi->bmiHeader.biWidth=bmp.bmWidth;
	pbmi->bmiHeader.biHeight=bmp.bmHeight;
	pbmi->bmiHeader.biPlanes=bmp.bmPlanes;
	pbmi->bmiHeader.biBitCount=bmp.bmBitsPixel;
//	if(cclrbits<24)
//		pbmi->bmiHeader.biClrUsed=(1<<cclrbits);
	pbmi->bmiHeader.biCompression=BI_RGB;
	pbmi->bmiHeader.biSizeImage=(pbmi->bmiHeader.biWidth+7)/8*pbmi->bmiHeader.biHeight*cclrbits;;
	pbmi->bmiHeader.biClrImportant=0;
	pbih=(PBITMAPINFOHEADER)pbmi;
	lpbits=(LPBYTE)GlobalAlloc(GMEM_FIXED,pbih->biSizeImage);
	if(!lpbits)
		MessageBox("内存分配出错");
	if(!::GetDIBits(hdc,hbmp,0,(WORD)pbih->biHeight,lpbits,pbmi,DIB_RGB_COLORS))
		MessageBox("取位图数据出错");
	hf=::CreateFile(pszfile,GENERIC_READ|GENERIC_WRITE,(DWORD)0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
    if(hf==INVALID_HANDLE_VALUE)
		MessageBox("创建文件失败");
    hdr.bfType=0x4d42;
	hdr.bfSize=(DWORD)(sizeof(BITMAPFILEHEADER)+pbih->biSize+pbih->biClrImportant*sizeof(RGBQUAD)+pbih->biSizeImage);
	hdr.bfReserved1=0;
	hdr.bfReserved2=0;
	hdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+pbih->biSize+pbih->biClrImportant*sizeof(RGBQUAD);
    if(!WriteFile(hf,(LPVOID)&hdr,sizeof(BITMAPFILEHEADER),(LPDWORD)&dwtmp,NULL))
		MessageBox("写文件出错1");
	hp=lpbits;
	if(!WriteFile(hf,(LPSTR)pbih,sizeof(BITMAPINFOHEADER)+pbih->biClrImportant*sizeof(RGBQUAD),(LPDWORD)&dwtmp,(LPOVERLAPPED)NULL))
     MessageBox("写文件出错2");
	dwtotal=cb=pbih->biSizeImage;
	
	if(!::WriteFile(hf,(LPSTR)hp,(int)cb,(LPDWORD)&dwtmp,NULL))
		MessageBox("写文件出错3");
	if(!::CloseHandle(hf))
		MessageBox("关闭文件失败");
	::GlobalFree((HGLOBAL)lpbits);

}

void CHtuView::Mysave(CString myfilename) 
{
	// TODO: Add your command handler code here
	
	CRect rect;
	GetClientRect(rect);
		CPoint m_point(rect.left,rect.top);
 	CDC *pdc=GetWindowDC();
	
    HBITMAP m_bitmap;
	m_bitmap=capturebitmap(pdc,m_point,rect);
	savebitmap(m_bitmap,pdc->GetSafeHdc(),myfilename);
}

void CHtuView::OnPppp() 
{
	// TODO: Add your command handler code here
	
	CDC* pdc=this->GetDC();
	pdc->MoveTo(0,0);
	pdc->LineTo(200,200);
	
}

⌨️ 快捷键说明

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