DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6655|回复: 5
打印 上一主题 下一主题

[UUProg] uuprog开发教程:上位机软件设置

[复制链接]
跳转到指定楼层
楼主
发表于 2014-11-25 16:48:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
       最近比较忙,教程更新会比较慢,而且后面的教程也会需要一定的理解能力了,讲解要通俗易懂又要不烦锁还是有不少难度。针对这点,我们将会按功能分解来一步步实现,而不是一位的灌输,希望大家理解这一技巧,后面的时序编程也会采用这一模式,好处就是有一套比较完整的操作流程。
      上位机是主要实现的,所以代码相对比较多,需要自己有一定的代码理解能力,讲解不会太深入,不会具体到每个功能怎么实现,希望大家理解。

言归正传,这次讲的是编程器软件的设置功能,这个也是必须的,方便使用,人性化设计。

为了便于管理,没有使用ini配置文件,而是直接写到注册表中。

使用到的注册表项uuprog,这里的位置会以系统自动定位的,图上是64位系统的存放位置,xp、2003有所不同。
通过看注册项名就能理解该项的用途了,要是你不懂,请翻一下英语字典。这个就不做多解释。勾选的含义:勾选为1,不勾选为0.
程序启动时自动加载注册表参数的函数loadconfig()来初始化软件环境
  1. void CUUProgDlg::LoadConfig()
  2. {
  3.         HKEY myKey;
  4.         DWORD dwtype=REG_DWORD;
  5.         DWORD dwVal;
  6.         DWORD dwsize=sizeof(DWORD);
  7.         LPCTSTR myData="Software\\UUProg\\";
  8.         long   ret0 = RegOpenKeyEx(HKEY_LOCAL_MACHINE,myData,0,KEY_READ,&myKey);
  9.         if(ret0 != ERROR_SUCCESS)
  10.         {
  11.                 //   char *sclass="";  //ÀàÃûÖ¸¶¨Îª¿Õ
  12.                 RegCreateKeyEx(HKEY_LOCAL_MACHINE,myData,0,NULL,REG_OPTION_NON_VOLATILE,KEY_READ|KEY_WRITE,NULL,&myKey,NULL);
  13.                 //ProgAuto
  14.                 m_iProgAuto = 0;
  15.                 RegSetValueEx(myKey, "ProgAuto",NULL,REG_DWORD,(LPBYTE)&m_iProgAuto,sizeof(DWORD));
  16.                 //m_iFiletype
  17.                 m_iFiletype = 0;
  18.                 RegSetValueEx(myKey, "Filetype",NULL,REG_DWORD,(LPBYTE)&m_iFiletype,sizeof(DWORD));
  19.                 //m_bReadID
  20.                 m_bReadID = true;
  21.                 RegSetValueEx(myKey, "ReadID",NULL,REG_DWORD,(LPBYTE)&m_bReadID,sizeof(DWORD));
  22.                 //m_bCheckBlank
  23.                 m_bCheckBlank = true;
  24.                 RegSetValueEx(myKey, "CheckBlank",NULL,REG_DWORD,(LPBYTE)&m_bCheckBlank,sizeof(DWORD));
  25.                 //m_bErase
  26.                 m_bErase = true;
  27.                 RegSetValueEx(myKey, "Erase",NULL,REG_DWORD,(LPBYTE)&m_bErase,sizeof(DWORD));
  28.                 //m_bPrograme
  29.                 m_bPrograme = true;
  30.                 RegSetValueEx(myKey, "Programe",NULL,REG_DWORD,(LPBYTE)&m_bPrograme,sizeof(DWORD));
  31.                 //m_bVerify
  32.                 m_bVerify = true;
  33.                 RegSetValueEx(myKey, "Verify",NULL,REG_DWORD,(LPBYTE)&m_bVerify,sizeof(DWORD));
  34.                 //m_bLockbit
  35.                 m_bLockbit = true;
  36.                 RegSetValueEx(myKey, "Lockbit",NULL,REG_DWORD,(LPBYTE)&m_bLockbit,sizeof(DWORD));
  37.                 //m_bBeepon
  38.                 m_bBeepon = true;
  39.                 RegSetValueEx(myKey, "Beepon",NULL,REG_DWORD,(LPBYTE)&m_bBeepon,sizeof(DWORD));
  40.                 //m_bSavelog
  41.                 m_bSavelog = true;
  42.                 RegSetValueEx(myKey, "Savelog",NULL,REG_DWORD,(LPBYTE)&m_bSavelog,sizeof(DWORD));
  43.                 //m_bCounton
  44.                 m_bCounton = true;
  45.                 RegSetValueEx(myKey, "Counton",NULL,REG_DWORD,(LPBYTE)&m_bCounton,sizeof(DWORD));
  46.                 //m_bCurNum
  47.                 m_iCurNum = 0;
  48.                 RegSetValueEx(myKey, "CurNum",NULL,REG_DWORD,(LPBYTE)&m_iCurNum,sizeof(DWORD));
  49.                 //m_bMaxNum
  50.                 m_iMaxNum = 100;
  51.                 RegSetValueEx(myKey, "MaxNum",NULL,REG_DWORD,(LPBYTE)&m_iMaxNum,sizeof(DWORD));
  52.                 //m_bFailureNum
  53.                 m_iFailureNum = 0;
  54.                 RegSetValueEx(myKey, "FailureNum",NULL,REG_DWORD,(LPBYTE)&m_iFailureNum,sizeof(DWORD));
  55.                 //m_bSuccessNum
  56.                 m_iSuccessNum = 0;
  57.                 RegSetValueEx(myKey, "SuccessNum",NULL,REG_DWORD,(LPBYTE)&m_iSuccessNum,sizeof(DWORD));
  58.                 //last device
  59.                 RegSetValueEx(myKey, "LastDevice",NULL,REG_SZ,(CONST BYTE *)(LPCTSTR)m_sDeviceName,m_sDeviceName.GetLength()+1);
  60.                 //last file
  61.                 RegSetValueEx(myKey, "LastFile",NULL,REG_SZ,(CONST BYTE *)(LPCTSTR)m_sLoadFileName,m_sLoadFileName.GetLength()+1);
  62.         }
  63.         else
  64.         {
  65. //                RegQueryValueEx(myKey,"RegisteredOwner",NULL,REG_DWORD,owner_Get,sizeof(DWORD));
  66.                 //ProgAuto
  67.                 RegQueryValueEx(myKey, "ProgAuto",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  68.                 m_iProgAuto = dwVal;
  69.                 //m_iFiletype
  70.                 RegQueryValueEx(myKey, "Filetype",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  71.                 m_iFiletype = dwVal;
  72.                 //m_bReadID
  73.                 RegQueryValueEx(myKey, "ReadID",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  74.                 m_bReadID = dwVal;
  75.                 //m_bCheckBlank
  76.                 RegQueryValueEx(myKey, "CheckBlank",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  77.                 m_bCheckBlank = dwVal;
  78.                 //m_bErase
  79.                 RegQueryValueEx(myKey, "Erase",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  80.                 m_bErase = dwVal;
  81.                 //m_bPrograme
  82.                 RegQueryValueEx(myKey, "Programe",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  83.                 m_bPrograme = dwVal;
  84.                 //m_bVerify
  85.                 RegQueryValueEx(myKey, "Verify",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  86.                 m_bVerify = dwVal;
  87.                 //m_bLockbit
  88.                 RegQueryValueEx(myKey, "Lockbit",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  89.                 m_bLockbit = dwVal;
  90.                 //m_bBeepon
  91.                 RegQueryValueEx(myKey, "Beepon",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  92.                 m_bBeepon = dwVal;
  93.                 //m_bSavelog
  94.                 RegQueryValueEx(myKey, "Savelog",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  95.                 m_bSavelog = dwVal;
  96.                 //m_bCounton
  97.                 RegQueryValueEx(myKey, "Counton",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  98.                 m_bCounton = dwVal;
  99.                 //m_bCurNum
  100.                 RegQueryValueEx(myKey, "CurNum",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  101.                 m_iCurNum = dwVal;
  102.                 //m_bMaxNum
  103.                 RegQueryValueEx(myKey, "MaxNum",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  104.                 m_iMaxNum = dwVal;
  105.                 //m_bFailureNum
  106.                 RegQueryValueEx(myKey, "FailureNum",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  107.                 m_iFailureNum = dwVal;
  108.                 //m_bSuccessNum
  109.                 RegQueryValueEx(myKey, "SuccessNum",NULL,&dwtype,(LPBYTE)&dwVal,&dwsize);
  110.                 m_iSuccessNum = dwVal;

  111.                 //last device
  112.                 dwtype = REG_SZ;
  113.                 LPBYTE getValue = new BYTE[50];
  114.                 dwsize = 20;
  115.                 RegQueryValueEx(myKey, "LastDevice",NULL,&dwtype,getValue,&dwsize);
  116.                 m_sDeviceName = getValue;
  117.                 //last file
  118.                 dwsize = 100;
  119.                 RegQueryValueEx(myKey, "LastFile",NULL,&dwtype,getValue,&dwsize);
  120.                 m_sLoadFileName = getValue;
  121.         }
  122.         RegCloseKey(myKey);
  123. }
复制代码
程序退出时又调用writeconfig()函数将参数保存。
  1. void CUUProgDlg::WriteConfig()
  2. {
  3.         HKEY myKey;
  4. //        DWORD dwtype=REG_DWORD;
  5. //        DWORD dwVal;
  6. //        DWORD dwsize=sizeof(DWORD);
  7.         LPCTSTR myData="Software\\UUProg\\";
  8.         long   ret0 = RegOpenKeyEx(HKEY_LOCAL_MACHINE,myData,0,KEY_WRITE,&myKey);
  9.         if(ret0 == ERROR_SUCCESS)
  10.         {
  11.                 //ProgAuto
  12.                 RegSetValueEx(myKey, "ProgAuto",NULL,REG_DWORD,(LPBYTE)&m_iProgAuto,sizeof(DWORD));

  13.                 //m_iFiletype
  14.                 RegSetValueEx(myKey, "Filetype",NULL,REG_DWORD,(LPBYTE)&m_iFiletype,sizeof(DWORD));

  15.                 //m_bReadID
  16.                 RegSetValueEx(myKey, "ReadID",NULL,REG_DWORD,(LPBYTE)&m_bReadID,sizeof(DWORD));

  17.                 //m_bCheckBlank
  18.                 RegSetValueEx(myKey, "CheckBlank",NULL,REG_DWORD,(LPBYTE)&m_bCheckBlank,sizeof(DWORD));

  19.                 //m_bErase
  20.                 RegSetValueEx(myKey, "Erase",NULL,REG_DWORD,(LPBYTE)&m_bErase,sizeof(DWORD));

  21.                 //m_bPrograme
  22.                 RegSetValueEx(myKey, "Programe",NULL,REG_DWORD,(LPBYTE)&m_bPrograme,sizeof(DWORD));

  23.                 //m_bVerify
  24.                 RegSetValueEx(myKey, "Verify",NULL,REG_DWORD,(LPBYTE)&m_bVerify,sizeof(DWORD));

  25.                 //m_bLockbit
  26.                 RegSetValueEx(myKey, "Lockbit",NULL,REG_DWORD,(LPBYTE)&m_bLockbit,sizeof(DWORD));

  27.                 //m_bBeepon
  28.                 RegSetValueEx(myKey, "Beepon",NULL,REG_DWORD,(LPBYTE)&m_bBeepon,sizeof(DWORD));

  29.                 //m_bSavelog
  30.                 RegSetValueEx(myKey, "Savelog",NULL,REG_DWORD,(LPBYTE)&m_bSavelog,sizeof(DWORD));

  31.                 //m_bCounton
  32.                 RegSetValueEx(myKey, "Counton",NULL,REG_DWORD,(LPBYTE)&m_bCounton,sizeof(DWORD));

  33.                 //m_bCurNum
  34.                 RegSetValueEx(myKey, "CurNum",NULL,REG_DWORD,(LPBYTE)&m_iCurNum,sizeof(DWORD));

  35.                 //m_bMaxNum
  36.                 RegSetValueEx(myKey, "MaxNum",NULL,REG_DWORD,(LPBYTE)&m_iMaxNum,sizeof(DWORD));

  37.                 //m_bFailureNum
  38.                 RegSetValueEx(myKey, "FailureNum",NULL,REG_DWORD,(LPBYTE)&m_iFailureNum,sizeof(DWORD));

  39.                 //m_bSuccessNum
  40.                 RegSetValueEx(myKey, "SuccessNum",NULL,REG_DWORD,(LPBYTE)&m_iSuccessNum,sizeof(DWORD));

  41.                 //last device
  42.                 RegSetValueEx(myKey, "LastDevice",NULL,REG_SZ,(CONST BYTE *)(LPCTSTR)m_sDeviceName,m_sDeviceName.GetLength()+1);
  43.                 //last file
  44.                 RegSetValueEx(myKey, "LastFile",NULL,REG_SZ,(CONST BYTE *)(LPCTSTR)m_sLoadFileName,m_sLoadFileName.GetLength()+1);
  45.         }
  46.         else
  47.         {
  48.                 return;
  49.         }
  50.         RegCloseKey(myKey);

  51. }
复制代码
其他每个点选操作都有相应的函数处理,最好自己看代码。代码比较简单,只是个值的切换处理。
配置窗口主要处理函数就是确定按钮的功能了。
  1. void CProgOption::OnOK()
  2. {
  3.         // TODO: Add extra validation here
  4.         UpdateData(true);
  5.         parent->m_bBeepon = m_bBeepon;
  6.         parent->m_bCheckBlank = m_bCheckBlank;
  7.         parent->m_bCounton = m_bCounton;
  8.         parent->m_bErase = m_bErase;
  9.         parent->m_bLockbit = m_bLockbit;
  10.         parent->m_bPrograme = m_bPrograme;
  11.         parent->m_bReadID = m_bReadID;
  12.         parent->m_bSavelog = m_bSavelog;
  13.         parent->m_bVerify = m_bVerify;
  14.         parent->m_iCurNum = atoi(m_sCurNum);
  15.         parent->m_iFailureNum = atoi(m_sFailureNum);
  16.         parent->m_iMaxNum = atoi(m_sMaxNum);
  17.         parent->m_iSuccessNum = atoi(m_sSuccessNum);
  18.         parent->m_iFiletype = m_iFiletype;
  19.         parent->m_iProgAuto = m_iProgAuto;
  20.         parent->SetCount();
  21.         parent->SetAppLog("配置已修改");

  22.         CDialog::OnOK();
  23. }
复制代码
这里主要的操作就是对注册表的操作,这个也算是个难点了,需要大家多练习,熟悉操作值的赋值读取等。




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
沙发
发表于 2014-11-25 16:56:09 | 只看该作者
讲解通俗易懂, 不过还是感觉有难度啊
板凳
 楼主| 发表于 2014-11-25 17:07:23 | 只看该作者
shangdawei 发表于 2014-11-25 16:56
讲解通俗易懂, 不过还是感觉有难度啊

已经省略很多繁琐的了,再简就快说不出话了,注意代码理解,基本差不多的,看懂前几行后面的基本懂了
地板
发表于 2014-11-27 08:08:39 | 只看该作者
能否多增加点中文性质的解释,这样便于理解!初看还是有难度的!
5#
 楼主| 发表于 2014-11-27 10:00:37 来自手机 | 只看该作者
电子 发表于 2014-11-27 08:08
能否多增加点中文性质的解释,这样便于理解!初看还是有难度的!

看不懂就奋英语字典,以后很多都会是英文注释,编程人员都会有这习愦,想一下就知道为什么了
6#
发表于 2015-1-12 09:09:30 | 只看该作者
不会vc啊,还得要好好研究一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-26 22:10 , 耗时 0.123812 秒, 24 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表