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