2022年中国体彩投注系统演示界面设计说明书_第1页
2022年中国体彩投注系统演示界面设计说明书_第2页
2022年中国体彩投注系统演示界面设计说明书_第3页
2022年中国体彩投注系统演示界面设计说明书_第4页
2022年中国体彩投注系统演示界面设计说明书_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中国体彩投注系统演示界面设计说明书(MiniGUI 版)一、需求分析:1有登录界面,需用户输入代号和密码,输入正确方可进入 系统;代号由体彩中心指定,密码可自行修改;2支持键盘挑选、切换功能;包括挑选菜单、菜单项,挑选 各个按钮,在各控件间进行切换;3状态栏显示当前日期和时间,标题栏显示当前进行操作的 销售员的代号;4要表达硬件设计的特点; 具体为:要能够启动网卡和 Modem 的接收和传输功能;能够打印样票;二、概要设计:RedHat Linux7.3 下的 MiniGUI1.2.2进1开发平台:选用行开发;2模块划分: 主窗口:包含标题栏、状态栏、各菜单项; 菜单:其他:修改密码、打印、帮

2、忙、退出;文件传输:网卡传输、Modem传输;文件接收:启动网卡接收、停止网卡接收、启动 Modem接收;开头时停止网卡接收菜单项显灰(不行用) ,启动网卡接收时,该菜 单项变灰(不行用) ,停止网卡接收菜单 项被激活;报表:日报表、班报表、时段报表;(该功能暂不实现,菜单项显灰) ; 修改密码对话框:要求输入旧密码,新密码,确认新密 码;按确定提交新密码,按取消不修改密码; 打印消息框: 提示打印机是否预备好,预备好就调用打 印样票程序; 帮忙消息框:给出一些版本信息;是就退出 退出消息框: 提示用户是拒绝定要退出系统,系统,关机; 网卡传输对话框:要求用户输入IP 地址号和要传输的文件名,

3、文件名可用文 件挑选对话框进行挑选; Modem传输对话框:要求用户输入电话号码和要传输的 文件名,文件名可用文件挑选对话框进行挑选; Modem传输 / 接收状态框:在用户挑选该项功能时,弹 出提示,说明该项功能正在进行中; 系统登录对话框: 要求用户输入正确的销售员代号和密 码;取消就退出系统,关机;.三、具体设计:1主窗口:用 MiniGUIMain 搭建主窗口框架, 指定主窗口消息处 理函数,指定菜单创建函数,建立主窗口消息循环;由于要在标题栏中显示当前操作员的代号,故需将系 统登录时输入的销售员代号做为全局变量,在给窗口标题 栏赋值时加入;在建立主窗口框架之前先显示登录对话框;由于在

4、主窗口内建立状态栏比较困难,故考虑“ 借用” 开发平台mginit的状态栏,具体实现详见“ 系统配置” ;2各菜单的建立:先创建各菜单项,再创建菜单条;其中,需要显灰 的菜单项,给 MENUITEMINFO 结构的 state 成员赋值为 1,其余赋值为 0;3创建各对话框:使用 DLGTEMPLATE 结构创建各对话框, 再在 CTRLDATA 结构中为对话框创建各控件;在 DisplayDialog 中为对话 框指定该对话框的控件属性和对话框处理函数;4以上实现可详见代码部分;以下为开发中的几处难点: 绘制菜单条的边框:在 主 窗 口 处 理 过 程 ( MainWinProc ) 中 添

5、 加 MSG_PAINT消息: hdc = GetDChWnd;Draw3DUpThinFramehdc,4,26,188,55,PIXEL_invalid ;Draw3DUpThinFramehdc,189,26,399,55,PIXEL_inval id;Draw3DUpThinFramehdc,400,26,610,55,PIXEL_inval id;Draw3DUpThinFramehdc,611,26,795,55,PIXEL_inval id; ReleaseDChdc; 其 中Draw3DUpThinFramehdc,lx,ty,rx,ty,color 函数即 为 根 据 所 给

6、 坐 标 绘 制 突 起 边 框 ; 可 在 /lib libminigui-1.2.2srcguimenu.c中 第1221行HiliteMenuBarItem函数中设置打印函数获得各菜单项的具体坐标; (原系统生成的菜单是不能绘制边框 的,该函数是在鼠标移动时使菜单边框凸起或是选中 菜单时使菜单边框凹下; ) 使用键盘键挑选菜单:由于 MiniGUI 的快捷键功能存在 Bug,故需自己进 行一些处理以实现键盘挑选菜单的功能;在 MainWinProc 函数的 MSG_KEYDOWN 消息中添加: case SCANCODE_F1: TrackMenuBarhWnd,0; break; ca

7、se SCANCODE_F2: TrackMenuBarhWnd,1; break; case SCANCODE_F3: TrackMenuBarhWnd,2; break; case SCANCODE_F4: TrackMenuBarhWnd,3; break; 即 可 实 现 键 盘 键 与 菜 单 项 一 一 对 应 ; 其 中 TrackMenuBarhWnd,pos 函数中的 pos 参数可用 0,1,2 来表示菜单条的第1、2、3 项;各下拉菜单项的键盘挑选功能实现详见“ 系统配置” ; Modem传输 / 接收状态窗:分 别 创 建 两 个 窗 口 ( MR.c-Modem 接

8、收 、MT.c-Modem 传输);以 Modem传输为例, 在用户按下Modem传输对话框的确定按钮时,先隐匿该对话框, 然后生成传输状态窗口,提示用户传输正在进行,之后 调用 Modem传输程序 send_modem,传输终止之后隐匿 状态窗口,弹出消息框,返回主函数之后再关闭掉 Modem传输对话框;此处难点在于该状态窗口是以窗口 的形式仍是对话框的形式创建;如用对话框的形式创 建,那么必需有一个消息触发才能调用 send_modem函数,而状态窗口除了MSG_CREATE 和 MSG_CLOSE 消息,是不需要响应别的消息的,但是在这两个消息中调用 send_modem都不合适;而使用

9、窗口创建的话,只要在窗口创建之后调用 分; 编辑框的子类化:send_modem就可以; 具体见代码部有一些编辑框需要限制其输入,如 IP 地址编辑框、电话号码编辑框、密码编辑框和销售员代号编辑框等;应留意以下两点 : a.创 建 对 话 框 中 的 控 件 可 不 用 在CTRLDATA CtrlInitProgress中完成,可在对话框消息处理函数中响应 MSG_CREATE 消息,用 CreateWindow 的方法生成,这样以生成控件句柄,好进行掌握;b. 不能如此生成全部控件,必需在CtrlInitProgress中生成至少一个以上控件; (即该结构不能是空的)子类化代码部分详见代码

10、(eig.c )中 1152 行DigitEdit 函数部分, 该函数屏蔽掉了除数字和小数点之外的全部键盘输入;仍有一些编辑框须掌握其输入长度,可在生成编辑 框 之 后 发 送EM_LIMITTEXT 消 息 , 如 :SendMessagehEdit,EM_LIMITTEXT,6,0 ; 菜单条显灰:可调用 EnableMenuItemhmnu,item,flag 函数,其中 flag 为 TRUE时就显灰(该菜单不行用) ; 登录系统代号和密码的猎取:采纳文件来存放销售员的代码,故每次登录时需要 读文件,在用户修改密码时仍要写文件;代号和密码按行写,必需都为六位数字,代号和密码之间以“|

11、” 分隔,不同用户之间以“&” 分隔,并换行;读密码文件的函数是第1229 行(eig.c )findkey ;使用一个循环,当未遇到换行符时,将一行字符(包括 用户代号和密码)存入一个字符数组中,然后比较数组 的前六位是否与用户输入的销售员代号相等,相等就继 续判定数组的第七位起后六位(密码)是否相等,否就 读取文件下一行, 即下一个用户代号和密码; (由于代号和密码都是指定长度,故可知其在数组的哪个位置上;)当代号和密码都相等时,返回 返回 0,可连续输入;1,登录系统;否就写密码文件的函数是第 1266 行的 ChangePWD;第一与都密码文件相像,先要判定输入的旧密码是否与原密码相等

12、,不等就不答应修改;其次,判定两次输入密码是否一样,密码位数是否小于6 位;最终,如符合修改要求,用fseekfp,-8L,1在文件中定位,指定密码写入文件的位置, 确保将原密码掩盖, 再用 fputstmp,fp将新密码写入文件; 杀死文件接收进程和退出mginit系统:在第 1170 行的 ExeclSys 函数中,使用了系统调用来杀死进程; (ExitSys-退出系统也类似) ;第一调用“ps -C recvf -o pid= num” 来获得进程号,并将其输出到 num文件中,然后从该文件中读出进程号 i ,再调用 kill i 来杀死进程;至此,代码部分基本终止;四、系统配置:Min

13、iGUI在开发过程中不仅写了大量的代码,仍对系统的源代码做了许多修改,以达到完善我们的界面的目的;现将所作修改一一列出备案;1libminigui-1.2.2srcguimenu.c:在该文件中主要是针对菜单快捷键做改动;原系统中 挑选下拉菜单中的菜单项只能用上下方向键来挑选,而需 求分析中指出,下拉菜单的挑选要实现用数字键来掌握;如按 1 键挑选第一个菜单项, 按 2 键就挑选其次个菜单项;在menu.c的 第2143行的static void mnuTrackMenuWithKey PTRACKMENUINFO ptmi,int message, int scan, DWORD statu

14、s 函数,就是处理按键 挑选菜单的函数;在原函数中,按下上下方向键就会调用 mnuGetNextMenuItem pcurtmi, pcurmi 或 函数以获得当前 mnuGetPrevMenuItem pcurtmi, pcurmi 所选菜单项的上一个或下一个菜单;需要加入自己的处理 代码,使数字按键和各菜单项一一对应起来;考虑目前项目的实际情形,设定下拉菜单的最大数目为 8 项;定义一个PMENUITEM数组,除掉分隔条,将菜单项链表中的结点(即各菜单项)存入数组中;具体代码如 下:(在第 2178 行加入)PMENUITEM mitem8; PMENUITEM head; int i =

15、 0; /将当前弹出下拉菜单的标题栏赋值给headhead = pcurtmi-pmi;/ 放入数组的第一个单元 mitem0 = head; / 假如该菜单有下拉菜单,就将第一个菜单项放入数组 的其次个单元ifhead-type = TYPE_PPPMENU head = head-submenu; mitem1 = head; i = 1;数组/ 当菜单项非空且少于 8 个时,依次将链表中结点放入while head-next .= NULL & i next & head-next-mnutype & MFT_SEPARATOR head-next = head-next-next; m

16、itemi = head-next; head = head-next; 处理按键消息,将各数字键与菜单项一一对应:if message = MSG_KEYDOWN switch scan case SCANCODE_1: case SCANCODE_2: case SCANCODE_3: case SCANCODE_4: case SCANCODE_5: case SCANCODE_6: case SCANCODE_7: ifscan = SCANCODE_1 /* 假如下拉菜单数目不少于 1 个 * 就按键后将要指向的菜单赋值为 * 数组的第一个值 */ ifi = 1 pnewmi =

17、mitem1; /* 否就指向空,如不指向空,该指针 *指向未知区域,会出错*/ else pnewmi = NULL; / 下同 else ifscan = SCANCODE_2 ifi = 2 pnewmi = mitem2; else pnewmi = NULL; else ifscan = SCANCODE_3 ifi = 3 pnewmi = mitem3; else pnewmi = NULL; else ifscan = SCANCODE_4 ifi = 4 pnewmi = mitem4; else pnewmi = NULL; else ifscan = SCANCODE_5

18、 ifi = 5 pnewmi = mitem5; else pnewmi = NULL; else ifscan = SCANCODE_6 ifi = 6 pnewmi = mitem6; else pnewmi = NULL; else ifscan = SCANCODE_7 ifi = 7 pnewmi = mitem7; else pnewmi = NULL; ifpnewmi = NULL break; / 如将选中菜单不是当前菜单 if pnewmi .= pcurmi / 当前菜单复原不被选中状态 if pcurmi mnuHiliteMenuItem pcurtmi, pcur

19、mi, FALSE; /* 将选中菜单置为选中状态,同时将当前菜 * 单置为选中菜单 */ if pnewmi mnuHiliteMenuItem pcurtmi, pnewmi, TRUE; pcurtmi-philite = pnewmi; break; 选中菜单后要执行该菜单项的操作,在第 2369 行中加 入代码: else if message = MSG_KEYUP switch scan case SCANCODE_1: case SCANCODE_2: case SCANCODE_3: case SCANCODE_4: case SCANCODE_5: case SCANCOD

20、E_6: case SCANCODE_7: / 菜单项为空、分隔条、显灰时返回 if pcurmi = NULL return; if pcurmi-mnutype & MFT_SEPARATOR return; if pcurmi-mnustate & MFS_DISABLED return; / 有第三级菜单时弹出 if pcurmi-submenu mnuOpenNewSubMenu pcurtmi, pcurmi-submenu, pcurtmi-rc.right, mnuGetMenuItemY pcurtmi, pcurmi; return; if pcurmi & pcurmi-

21、type .= TYPE_PPPMENU & pcurmi-submenu = NULL hwnd = ptmi-hwnd; id = pcurmi-id; / 关闭菜单 SendMessage HWND_DESKTOP, MSG_CLOSEMENU, 0, 1; if flags & TPM_SYSCMD / 执行系统命令 SendNotifyMessage hwnd, MSG_SYSCOMMAND, id, 0; else /执行菜单命令hwnd, SendNotifyMessage MSG_COMMAND, id, 0; if flags & TPM_DESTROY / 销毁菜单 Des

22、troyMenu hmnu; break; 2libminigui-1.2.2includefiledlg.h:由于对系统字体做了更换,而控件大小并未相应改动,文件打开对话框是做为控件调用的,故要对其大小进行更换;第 126 行:return OpenFileDialogEx hWnd, 50, 50, 330, 280, pmwfi; 3libminigui-1.2.2mywindowsfiledlg.c: 同上;第 557 行:int OpenFileDialogEx HWND hWnd, int lx, int w, int h, PFILEDLGDATA int ty, pfdi in

23、t LstH 多减掉 10;以下代码留意控件大小及坐标的变化:CTRLDATA WinFileCtrl = button, WS_VISIBLE | WS_TABSTOP , 2*SPACE_WIDTH+totalW*2/5 , SPACE_HEIGHT, 90, 28, IDC_UP, 上一级目录 , 0 , listbox, WS_VISIBLE | WS_TABSTOP | LBS_NOTIFY | WS_VSCROLL | WS_BORDER | LBS_SORT, SPACE_WIDTH+10, LstTY+10, totalW*2/5, LstH, IDC_DIRCHOISE, N

24、ULL, 0 , listbox,WS_VISIBLE | WS_TABSTOP | LBS_NOTIFY | WS_VSCROLL | WS_BORDER | LBS_SORT, 2*SPACE_WIDTH+totalW*2/5 + 30, LstTY + 10, totalW*3/5, LstH, IDC_FILECHOISE, NULL, 0 , static, WS_VISIBLE | SS_LEFT, SPACE_WIDTH+10, LstH+LstTY+SPACE_HEIGHT + 10, 4*GetSysCCharWidth + 30, GetSysCharHeight+10,

25、IDC_STATIC1, 当 前路径 , 0 , static, WS_VISIBLE | SS_LEFT, 2*SPACE_WIDTH+4*GetSysCCharWidth + 50, LstH+LstTY+SPACE_HEIGHT + 10, totalW-4*GetSysCCharWidth-3*SPACE_WI DTH, GetSysCharHeight+10, IDC_PATH, , 0 , static, WS_VISIBLE | SS_LEFT, SPACE_WIDTH+10, LstH+LstTY+2*SPACE_HEIGHT+GetSysCharHeight+30, 2*Ge

26、tSysCCharWidth + 20, GetSysCharHeight+10, 0 ,IDC_STATIC2, 文件 , edit,WS_VISIBLE | WS_TABSTOP | WS_BORDER LBS_NOTIFY, 2*SPACE_WIDTH+2*GetSysCCharWidth + 40, LstH+LstTY+2*SPACE_HEIGHT+GetSysCharHeight +30, totalW-2*GetSysCCharWidth-3*SPACE_WIDTH, 21, IDC_FILENAME, NULL, 0 , button, WS_VISIBLE | WS_TABS

27、TOP | BS_PUSHBUTTON | WS_GROUP, totalW-2*40*2/5+SPACE_WIDTH, LstH+LstTY+3*SPACE_HEIGHT+GetSysCharHeig ht+55,70 ,28, IDOK, 确认 , 0 , button, WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON, totalW-2*40*3/5+2*SPACE_WIDTH+40, LstH+LstTY+3*SPACE_HEIGHT+GetSysCharHeig ht+55, 70, 28, IDCANCEL, 取消 , 0 ; DLGTEMPLATE

28、 WinFileDlg = WS_BORDER WS_EX_NONE,| WS_CAPTION | WS_MINIMIZEBOX, lx, ty, w+40, h+40, NULL, 0, 0, 9, NULL ;4mde-1.2.2mginitmginit.rc:该文件更换如下:mginitnr=1autostart=0app0path=./EIGdemo/name=eig layer= tip=EIGdemo icon=res/kcmx.gifnr 是在 mginit的状态栏上放应用程序的图标的个数,autostart是启动 mginit时,第几个应用程序就自动运行;Path 是该应用程序

29、的存放路径,name是该应用程序的名称,layer是该应用程序所在的层数,tip是当鼠标放在图标上时显示的提示, icon 是图标的存放位置;5mde-1.2.2mginitmginit.c:启动 mginit 的主函数; 由于自己没有做出状态栏,故需要使用其中的状态栏;第 156 行 static void on_change_layer int op, MG_Layer* layer, MG_Client* client,将该函数屏蔽掉;这样状态栏上就不会显示应用程序的层;将第 245 行屏蔽掉;不再调用on_change_layer函数;将第 263、264 行屏蔽掉,不再弹出系统提示对

30、话框;第 252 行改动如下:if SetDesktopRect 0, g_rcScr.bottom - HEIGHT_TASKBAR, g_rcScr.right, g_rcScr.bottom = 0 不再减去输入法框所占空间(本程序中不需使用输入 法);6mde-1.2.2mginittaskbar.h:定义状态栏的各控件的 小的改动:ID 和大小,改动如下,留意大#define HEIGHT_TASKBAR 35#define _ID_TIME_STATIC 110 #define _ID_LABEL_STATIC 130 #define _ID_LAYER_BOX 200#defin

31、e _MARGIN 2 #define _HEIGHT_CTRL 28 #define _WIDTH_TIME 270 #define _WIDTH_APPS 150 #define _ID_TIMER 507mde-1.2.2mginittaskbar.c:生成状态栏;改动其代码,定制自己所需要的状态栏;加入日期,第 49 行:static char* Xinqi = 日, 一, 二, 三, 四, 五, 六, ; 第 67 行:sprintf buff,%d年%02d月%02d日星期%s %02d:%02d:%02d,tm-tm_year + 1900, tm-tm_mon + 1, tm-

32、tm_mday,Xinqitm-tm_wday,tm-tm_ho ur,tm-tm_min,tm-tm_sec; 生成公司名称窗口、日期时间窗口,屏蔽掉工具栏窗口、“ start ” 窗口:static int TaskBarWinProc HWND hWnd, int message, WPARAM wParam, LPARAM lParam 函数中屏蔽掉第 242 行:/* CreateWindow CTRL_BUTTON, Start, WS_CHILD | WS_VISIBLE, _ID_START_BUTTON,_MARGIN,_MARGIN, _WIDTH_START, _HEIG

33、HT_CTRL, hWnd, 0; */在第 245 行加入:CreateWindowCTRL_STATIC,深圳市雄震科技有限公司 , WS_CHILD | WS_VISIBLE, _ID_LABEL_STATIC,_MARGIN + 20, _MARGIN, _WIDTH_TIME, _HEIGHT_CTRL, hWnd, 0; CreateWindow CTRL_STATIC, mk_time buff, WS_CHILD | WS_BORDER | WS_VISIBLE | SS_CENTER, _ID_TIME_STATIC,g_rcExcluded.right - _WIDTH_TIME - _MARGIN - 4, _MARGIN, _WIDTH_TIME, / 加入公司图标:_HEIGHT_CTRL, hWnd, 0;InvalidateRecthWnd,NULL,TRUE; 第 255 行,屏蔽掉生成工具栏的窗口:/ create_app_coolbar hWnd;加入公司图标,第 265 行:case MSG_PAINT: hdc = BeginPainthWnd; LoadBitmaph

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论