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

📄 layerdlg.cpp

📁 c语言实现的遥感图像处理的一些基本操作
💻 CPP
字号:
// LayerDlg.cpp : implementation file
//

#include "stdafx.h"
#include "RSImageStar.h"
#include "RSImageStarDoc.h"
#include "RSImageStarView.h"
#include "MainFrm.h"
#include "LayerDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CLayerDlg dialog

extern CRSImageStarView *m_pView;

CLayerDlg::CLayerDlg(CWnd* pParent /*=NULL*/)
{
	//{{AFX_DATA_INIT(CLayerDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_imageList=NULL;
	m_imageList1=NULL;
    m_Draw=true;
	flag=true;
}


void CLayerDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogBar::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLayerDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLayerDlg, CDialogBar)
	//{{AFX_MSG_MAP(CLayerDlg)
	ON_WM_DESTROY()
	ON_WM_SHOWWINDOW()
	ON_WM_LBUTTONDOWN()
	ON_WM_PAINT()
	ON_WM_CREATE()
	ON_WM_SIZE()
	ON_NOTIFY(NM_CLICK, IDC_TREE1, OnClickTree1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLayerDlg message handlers
void CLayerDlg::AddItem()
{
	if(flag)
	{
		AddIcon();
		flag=false;
	}
	filename=m_pView->m_pDoc->filename;
	CTreeCtrl* pTree =
		(CTreeCtrl*) GetDlgItem(IDC_TREE1);
	pTree->SetImageList(m_imageList, TVSIL_NORMAL);
	pTree->SetItemHeight(32);
// tree structure common values
	TV_INSERTSTRUCT tvinsert;
	tvinsert.hParent = NULL;
	tvinsert.hInsertAfter = TVI_LAST;
	tvinsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE
	                     | TVIF_TEXT|TVIF_STATE;


	pTree->SetImageList(m_imageList1, TVSIL_STATE);

	tvinsert.item.hItem = NULL;
	tvinsert.item.state = TVIS_SELECTED  ;
	tvinsert.item.stateMask = TVIS_STATEIMAGEMASK ;

	tvinsert.item.cchTextMax = 16;
	tvinsert.item.iSelectedImage = 0;
	tvinsert.item.cChildren = 0;
	tvinsert.item.lParam = 0;
// top level
	tvinsert.item.pszText =m_pView->m_pDoc->curptr->layername;
	tvinsert.item.iImage = 1;
	HTREEITEM hDad = pTree ->InsertItem(&tvinsert);
	if(m_pView->m_pDoc->curptr->flagwrite)
	     pTree->SelectItem(hDad);
	pTree->SetCheck(hDad,true);
	m_pView->m_crPenColor=RGB(m_pView->m_pDoc->curptr->color.rgbtRed,
		m_pView->m_pDoc->curptr->color.rgbtGreen,m_pView->m_pDoc->curptr->color.rgbtBlue);

}

void CLayerDlg::OpenItem()
{
	if(flag)
	{
		AddIcon();
		flag=false;
	}
	if(m_pView)
 	  filename=m_pView->m_pDoc->filename;

	CTreeCtrl* pTree =
		(CTreeCtrl*) GetDlgItem(IDC_TREE1);

	pTree->DeleteAllItems();

	pTree->SetImageList(m_imageList, TVSIL_NORMAL);
	pTree->SetItemHeight(32);
// tree structure common values
	TV_INSERTSTRUCT tvinsert;
	tvinsert.hParent = NULL;
	tvinsert.hInsertAfter = TVI_LAST;
	tvinsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE
	                     | TVIF_TEXT|TVIF_STATE;

	pTree->SetImageList(m_imageList1, TVSIL_STATE);
    if(m_pView!=NULL)
	{
		pTree->EnableWindow(true);
		m_pView->m_pDoc->tempptr=m_pView->m_pDoc->head;
		while(m_pView->m_pDoc->tempptr!=NULL)
		{
			tvinsert.item.hItem = NULL;
			tvinsert.item.state = TVIS_SELECTED  ;
			tvinsert.item.stateMask = TVIS_STATEIMAGEMASK ;
			
			tvinsert.item.cchTextMax = 16;
			tvinsert.item.iSelectedImage = 0;
			tvinsert.item.cChildren = 0;
			tvinsert.item.lParam = 0;
			// top level
			tvinsert.item.pszText = m_pView->m_pDoc->tempptr->layername;
			tvinsert.item.iImage = 1;
			HTREEITEM hDad = pTree ->InsertItem(&tvinsert);
			pTree->SetCheck(hDad,m_pView->m_pDoc->tempptr->flagdraw);
			if(m_pView->m_pDoc->tempptr->flagwrite)
				pTree->SelectItem(hDad);
		    m_pView->m_pDoc->tempptr=m_pView->m_pDoc->tempptr->next;
		}
	}
	else
	   pTree->EnableWindow(false);
}

void CLayerDlg::DeleteItem()
{
	CTreeCtrl* pTree =
		(CTreeCtrl*) GetDlgItem(IDC_TREE1);
   pTree->DeleteAllItems();
}

void CLayerDlg::AddIcon()
{
	CTreeCtrl* pTree =
		(CTreeCtrl*) GetDlgItem(IDC_TREE1);
//	pTree->ShowScrollBar(SB_HORZ,false);
    pTree->EnableWindow(true);
	HICON hIcon[3];
	int n;
    m_imageList=new CImageList;
    m_imageList1=new CImageList;

	m_imageList->Create(32, 32, 0, 2, 8); // 32, 32 for large icons
	m_imageList1->Create(32, 32, 0, 3, 8); // 32, 32 for large icons

	hIcon[0] = AfxGetApp()->LoadIcon(IDI_TREE1);
	hIcon[1] = AfxGetApp()->LoadIcon(IDI_TREE2);

	for (n = 0; n < 2; n++) {
		m_imageList->Add(hIcon[n]);

	}

	hIcon[1] = AfxGetApp()->LoadIcon(IDI_STATE1);
	hIcon[2] = AfxGetApp()->LoadIcon(IDI_STATE2);

	for (n = 0; n < 3; n++) 
		m_imageList1->Add(hIcon[n]);
}


void CLayerDlg::OnDestroy() 
{
	CDialogBar::OnDestroy();
	
	// TODO: Add your message handler code here
	if(m_imageList!=NULL)
	{
		delete m_imageList;
		delete m_imageList1;
	}	
}

void CLayerDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialogBar::OnShowWindow(bShow, nStatus);
	
	// TODO: Add your message handler code here
	CTreeCtrl* pTree =
		(CTreeCtrl*) GetDlgItem(IDC_TREE1);
	filename="";
	pTree->GetWindowRect(&rect);	
}

void CLayerDlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CTreeCtrl* pTree =
		(CTreeCtrl*) GetDlgItem(IDC_TREE1);
	CPoint point;
    GetCursorPos(&point);
    pTree->ScreenToClient(&point);
	TVHITTESTINFO pHitTestInfo;
	CPoint pos;
	pos.x=point.x-rect.left;
	pos.y=point.y-rect.top;
    pHitTestInfo.pt=point;
	pTree->HitTest(&pHitTestInfo);
    if(point.x<32)
	{
		int num=point.y/32;
		if(pHitTestInfo.hItem!=NULL)
		{
		    m_pView->m_pDoc->tempptr=m_pView->m_pDoc->head;
			int n=0;
		    while(n<num)
			{
				m_pView->m_pDoc->tempptr=m_pView->m_pDoc->tempptr->next;
				n++;
			}
            BOOL flag;
			flag=pTree->GetCheck(pHitTestInfo.hItem);
			m_pView->m_pDoc->tempptr->flagdraw=!flag;
			m_pView->Invalidate(false);
		}            
	}
	else
	{
		int num=point.y/32;
		if(pHitTestInfo.hItem!=NULL)
		{
	//		m_pView->m_pDoc->tempptr=m_pView->m_pDoc->head;
	//		while(m_pView->m_pDoc->tempptr!=NULL)
	//		{
				m_pView->m_pDoc->curptr->flagwrite=false;
	//			m_pView->m_pDoc->tempptr=m_pView->m_pDoc->tempptr->next;
	//		}
			m_pView->m_pDoc->tempptr=m_pView->m_pDoc->head;
			int n=0;
		    while(n<num)
			{
				m_pView->m_pDoc->tempptr=m_pView->m_pDoc->tempptr->next;
				n++;
			}
			if(m_pView->m_pDoc->tempptr==NULL)
				return;
			m_pView->m_pDoc->tempptr->flagwrite=true;
			m_pView->m_pDoc->curptr=m_pView->m_pDoc->tempptr;
            m_pView->m_crPenColor=RGB(m_pView->m_pDoc->curptr->color.rgbtRed,
				m_pView->m_pDoc->curptr->color.rgbtGreen,m_pView->m_pDoc->curptr->color.rgbtBlue);
            m_pView->ShowPenColor();
			m_pView->m_pDoc->m_Dib->SetDataPtr((CRSImage *)m_pView->m_pDoc->tempptr->dib);
            m_pView->m_pDoc->m_Dib->m_hDIB=m_pView->m_pDoc->tempptr->dib->m_hDIB;
            m_pView->m_pDoc->UpdateAllViews(NULL);
		}            
	}
	*pResult = 0;
}

void CLayerDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CMainFrame *pMain = (CMainFrame *)AfxGetMainWnd();
    pMain->ShowControlBar(&pMain->m_wndMyDialogBar,true, FALSE);
	CDialogBar::OnLButtonDown(nFlags, point);
}


void CLayerDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	// TODO: Add your message handler code here
	if(m_Draw)
	{
		CButton *pButton=(CButton *)GetDlgItem(IDC_BUTTON1);
		CRect rect;
		pButton->GetWindowRect(&rect);
		ScreenToClient(rect);
		m_LayerColor.Create(NULL, BS_OWNERDRAW|WS_BORDER|BS_CHECKBOX, 
			rect, this, IDC_LAYER_COLOR);
		m_LayerColor.SetColor(RGB(255,255,255));
		m_LayerColor.ShowWindow(SW_SHOWNORMAL);	
		m_LayerColor.EnableWindow(false);
		m_Draw=false;
	}
	// Do not call CDialogBar::OnPaint() for painting messages
}

void CLayerDlg::SetButtonColor(COLORREF color)
{
	if(m_Draw)
	{
		CButton *pButton=(CButton *)GetDlgItem(IDC_BUTTON1);
		CRect rect;
		pButton->GetWindowRect(&rect);
		ScreenToClient(rect);
		m_LayerColor.Create(NULL, BS_OWNERDRAW|WS_BORDER|BS_CHECKBOX, 
			rect, this, IDC_LAYER_COLOR);
		m_LayerColor.SetColor(color);
		m_LayerColor.ShowWindow(SW_SHOWNORMAL);	
		m_LayerColor.EnableWindow(false);
		m_Draw=false;
	}
	else
		m_LayerColor.SetColor(color);
}

⌨️ 快捷键说明

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