uuprog开发教程:上位机软件设置
最近比较忙,教程更新会比较慢,而且后面的教程也会需要一定的理解能力了,讲解要通俗易懂又要不烦锁还是有不少难度。针对这点,我们将会按功能分解来一步步实现,而不是一位的灌输,希望大家理解这一技巧,后面的时序编程也会采用这一模式,好处就是有一套比较完整的操作流程。上位机是主要实现的,所以代码相对比较多,需要自己有一定的代码理解能力,讲解不会太深入,不会具体到每个功能怎么实现,希望大家理解。
言归正传,这次讲的是编程器软件的设置功能,这个也是必须的,方便使用,人性化设计。
为了便于管理,没有使用ini配置文件,而是直接写到注册表中。
使用到的注册表项uuprog,这里的位置会以系统自动定位的,图上是64位系统的存放位置,xp、2003有所不同。
通过看注册项名就能理解该项的用途了,要是你不懂,请翻一下英语字典。这个就不做多解释。勾选的含义:勾选为1,不勾选为0.
程序启动时自动加载注册表参数的函数loadconfig()来初始化软件环境
void CUUProgDlg::LoadConfig()
{
HKEY myKey;
DWORD dwtype=REG_DWORD;
DWORD dwVal;
DWORD dwsize=sizeof(DWORD);
LPCTSTR myData="Software\\UUProg\\";
long ret0 = RegOpenKeyEx(HKEY_LOCAL_MACHINE,myData,0,KEY_READ,&myKey);
if(ret0 != ERROR_SUCCESS)
{
// char *sclass="";//ÀàÃûÖ¸¶¨Îª¿Õ
RegCreateKeyEx(HKEY_LOCAL_MACHINE,myData,0,NULL,REG_OPTION_NON_VOLATILE,KEY_READ|KEY_WRITE,NULL,&myKey,NULL);
//ProgAuto
m_iProgAuto = 0;
RegSetValueEx(myKey, "ProgAuto",NULL,REG_DWORD,(LPBYTE)&m_iProgAuto,sizeof(DWORD));
//m_iFiletype
m_iFiletype = 0;
RegSetValueEx(myKey, "Filetype",NULL,REG_DWORD,(LPBYTE)&m_iFiletype,sizeof(DWORD));
//m_bReadID
m_bReadID = true;
RegSetValueEx(myKey, "ReadID",NULL,REG_DWORD,(LPBYTE)&m_bReadID,sizeof(DWORD));
//m_bCheckBlank
m_bCheckBlank = true;
RegSetValueEx(myKey, "CheckBlank",NULL,REG_DWORD,(LPBYTE)&m_bCheckBlank,sizeof(DWORD));
//m_bErase
m_bErase = true;
RegSetValueEx(myKey, "Erase",NULL,REG_DWORD,(LPBYTE)&m_bErase,sizeof(DWORD));
//m_bPrograme
m_bPrograme = true;
RegSetValueEx(myKey, "Programe",NULL,REG_DWORD,(LPBYTE)&m_bPrograme,sizeof(DWORD));
//m_bVerify
m_bVerify = true;
RegSetValueEx(myKey, "Verify",NULL,REG_DWORD,(LPBYTE)&m_bVerify,sizeof(DWORD));
//m_bLockbit
m_bLockbit = true;
RegSetValueEx(myKey, "Lockbit",NULL,REG_DWORD,(LPBYTE)&m_bLockbit,sizeof(DWORD));
//m_bBeepon
m_bBeepon = true;
RegSetValueEx(myKey, "Beepon",NULL,REG_DWORD,(LPBYTE)&m_bBeepon,sizeof(DWORD));
//m_bSavelog
m_bSavelog = true;
RegSetValueEx(myKey, "Savelog",NULL,REG_DWORD,(LPBYTE)&m_bSavelog,sizeof(DWORD));
//m_bCounton
m_bCounton = true;
RegSetValueEx(myKey, "Counton",NULL,REG_DWORD,(LPBYTE)&m_bCounton,sizeof(DWORD));
//m_bCurNum
m_iCurNum = 0;
RegSetValueEx(myKey, "CurNum",NULL,REG_DWORD,(LPBYTE)&m_iCurNum,sizeof(DWORD));
//m_bMaxNum
m_iMaxNum = 100;
RegSetValueEx(myKey, "MaxNum",NULL,REG_DWORD,(LPBYTE)&m_iMaxNum,sizeof(DWORD));
//m_bFailureNum
m_iFailureNum = 0;
RegSetValueEx(myKey, "FailureNum",NULL,REG_DWORD,(LPBYTE)&m_iFailureNum,sizeof(DWORD));
//m_bSuccessNum
m_iSuccessNum = 0;
RegSetValueEx(myKey, "SuccessNum",NULL,REG_DWORD,(LPBYTE)&m_iSuccessNum,sizeof(DWORD));
//last device
RegSetValueEx(myKey, "LastDevice",NULL,REG_SZ,(CONST BYTE *)(LPCTSTR)m_sDeviceName,m_sDeviceName.GetLength()+1);
//last file
RegSetValueEx(myKey, "LastFile",NULL,REG_SZ,(CONST BYTE *)(LPCTSTR)m_sLoadFileName,m_sLoadFileName.GetLength()+1);
}
else
{
// RegQueryValueEx(myKey,"RegisteredOwner",NULL,REG_DWORD,owner_Get,sizeof(DWORD));
//ProgAuto
RegQueryValueEx(myKey, "ProgAuto",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_iProgAuto = dwVal;
//m_iFiletype
RegQueryValueEx(myKey, "Filetype",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_iFiletype = dwVal;
//m_bReadID
RegQueryValueEx(myKey, "ReadID",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_bReadID = dwVal;
//m_bCheckBlank
RegQueryValueEx(myKey, "CheckBlank",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_bCheckBlank = dwVal;
//m_bErase
RegQueryValueEx(myKey, "Erase",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_bErase = dwVal;
//m_bPrograme
RegQueryValueEx(myKey, "Programe",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_bPrograme = dwVal;
//m_bVerify
RegQueryValueEx(myKey, "Verify",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_bVerify = dwVal;
//m_bLockbit
RegQueryValueEx(myKey, "Lockbit",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_bLockbit = dwVal;
//m_bBeepon
RegQueryValueEx(myKey, "Beepon",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_bBeepon = dwVal;
//m_bSavelog
RegQueryValueEx(myKey, "Savelog",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_bSavelog = dwVal;
//m_bCounton
RegQueryValueEx(myKey, "Counton",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_bCounton = dwVal;
//m_bCurNum
RegQueryValueEx(myKey, "CurNum",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_iCurNum = dwVal;
//m_bMaxNum
RegQueryValueEx(myKey, "MaxNum",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_iMaxNum = dwVal;
//m_bFailureNum
RegQueryValueEx(myKey, "FailureNum",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_iFailureNum = dwVal;
//m_bSuccessNum
RegQueryValueEx(myKey, "SuccessNum",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
m_iSuccessNum = dwVal;
//last device
dwtype = REG_SZ;
LPBYTE getValue = new BYTE;
dwsize = 20;
RegQueryValueEx(myKey, "LastDevice",NULL,&dwtype,getValue,&dwsize);
m_sDeviceName = getValue;
//last file
dwsize = 100;
RegQueryValueEx(myKey, "LastFile",NULL,&dwtype,getValue,&dwsize);
m_sLoadFileName = getValue;
}
RegCloseKey(myKey);
}程序退出时又调用writeconfig()函数将参数保存。
void CUUProgDlg::WriteConfig()
{
HKEY myKey;
// DWORD dwtype=REG_DWORD;
// DWORD dwVal;
// DWORD dwsize=sizeof(DWORD);
LPCTSTR myData="Software\\UUProg\\";
long ret0 = RegOpenKeyEx(HKEY_LOCAL_MACHINE,myData,0,KEY_WRITE,&myKey);
if(ret0 == ERROR_SUCCESS)
{
//ProgAuto
RegSetValueEx(myKey, "ProgAuto",NULL,REG_DWORD,(LPBYTE)&m_iProgAuto,sizeof(DWORD));
//m_iFiletype
RegSetValueEx(myKey, "Filetype",NULL,REG_DWORD,(LPBYTE)&m_iFiletype,sizeof(DWORD));
//m_bReadID
RegSetValueEx(myKey, "ReadID",NULL,REG_DWORD,(LPBYTE)&m_bReadID,sizeof(DWORD));
//m_bCheckBlank
RegSetValueEx(myKey, "CheckBlank",NULL,REG_DWORD,(LPBYTE)&m_bCheckBlank,sizeof(DWORD));
//m_bErase
RegSetValueEx(myKey, "Erase",NULL,REG_DWORD,(LPBYTE)&m_bErase,sizeof(DWORD));
//m_bPrograme
RegSetValueEx(myKey, "Programe",NULL,REG_DWORD,(LPBYTE)&m_bPrograme,sizeof(DWORD));
//m_bVerify
RegSetValueEx(myKey, "Verify",NULL,REG_DWORD,(LPBYTE)&m_bVerify,sizeof(DWORD));
//m_bLockbit
RegSetValueEx(myKey, "Lockbit",NULL,REG_DWORD,(LPBYTE)&m_bLockbit,sizeof(DWORD));
//m_bBeepon
RegSetValueEx(myKey, "Beepon",NULL,REG_DWORD,(LPBYTE)&m_bBeepon,sizeof(DWORD));
//m_bSavelog
RegSetValueEx(myKey, "Savelog",NULL,REG_DWORD,(LPBYTE)&m_bSavelog,sizeof(DWORD));
//m_bCounton
RegSetValueEx(myKey, "Counton",NULL,REG_DWORD,(LPBYTE)&m_bCounton,sizeof(DWORD));
//m_bCurNum
RegSetValueEx(myKey, "CurNum",NULL,REG_DWORD,(LPBYTE)&m_iCurNum,sizeof(DWORD));
//m_bMaxNum
RegSetValueEx(myKey, "MaxNum",NULL,REG_DWORD,(LPBYTE)&m_iMaxNum,sizeof(DWORD));
//m_bFailureNum
RegSetValueEx(myKey, "FailureNum",NULL,REG_DWORD,(LPBYTE)&m_iFailureNum,sizeof(DWORD));
//m_bSuccessNum
RegSetValueEx(myKey, "SuccessNum",NULL,REG_DWORD,(LPBYTE)&m_iSuccessNum,sizeof(DWORD));
//last device
RegSetValueEx(myKey, "LastDevice",NULL,REG_SZ,(CONST BYTE *)(LPCTSTR)m_sDeviceName,m_sDeviceName.GetLength()+1);
//last file
RegSetValueEx(myKey, "LastFile",NULL,REG_SZ,(CONST BYTE *)(LPCTSTR)m_sLoadFileName,m_sLoadFileName.GetLength()+1);
}
else
{
return;
}
RegCloseKey(myKey);
}其他每个点选操作都有相应的函数处理,最好自己看代码。代码比较简单,只是个值的切换处理。
配置窗口主要处理函数就是确定按钮的功能了。
void CProgOption::OnOK()
{
// TODO: Add extra validation here
UpdateData(true);
parent->m_bBeepon = m_bBeepon;
parent->m_bCheckBlank = m_bCheckBlank;
parent->m_bCounton = m_bCounton;
parent->m_bErase = m_bErase;
parent->m_bLockbit = m_bLockbit;
parent->m_bPrograme = m_bPrograme;
parent->m_bReadID = m_bReadID;
parent->m_bSavelog = m_bSavelog;
parent->m_bVerify = m_bVerify;
parent->m_iCurNum = atoi(m_sCurNum);
parent->m_iFailureNum = atoi(m_sFailureNum);
parent->m_iMaxNum = atoi(m_sMaxNum);
parent->m_iSuccessNum = atoi(m_sSuccessNum);
parent->m_iFiletype = m_iFiletype;
parent->m_iProgAuto = m_iProgAuto;
parent->SetCount();
parent->SetAppLog("配置已修改");
CDialog::OnOK();
}
这里主要的操作就是对注册表的操作,这个也算是个难点了,需要大家多练习,熟悉操作值的赋值读取等。
讲解通俗易懂, 不过还是感觉有难度啊 shangdawei 发表于 2014-11-25 16:56
讲解通俗易懂, 不过还是感觉有难度啊
已经省略很多繁琐的了,再简就快说不出话了,注意代码理解,基本差不多的,看懂前几行后面的基本懂了 能否多增加点中文性质的解释,这样便于理解!初看还是有难度的!:) 电子 发表于 2014-11-27 08:08
能否多增加点中文性质的解释,这样便于理解!初看还是有难度的!
看不懂就奋英语字典,以后很多都会是英文注释,编程人员都会有这习愦,想一下就知道为什么了 不会vc啊,还得要好好研究一下。
页:
[1]