📄 regprndlg.cpp
字号:
// RegPrnDlg.cpp : implementation file
//
#include "stdafx.h"
#include "BprConfig.h"
#include "RegPrnDlg.h"
#include "RegPrnMainDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
static void clear_one_entry(CRegPrnDlg *dlg, int entry_no);
static unsigned int __atoi(char *str, unsigned int base);
/////////////////////////////////////////////////////////////////////////////
// CRegPrnDlg dialog
CRegPrnDlg::CRegPrnDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRegPrnDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRegPrnDlg)
//}}AFX_DATA_INIT
}
void CRegPrnDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRegPrnDlg)
DDX_Control(pDX, IDC_FLASH_UPDATE, m_flash_update);
DDX_Control(pDX, IDC_PRNID7, m_prnid7);
DDX_Control(pDX, IDC_PRNID6, m_prnid6);
DDX_Control(pDX, IDC_PRNID5, m_prnid5);
DDX_Control(pDX, IDC_PRNID4, m_prnid4);
DDX_Control(pDX, IDC_PRNID3, m_prnid3);
DDX_Control(pDX, IDC_PRNID2, m_prnid2);
DDX_Control(pDX, IDC_PRNID1, m_prnid1);
DDX_Control(pDX, IDC_DEV_NAME7, m_dev_name7);
DDX_Control(pDX, IDC_DEV_NAME6, m_dev_name6);
DDX_Control(pDX, IDC_DEV_NAME5, m_dev_name5);
DDX_Control(pDX, IDC_DEV_NAME4, m_dev_name4);
DDX_Control(pDX, IDC_DEV_NAME3, m_dev_name3);
DDX_Control(pDX, IDC_DEV_NAME2, m_dev_name2);
DDX_Control(pDX, IDC_DEV_NAME1, m_dev_name1);
DDX_Control(pDX, IDC_DEV_LOCATION7, m_dev_location7);
DDX_Control(pDX, IDC_DEV_LOCATION6, m_dev_location6);
DDX_Control(pDX, IDC_DEV_LOCATION5, m_dev_location5);
DDX_Control(pDX, IDC_DEV_LOCATION4, m_dev_location4);
DDX_Control(pDX, IDC_DEV_LOCATION3, m_dev_location3);
DDX_Control(pDX, IDC_DEV_LOCATION2, m_dev_location2);
DDX_Control(pDX, IDC_DEV_LOCATION1, m_dev_location1);
DDX_Control(pDX, IDC_ADDR76, m_addr76);
DDX_Control(pDX, IDC_ADDR75, m_addr75);
DDX_Control(pDX, IDC_ADDR74, m_addr74);
DDX_Control(pDX, IDC_ADDR73, m_addr73);
DDX_Control(pDX, IDC_ADDR72, m_addr72);
DDX_Control(pDX, IDC_ADDR71, m_addr71);
DDX_Control(pDX, IDC_ADDR66, m_addr66);
DDX_Control(pDX, IDC_ADDR65, m_addr65);
DDX_Control(pDX, IDC_ADDR64, m_addr64);
DDX_Control(pDX, IDC_ADDR63, m_addr63);
DDX_Control(pDX, IDC_ADDR62, m_addr62);
DDX_Control(pDX, IDC_ADDR61, m_addr61);
DDX_Control(pDX, IDC_ADDR56, m_addr56);
DDX_Control(pDX, IDC_ADDR55, m_addr55);
DDX_Control(pDX, IDC_ADDR54, m_addr54);
DDX_Control(pDX, IDC_ADDR53, m_addr53);
DDX_Control(pDX, IDC_ADDR52, m_addr52);
DDX_Control(pDX, IDC_ADDR51, m_addr51);
DDX_Control(pDX, IDC_ADDR46, m_addr46);
DDX_Control(pDX, IDC_ADDR45, m_addr45);
DDX_Control(pDX, IDC_ADDR44, m_addr44);
DDX_Control(pDX, IDC_ADDR43, m_addr43);
DDX_Control(pDX, IDC_ADDR42, m_addr42);
DDX_Control(pDX, IDC_ADDR41, m_addr41);
DDX_Control(pDX, IDC_ADDR36, m_addr36);
DDX_Control(pDX, IDC_ADDR35, m_addr35);
DDX_Control(pDX, IDC_ADDR34, m_addr34);
DDX_Control(pDX, IDC_ADDR33, m_addr33);
DDX_Control(pDX, IDC_ADDR32, m_addr32);
DDX_Control(pDX, IDC_ADDR31, m_addr31);
DDX_Control(pDX, IDC_ADDR26, m_addr26);
DDX_Control(pDX, IDC_ADDR25, m_addr25);
DDX_Control(pDX, IDC_ADDR24, m_addr24);
DDX_Control(pDX, IDC_ADDR23, m_addr23);
DDX_Control(pDX, IDC_ADDR22, m_addr22);
DDX_Control(pDX, IDC_ADDR21, m_addr21);
DDX_Control(pDX, IDC_ADDR16, m_addr16);
DDX_Control(pDX, IDC_ADDR15, m_addr15);
DDX_Control(pDX, IDC_ADDR14, m_addr14);
DDX_Control(pDX, IDC_ADDR13, m_addr13);
DDX_Control(pDX, IDC_ADDR12, m_addr12);
DDX_Control(pDX, IDC_ADDR11, m_addr11);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRegPrnDlg, CDialog)
//{{AFX_MSG_MAP(CRegPrnDlg)
ON_BN_CLICKED(ID_RESET, OnReset)
ON_BN_CLICKED(IDC_CLEAR1, OnClear1)
ON_BN_CLICKED(IDC_CLEAR2, OnClear2)
ON_BN_CLICKED(IDC_CLEAR3, OnClear3)
ON_BN_CLICKED(IDC_CLEAR4, OnClear4)
ON_BN_CLICKED(IDC_CLEAR5, OnClear5)
ON_BN_CLICKED(IDC_CLEAR6, OnClear6)
ON_BN_CLICKED(IDC_CLEAR7, OnClear7)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRegPrnDlg message handlers
BOOL CRegPrnDlg::OnInitDialog()
{
int i, j;
char addr_byte[4];
CDialog::OnInitDialog();
// TODO: Add extra initialization here
for (i = 0; i < (int)new_prn_count; i++) {
// printer ID
SetDlgItemInt(IDC_PRNID1 + i, new_prn_table[i].ID, TRUE);
// Bluetooth address
for (j = 5; j >= 0; j--) {
sprintf(addr_byte, "%02X", new_prn_table[i].BD_Addr[j]);
SetDlgItemText(IDC_ADDR11 + (i*10) + (5-j), addr_byte);
}
// device name
SetDlgItemText(IDC_DEV_NAME1 + i, new_prn_table[i].DeviceName);
// device location
SetDlgItemText(IDC_DEV_LOCATION1 + i, new_prn_table[i].DeviceLocation);
}
if (flash_update) {
m_flash_update.SetCheck(1);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CRegPrnDlg::OnReset()
{
int i, j;
char addr_byte[4];
// TODO: Add your control notification handler code here
// clear all fields
for (i = 0; i < MAX_PRINTER; i++) {
clear_one_entry(this, i);
}
// reset to the initial values
for (i = 0; i < (int)new_prn_count; i++) {
// printer ID
SetDlgItemInt(IDC_PRNID1 + i, new_prn_table[i].ID, TRUE);
// Bluetooth address
for (j = 5; j >= 0; j--) {
sprintf(addr_byte, "%02X", new_prn_table[i].BD_Addr[j]);
SetDlgItemText(IDC_ADDR11 + (i*10) + (5-j), addr_byte);
}
// device name
SetDlgItemText(IDC_DEV_NAME1 + i, new_prn_table[i].DeviceName);
// device location
SetDlgItemText(IDC_DEV_LOCATION1 + i, new_prn_table[i].DeviceLocation);
}
}
void CRegPrnDlg::OnOK()
{
int i, j, n;
char buf[16];
unsigned char id, id_check[MAX_PRINTER] = {0, 0, 0, 0, 0, 0, 0};
// TODO: Add extra validation here
// check errors
for (i = 0; i < MAX_PRINTER; i++) {
if (((CEdit *)GetDlgItem(IDC_PRNID1 + i))->GetWindowTextLength() > 0) {
// check printer ID
((CEdit *)GetDlgItem(IDC_PRNID1 + i))->GetWindowText(buf, 3);
id = (unsigned char) atoi(buf);
if (id == 0 || id > MAX_PRINTER) goto error1;
id_check[id - 1]++;
// check Bluetooth address
for (j = 0; j < 6; j++) {
((CEdit *)GetDlgItem(IDC_ADDR11 + (i*10) + j))->GetWindowText(buf, 3);
if (!isxdigit(buf[0])) goto error3;
if (buf[1] != 0 && !isxdigit(buf[1])) goto error3;
}
}
}
for (i = 0; i < MAX_PRINTER; i++) {
if (id_check[i] > 1) goto error2;
}
// OK, update the new printer table
memset((void *)new_prn_table, 0, sizeof(new_prn_table));
for (i = 0, n = 0; i < MAX_PRINTER; i++) {
if (((CEdit *)GetDlgItem(IDC_PRNID1 + i))->GetWindowTextLength() > 0) {
((CEdit *)GetDlgItem(IDC_PRNID1 + i))->GetWindowText(buf, 3);
// printer ID
new_prn_table[n].ID = (unsigned char) atoi(buf);
// Bluetooth address
for (j = 0; j < 6; j++) {
((CEdit *)GetDlgItem(IDC_ADDR11 + (i*10) + j))->GetWindowText(buf, 3);
new_prn_table[n].BD_Addr[5 - j] = (unsigned char) __atoi(buf, 16);
}
// device name
((CEdit *)GetDlgItem(IDC_DEV_NAME1 + i))->GetWindowText(new_prn_table[n].DeviceName, sizeof(DEV_NAME));
// device location
((CEdit *)GetDlgItem(IDC_DEV_LOCATION1 + i))->GetWindowText(new_prn_table[n].DeviceLocation, sizeof(DEV_LOCATION));
n++;
}
}
new_prn_count = n;
flash_update = m_flash_update.GetCheck();
CDialog::OnOK();
return;
error1:
MessageBox("Printer ID should be in the range 1 ~ 7.", "Error",
MB_ICONEXCLAMATION | MB_OK);
((CEdit *)GetDlgItem(IDC_PRNID1 + i))->SetFocus();
return;
error2:
MessageBox("Duplicated Printer ID error.", "Error",
MB_ICONEXCLAMATION | MB_OK);
return;
error3:
MessageBox("Invalid Bluetooth Address.", "Error",
MB_ICONEXCLAMATION | MB_OK);
((CEdit *)GetDlgItem(IDC_ADDR11 + (i*10) + j))->SetFocus();
return;
}
void CRegPrnDlg::OnClear1()
{
// TODO: Add your control notification handler code here
clear_one_entry(this, 0);
}
void CRegPrnDlg::OnClear2()
{
// TODO: Add your control notification handler code here
clear_one_entry(this, 1);
}
void CRegPrnDlg::OnClear3()
{
// TODO: Add your control notification handler code here
clear_one_entry(this, 2);
}
void CRegPrnDlg::OnClear4()
{
// TODO: Add your control notification handler code here
clear_one_entry(this, 3);
}
void CRegPrnDlg::OnClear5()
{
// TODO: Add your control notification handler code here
clear_one_entry(this, 4);
}
void CRegPrnDlg::OnClear6()
{
// TODO: Add your control notification handler code here
clear_one_entry(this, 5);
}
void CRegPrnDlg::OnClear7()
{
// TODO: Add your control notification handler code here
clear_one_entry(this, 6);
}
static void
clear_one_entry(CRegPrnDlg *dlg, int entry_no)
{
int i;
// clear all fields for the given entry
// printer ID
dlg->SetDlgItemText(IDC_PRNID1 + entry_no, "");
// Bluetooth address
for (i = 0; i < 6; i++) {
dlg->SetDlgItemText(IDC_ADDR11 + (entry_no*10) + i, "");
}
// device name
dlg->SetDlgItemText(IDC_DEV_NAME1 + entry_no, "");
// device location
dlg->SetDlgItemText(IDC_DEV_LOCATION1 + entry_no, "");
}
static unsigned int
__atoi(char *str, unsigned int base)
{
unsigned int result = 0, i = 0, curr_value;
if (str == NULL) return(0);
/* check the base */
if (str[i] == '0' && (str[i+1] == 'x' || str[i+1] == 'X')) {
base = 16;
i += 2;
}
while (str[i] != '\0') {
if (str[i] >= '0' && str[i] <= '9') {
curr_value = str[i] - '0';
}
else if (base == 16 && str[i] >= 'a' && str[i] <= 'f') {
curr_value = str[i] - 'a' + 10;
}
else if (base == 16 && str[i] >= 'A' && str[i] <= 'F') {
curr_value = str[i] - 'A' + 10;
}
else {
/* invalid char */
return(0);
}
result = base * result + curr_value;
i++;
}
return(result);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -