?? fingerdlg.cpp
字號:
// FingerDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Finger.h"
#include "FingerDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFingerDlg dialog
CFingerDlg::CFingerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFingerDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFingerDlg)
m_COUNT = _T("");
m_Hint = _T("");
m_SN = _T("");
m_Used = _T("");
m_User = _T("");
// m_Regname = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CFingerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFingerDlg)
DDX_Text(pDX, IDC_EDCount, m_COUNT);
DDX_Text(pDX, IDC_EDHint, m_Hint);
DDX_Text(pDX, IDC_EDSN, m_SN);
DDX_Text(pDX, IDC_EDUsed, m_Used);
DDX_Text(pDX, IDC_EDUser, m_User);
DDX_Control(pDX, IDC_ZKFPENGX2, m_zkfp);
// DDX_CBString(pDX, IDC_COMKind, m_Regname);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFingerDlg, CDialog)
//{{AFX_MSG_MAP(CFingerDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
// ON_BN_CLICKED(IDC_BTNInit, OnBTNInit)
ON_BN_CLICKED(IDC_BTNReg, OnBTNReg)
ON_BN_CLICKED(IDC_BTNSave, OnBTNSave)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_EVENTSINK_MAP(CFingerDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CDemoDlg)
ON_EVENT(CFingerDlg, IDC_ZKFPENGX2, 8 /* OnImageReceived */, OnOnImageReceivedZkfpengx2, VTS_PBOOL)
// ON_EVENT(CFingerDlg, IDC_ZKFPENGX2, 10 /* OnCapture */, OnOnCaptureZkfpengx2, VTS_BOOL VTS_VARIANT)
ON_EVENT(CFingerDlg, IDC_ZKFPENGX2, 9 /* OnEnroll */, OnOnEnrollZkfpengx2, VTS_BOOL VTS_VARIANT)
ON_EVENT(CFingerDlg, IDC_ZKFPENGX2, 5 /* OnFeatureInfo */, OnOnFeatureInfoZkfpengx2, VTS_I4)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFingerDlg message handlers
BOOL CFingerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// GetDlgItem(IDC_BTNInit)->SetFocus();//將初始化按鈕設為默認焦點
if(!m_db.IsOpen())
m_db.OpenEx(_T("DSN=xiangmu;UID=sa;"),CDatabase::noOdbcDialog);
m_rs.m_pDatabase=&m_db;
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
FingerCount = 0;
fpcHandle = m_zkfp.CreateFPCacheDB();
VariantInit(&FRegTemplate);
//初始化設備
char buffer[10];
CheckRadioButton(IDC_RADIOBMP, IDC_RADIOJPG, IDC_RADIOBMP);
// TODO: Add your control notification handler code here
if (m_zkfp.InitEngine() == 0){
m_SN = m_zkfp.GetSensorSN();
ltoa(m_zkfp.GetSensorIndex(), buffer, 10);
m_Used = buffer;
ltoa(m_zkfp.GetSensorCount(), buffer, 10);
m_COUNT = buffer;
SetDlgItemText(IDC_EDUsed, m_Used);
SetDlgItemText(IDC_EDCount, m_COUNT);
SetDlgItemText(IDC_EDSN, m_SN);
// MessageBox("初始化成功!");
} else
MessageBox("初始化失敗,請確認指紋儀是否正確連接!");
FMatchType = 0;
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control設置初始化按鈕為焦點,修改返回值為FALSE
}
void CFingerDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CFingerDlg::OnOnImageReceivedZkfpengx2(BOOL FAR* AImageValid)
{
// TODO: Add your control notification handler code here
HDC hdc;
hdc = this->GetDC()->m_hDC;
m_zkfp.PrintImageAt(long(hdc), 330, 2, m_zkfp.GetImageWidth(), m_zkfp.GetImageHeight());
}
void CFingerDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CFingerDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
/*void CFingerDlg::OnBTNInit()
{
// TODO: Add your control notification handler code here
//初始化設備
char buffer[10];
CheckRadioButton(IDC_RADIOBMP, IDC_RADIOJPG, IDC_RADIOBMP);
// TODO: Add your control notification handler code here
if (m_zkfp.InitEngine() == 0){
m_SN = m_zkfp.GetSensorSN();
ltoa(m_zkfp.GetSensorIndex(), buffer, 10);
m_Used = buffer;
ltoa(m_zkfp.GetSensorCount(), buffer, 10);
m_COUNT = buffer;
SetDlgItemText(IDC_EDUsed, m_Used);
SetDlgItemText(IDC_EDCount, m_COUNT);
SetDlgItemText(IDC_EDSN, m_SN);
MessageBox("初始化成功!");
} else
MessageBox("初始化失敗!");
FMatchType = 0;
}*/
void CFingerDlg::OnBTNReg()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (m_User.Compare("") == 0){
MessageBox("請輸入指紋名稱標識!");
return;
}
m_rs.Open();
m_rs.MoveFirst();
while(1)
{
if(m_rs.m_UserID == m_User)
{
MessageBox("對不起,該工號已經注冊,請確定您所輸入的工號是否正確!");
m_User="";
GetDlgItem(IDC_EDUser)->SetFocus();// 將焦點設置到用戶ID輸入框
UpdateData(FALSE);
break;
}
else if(m_rs.IsEOF())
{
m_zkfp.BeginEnroll();
SetDlgItemText(IDC_EDHint, "開始登記");
break;
}
else
{
m_rs.MoveNext();
}
}
m_rs.Close();
// m_zkfp.BeginEnroll();
// SetDlgItemText(IDC_EDHint, "開始登記");
}
void CFingerDlg::OnBTNSave()
{
// TODO: Add your control notification handler code here
if (IsDlgButtonChecked(IDC_RADIOBMP) != 0)
m_zkfp.SaveBitmap("c:\\fingerprint.bmp");
else
m_zkfp.SaveJPG("c:\fingerprint.jpg");
MessageBox("圖像保存到C:\\FingerPrint");
}
void CFingerDlg::OnOnFeatureInfoZkfpengx2(long AQuality)
{
// TODO: Add your control notification handler code here
//驗證指紋質量,一般需要按4次,由綜合識別系統函數直接控制
CString sTemp;
char buffer[10];
sTemp = "";
if (m_zkfp.GetIsRegister()){
ltoa(m_zkfp.GetEnrollIndex(), buffer, 10);
sTemp = "登記狀態: 還需要按壓";
sTemp = sTemp + buffer + "次手指!";
}
sTemp = sTemp + " 指紋質量";
ltoa(AQuality, buffer, 10);
if (AQuality != 0)
sTemp = sTemp + "不合格: " + buffer;
else
sTemp = sTemp + "合格";
SetDlgItemText(IDC_EDHint, sTemp);
}
void CFingerDlg::OnOnEnrollZkfpengx2(BOOL ActionResult, const VARIANT FAR& ATemplate)
{
// TODO: Add your control notification handler code here
// 登記成功將指紋模板存入數據庫中
VARIANT pTemplate;
if (!ActionResult)
MessageBox("指紋登記失敗!");
else{
MessageBox("指紋登記成功");
VariantClear(&FRegTemplate);
pTemplate = m_zkfp.GetTemplate();
s_zkfp = m_zkfp.EncodeTemplate1(pTemplate);
int length=0;
length = strlen(s_zkfp);
try {
m_rs.Open();
m_rs.AddNew();//添加數據庫中
UpdateData(TRUE);
m_rs.m_FingerTemp=s_zkfp;// 獲得指紋模板
m_rs.m_UserID=m_User;// 對應用戶的ID
// m_rs.m_fingername=m_Regname;// 對應用戶注冊的手指
m_rs.Update();
// UpdateData(FALSE);
m_rs.Close();
m_db.Close();
}
catch (CDBException * e)
{
AfxMessageBox(e->m_strError, MB_ICONEXCLAMATION);
}
VariantCopy(&FRegTemplate, &pTemplate);
m_zkfp.SaveTemplate("c:\\fingerprint.tpl", ATemplate);
m_zkfp.AddRegTemplateFileToFPCacheDB(fpcHandle, FingerCount, "c:\\fingerprint.tpl");
UpdateData(TRUE);
// strcpy(FFingerNames[FingerCount], m_Regname);
// FingerCount = FingerCount + 1;
m_User="";// 清空用戶ID輸入框
// m_Regname="";// 清空用戶注冊手指名輸入框
GetDlgItem(IDC_EDUser)->SetFocus();// 將焦點設置到用戶ID輸入框
UpdateData(FALSE);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -