查看完整版本: uuprog开发教程:上位机软件设置

liyf 发表于 2014-11-25 16:48:37

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:09

讲解通俗易懂, 不过还是感觉有难度啊

liyf 发表于 2014-11-25 17:07:23

shangdawei 发表于 2014-11-25 16:56
讲解通俗易懂, 不过还是感觉有难度啊

已经省略很多繁琐的了,再简就快说不出话了,注意代码理解,基本差不多的,看懂前几行后面的基本懂了

电子 发表于 2014-11-27 08:08:39

能否多增加点中文性质的解释,这样便于理解!初看还是有难度的!:)

liyf 发表于 2014-11-27 10:00:37

电子 发表于 2014-11-27 08:08
能否多增加点中文性质的解释,这样便于理解!初看还是有难度的!

看不懂就奋英语字典,以后很多都会是英文注释,编程人员都会有这习愦,想一下就知道为什么了

bywqdq 发表于 2015-1-12 09:09:30

不会vc啊,还得要好好研究一下。
页: [1]
查看完整版本: uuprog开发教程:上位机软件设置