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

📄 fingerdbm.cpp

📁 北京航空航天大学指纹识别系统源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// FingerDBM.cpp : implementation file
//

#include "stdafx.h"
#include "FingerDemo.h"
#include "FingerDBM.h"
#include "fingerdll.h"
#include "drawminutia.h"
#include "scandialog.h"
#include "zhongzhgetbmp.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFingerDBM
extern CFingerDemoApp theApp;

IMPLEMENT_DYNCREATE(CFingerDBM, CRecordView)


CFingerDBM::CFingerDBM()
	: CRecordView(CFingerDBM::IDD)
{
	//{{AFX_DATA_INIT(CFingerDBM)
	m_pSet = NULL;
	m_idcard = _T("");
	m_capnum = 0 ;
	m_name = _T("");
	m_sql = _T("");
	//}}AFX_DATA_INIT
	m_Minutia=(unsigned char*)GlobalAlloc(GMEM_FIXED,MAXNUM*DIM+4);
	memset(m_Minutia,0,MAXNUM*DIM+4);
    m_quality=0;
    m_serial=0;
    m_type=0;
	m_centerx=m_centery=0;
	sbmp=new Scan_Bmp();
	cbmp=new Scan_Bmp();
	cbmp->ReadFile(theApp.m_ProgramePath+"\\Sampleb.bmp");
	sbmp->ReadFile(theApp.m_ProgramePath+"\\Samplea.bmp");
	this->OnGetRecordset();
	this->BindData();
	theApp.m_pDBMView=this;


}
CFingerDBM::~CFingerDBM()
{
	if (m_pSet)
		delete m_pSet;
	theApp.m_bFingerDBM=false;
}

void CFingerDBM::DoDataExchange(CDataExchange* pDX)
{
	CRecordView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFingerDBM)
	DDX_Control(pDX, IDC_CUT_IMAGE, m_CutImage);
	DDX_Control(pDX, IDC_FINGER_BMP, m_Image);
	DDX_Text(pDX, IDC_IDCARD, m_idcard);
	DDV_MaxChars(pDX, m_idcard, 20);
	DDX_Text(pDX, IDC_CAPNUM, m_capnum);
	DDX_Text(pDX, IDC_NAME, m_name);
	DDV_MaxChars(pDX, m_name, 10);
	DDX_Text(pDX, IDC_SQL_EDIT, m_sql);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFingerDBM, CRecordView)
	//{{AFX_MSG_MAP(CFingerDBM)
	ON_BN_CLICKED(IDC_NEXT, OnNext)
	ON_WM_SHOWWINDOW()
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_PREVIOR, OnPrevior)
	ON_BN_CLICKED(IDC_UPDATEDB, OnUpdatedb)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_DELETE, OnDelete)
	ON_BN_CLICKED(IDC_CHANGE_DB, OnChangeDb)
	ON_BN_CLICKED(IDC_INPORT_BMPFILE, OnInportBmpfile)
	ON_COMMAND(ID_RECORD_FIRST, OnRecordFirst)
	ON_COMMAND(ID_RECORD_LAST, OnRecordLast)
	ON_COMMAND(ID_RECORD_NEXT, OnRecordNext)
	ON_COMMAND(ID_RECORD_PREV, OnRecordPrev)
	ON_BN_CLICKED(IDC_REQURY_DB, OnRequryDb)
	ON_WM_KEYUP()
	ON_BN_CLICKED(IDC_TITEZHENG, OnTitezheng)
	ON_BN_CLICKED(IDC_INPORT_CAPTURE, OnInportCapture)
	ON_COMMAND(IDM_CREATE_FEATURE, OnCreateFeature)
	ON_UPDATE_COMMAND_UI(IDM_CREATE_FEATURE, OnUpdateCreateFeature)
	ON_WM_CREATE()
	ON_WM_CTLCOLOR()
	ON_WM_ERASEBKGND()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFingerDBM diagnostics

#ifdef _DEBUG
void CFingerDBM::AssertValid() const
{
	CRecordView::AssertValid();
}

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

/////////////////////////////////////////////////////////////////////////////
// CFingerDBM message handlers

CRecordset* CFingerDBM::OnGetRecordset()
{
	if (m_pSet != NULL)
		return m_pSet;

	m_pSet = new CFingerDemoSet(NULL);
	m_pSet->Open();

	return m_pSet;
}

CFingerDemoSet* CFingerDBM::GetRecordset()
{
	CFingerDemoSet* pData = (CFingerDemoSet*) OnGetRecordset();
	ASSERT(pData == NULL || pData->IsKindOf(RUNTIME_CLASS(CFingerDemoSet)));
	return pData;
}

void CFingerDBM::OnInitialUpdate()
{
	BeginWaitCursor();
	GetRecordset();
	CRecordView::OnInitialUpdate();
	if (m_pSet->IsOpen())
	{
		CString strTitle = m_pSet->m_pDatabase->GetDatabaseName();
		CString strTable = m_pSet->GetTableName();
		if (!strTable.IsEmpty())
			strTitle += _T(":") + strTable;
		GetDocument()->SetTitle(strTitle);
	}
	EndWaitCursor();
}

bool CFingerDBM::BindData()
{
	if (m_pSet == NULL)
		return false;
	if(m_pSet->IsEOF()) return false;
	m_idcard = m_pSet->m_idcard ;
	m_capnum = m_pSet->m_capnum ;
	m_name =m_pSet->m_name ;
	m_centerx=m_pSet->m_centerx;
	m_centery=m_pSet->m_centery;
	if(this->m_hWnd==NULL) return false;
	int quality,serial,type;
	quality=serial=type=0;
	quality=m_pSet->m_quality;
	serial=m_pSet->m_serial;
	type=m_pSet->m_type;
	int check;
	check=GetCheckedRadioButton(IDC_QUALITY_A,IDC_QUALITY_C);
	if(check)	
		CheckDlgButton(check,0);
	check=GetCheckedRadioButton(IDC_FINGER_1,IDC_FINGER_10);
	if(check)	
		CheckDlgButton(check,0);
	check=GetCheckedRadioButton(IDC_TYPE_LEFT,IDC_TYPE_QITA);
	if(check)	
		CheckDlgButton(check,0);
	if(quality<=3&&quality>=1)
		CheckRadioButton(IDC_QUALITY_A,IDC_QUALITY_C,IDC_QUALITY_A+quality-1);
	if(serial<=10&&serial>=1)
		CheckRadioButton(IDC_FINGER_1,IDC_FINGER_10,IDC_FINGER_1+serial-1);
	if(type>=1&&type<=5)
		CheckRadioButton(IDC_TYPE_LEFT,IDC_TYPE_QITA,IDC_TYPE_LEFT+type-1);
	BYTE *buff;
	buff=m_pSet->m_feature.GetData();
	int fsize=m_pSet->m_feature.GetSize();
	if(m_pSet->m_feature.GetSize()>3)
	{
		memcpy(m_Minutia,buff,MAXNUM*DIM+4);//m_pSet->m_feature.GetSize());
	}

	buff=m_pSet->m_bmp.GetData();
	CPaintDC dc(this); // device context for painting
	fsize=m_pSet->m_bmp.GetSize();
	if(m_pSet->m_bmp.GetSize()>3)
	{
        memcpy(&(sbmp->m_Width),buff,sizeof(short));
	    buff+=sizeof(short);
	    memcpy(&(sbmp->m_Height),buff,sizeof(short));
	    buff+=sizeof(short);
    	memcpy(sbmp->m_Bmp_pBmpValue,buff,sbmp->m_Width*sbmp->m_Height);
    	sbmp->m_Bmp_pBmpInfo->biWidth=sbmp->m_Width;
    	sbmp->m_Bmp_pBmpInfo->biHeight=sbmp->m_Height;
    	sbmp->m_Bmp_pBmpInfo->biSizeImage=sbmp->m_Width*sbmp->m_Height;
    	if(m_Image.m_hWnd==NULL)
	    	return false;
	    sbmp->DrawDib(m_Image.GetDC(),1,0,0);

	}
	else
	{
    	if(m_Image.m_hWnd==NULL)
	    	return false;
		memset(sbmp->m_Bmp_pBmpValue,255,sbmp->m_Width*sbmp->m_Height);
		sbmp->m_Width=sbmp->m_Height=0;
	    sbmp->DrawDib(m_Image.GetDC(),1,0,0);
		m_Image.GetDC()->TextOut(90,120,"没有图象");
	}


//	sbmp->m_Bmp_pBmpValue=(unsigned char*)m_pSet->m_bmp.m_hData+sizeof(BITMAPFILEHEADER)+1064;
	UpdateData(false);
    this->InvalidateRect(NULL);
	return true;

}
bool CFingerDBM::SaveData()
{
	if(!UpdateData(true)) return false;
	if (m_pSet == NULL)
		return false;
	//if(m_pSet) return false;
	 m_pSet->m_idcard=m_idcard;
	 m_pSet->m_capnum=m_capnum;
	 m_pSet->m_name=m_name;
	 m_pSet->m_centerx=m_centerx;
	 m_pSet->m_centery=m_centery;
	int check;
	check=GetCheckedRadioButton(IDC_QUALITY_A,IDC_QUALITY_C);
	if(check) m_pSet->m_quality=check-IDC_QUALITY_A+1;
	check=GetCheckedRadioButton(IDC_FINGER_1,IDC_FINGER_10);
    if(check) m_pSet->m_serial=check-IDC_FINGER_1+1;
	check=GetCheckedRadioButton(IDC_TYPE_LEFT,IDC_TYPE_QITA);
	if(check) m_pSet->m_type=check-IDC_TYPE_LEFT+1;
	if(sbmp->m_Width==0||sbmp->m_Height==0)
		return true;
    m_pSet->m_bmp.SetSize(sbmp->m_Width*sbmp->m_Height+2*sizeof(short));
	BYTE* buff;
	m_pSet->m_feature.SetSize(MAXNUM*DIM+4-1);
	buff=m_pSet->m_feature.GetData();
	memcpy(buff,m_Minutia,1);
	buff+=1;
	memcpy(buff,m_Minutia+1,MAXNUM*DIM+4-1);

	buff=m_pSet->m_bmp.GetData();
	memcpy(buff,&(sbmp->m_Width),sizeof(short));
	buff+=sizeof(short);
	memcpy(buff,&(sbmp->m_Height),sizeof(short));
	buff+=sizeof(short);
	memcpy(buff,sbmp->m_Bmp_pBmpValue,sbmp->m_Width*sbmp->m_Height);

	//sbmp->m_Bmp_pBmpValue=(unsigned char*)m_pSet->m_bmp.m_hData+sizeof(BITMAPFILEHEADER)+1064;
	return true;

}


void CFingerDBM::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	this->BindData();
	CRecordView::OnShowWindow(bShow, nStatus);
//	UpdateData(false);

	// TODO: Add your message handler code here
	
}

void CFingerDBM::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
//    RECT rc;
//	m_Image.GetWindowRect(&rc);
	//m_Image.SetWindowPos(&m_Image.wndTop,100,10,sbmp->m_Width,sbmp->m_Height ,SWP_DRAWFRAME   );
	sbmp->DrawDib(m_Image.GetDC(),1,0,0);

	// TODO: Add your message handler code here
	
	// Do not call CRecordView::OnPaint() for painting messages
}
void CFingerDBM::OnNext() 
{
	// TODO: Add your control notification handler code here
	if(m_pSet->IsEOF())
	{
		MessageBox("已经到数据库最后一条记录了!","注意",MB_OK);
		return;
	}
	m_pSet->MoveNext();
	if(m_pSet->IsEOF())
	{
		MessageBox("已经到数据库最后一条记录了!","注意",MB_OK);
		m_pSet->MovePrev();
		return;
	}
	this->BindData();

}


void CFingerDBM::OnPrevior() 
{
	// TODO: Add your control notification handler code here
	if(m_pSet->IsBOF())
	{
		MessageBox("已经到数据库第一条记录了!","注意",MB_ICONWARNING&&MB_OK);
		return;
	}
	m_pSet->MovePrev();
	if(m_pSet->IsBOF())
	{
		MessageBox("已经到数据库第一条记录了!","注意",MB_ICONWARNING&&MB_OK);
		m_pSet->MoveNext();
		return;
	}
	this->BindData();
	
}

void CFingerDBM::OnUpdatedb() 
{
	// TODO: Add your control notification handler code here
	if(MessageBox("真的要更新数据库吗?","注意",MB_OKCANCEL)!=1)
		return;
	//UpdateData(true);
	if(!this->SaveData())
	{
		MessageBox("数据库不能更新","注意",MB_OK );
		return;
	}
	if(!m_pSet->CanUpdate())
	{
		MessageBox("数据库不能更新","注意",MB_OK);
		return;
	}
//	m_pSet->Edit();
    if(m_pSet->m_name=="")
	{
		MessageBox("请输入姓名","注意",MB_OK);
		return;
	}
	if(m_pSet->m_idcard=="")
	{
		MessageBox("请输入ID号","注意",MB_OK);
		return;
	}
    try

⌨️ 快捷键说明

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