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

📄 regprndlg.cpp

📁 Bluetooth 2.0 虚拟成串口 设置代码对蓝牙虚拟串口的设备编写程序有很大的帮助
💻 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 + -