emwin,动起来,小小计算器
来源:互联网 发布:如何用手机注册淘宝号 编辑:程序博客网 时间:2024/04/30 10:46
界面制作如下:(有些丑,后面可以用皮肤,现在就将就的看着吧)
跟之前一样放一份ucguibuilder自动生成的代码上来,注意,我这边没有更改button的id,直接复制粘帖的控件,所以一样。等下自己更改就行了。
/********************************************************************* uCGUIBuilder **** Version: 4.0.0.0 **** 2012 / 04 **** CpoyRight to: wyl **** Email:ucguibuilder@163.com **** This text was Created by uCGUIBuilder ********************************************************************/#include <stddef.h>#include "GUI.h"#include "DIALOG.h"#include "WM.h"#include "BUTTON.h"#include "CHECKBOX.h"#include "DROPDOWN.h"#include "EDIT.h"#include "FRAMEWIN.h"#include "LISTBOX.h"#include "MULTIEDIT.h"#include "RADIO.h"#include "SLIDER.h"#include "TEXT.h"#include "PROGBAR.h"#include "SCROLLBAR.h"#include "LISTVIEW.h"//EventsFunctionList//EndofEventsFunctionList/*********************************************************************** static data************************************************************************/#define GUI_ID_BUTTON10 GUI_ID_USER+1/*********************************************************************** Dialog resource** This table conatins the info required to create the dialog.* It has been created by ucGUIbuilder.*/static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = { { FRAMEWIN_CreateIndirect, "Caption", 0, 0, 0, 320,240,FRAMEWIN_CF_MOVEABLE,0}, { EDIT_CreateIndirect, NULL, GUI_ID_EDIT0, 3, 3, 222,32, 0,0}, { BUTTON_CreateIndirect, "7", GUI_ID_BUTTON0, 3, 41, 70, 39, 0,0}, { BUTTON_CreateIndirect, "4", GUI_ID_BUTTON1, 3, 86, 70, 39, 0,0}, { BUTTON_CreateIndirect, "1", GUI_ID_BUTTON2, 3, 135,70, 39, 0,0}, { BUTTON_CreateIndirect, "0", GUI_ID_BUTTON3, 3, 183,70, 39, 0,0}, { BUTTON_CreateIndirect, "8", GUI_ID_BUTTON0, 79, 41, 70, 39, 0,0}, { BUTTON_CreateIndirect, "5", GUI_ID_BUTTON1, 79, 86, 70, 39, 0,0}, { BUTTON_CreateIndirect, "2", GUI_ID_BUTTON2, 79, 135,70, 39, 0,0}, { BUTTON_CreateIndirect, ".", GUI_ID_BUTTON3, 79, 183,70, 39, 0,0}, { BUTTON_CreateIndirect, "9", GUI_ID_BUTTON0, 155,41, 70, 39, 0,0}, { BUTTON_CreateIndirect, "6", GUI_ID_BUTTON1, 155,86, 70, 39, 0,0}, { BUTTON_CreateIndirect, "3", GUI_ID_BUTTON2, 155,135,70, 39, 0,0}, { BUTTON_CreateIndirect, "=", GUI_ID_BUTTON3, 155,183,70, 39, 0,0}, { BUTTON_CreateIndirect, "+", GUI_ID_BUTTON0, 244,41, 70, 39, 0,0}, { BUTTON_CreateIndirect, "-", GUI_ID_BUTTON1, 244,86, 70, 39, 0,0}, { BUTTON_CreateIndirect, "*", GUI_ID_BUTTON2, 244,135,70, 39, 0,0}, { BUTTON_CreateIndirect, "/", GUI_ID_BUTTON3, 244,183,70, 39, 0,0}, { BUTTON_CreateIndirect, "CLR", GUI_ID_BUTTON10, 244,3, 70, 32, 0,0}};/******************************************************************* FunctionName:void PaintDialog(WM_MESSAGE * pMsg)** Function: to initialize the Dialog items** ** call this function in _cbCallback --> WM_PAINT*****************************************************************/void PaintDialog(WM_MESSAGE * pMsg){ WM_HWIN hWin = pMsg->hWin;}/******************************************************************* FunctionName:void InitDialog(WM_MESSAGE * pMsg)** Function: to initialize the Dialog items** ** call this function in _cbCallback --> WM_INIT_DIALOG*****************************************************************/void InitDialog(WM_MESSAGE * pMsg){ WM_HWIN hWin = pMsg->hWin; // //FRAMEWIN // FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0); FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1); FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2); // //GUI_ID_EDIT0 // EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT0),"EDIT0");}/*********************************************************************** Dialog callback routine*/static void _cbCallback(WM_MESSAGE * pMsg) { int NCode, Id; WM_HWIN hWin = pMsg->hWin; switch (pMsg->MsgId) { case WM_PAINT: PaintDialog(pMsg); break; case WM_INIT_DIALOG: InitDialog(pMsg); break; case WM_KEY: switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) { case GUI_KEY_ESCAPE: GUI_EndDialog(hWin, 1); break; case GUI_KEY_ENTER: GUI_EndDialog(hWin, 0); break; } break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch (Id) { case GUI_ID_OK: if(NCode==WM_NOTIFICATION_RELEASED) GUI_EndDialog(hWin, 0); break; case GUI_ID_CANCEL: if(NCode==WM_NOTIFICATION_RELEASED) GUI_EndDialog(hWin, 0); break; } break; default: WM_DefaultProc(pMsg); }}/*********************************************************************** MainTask************************************************************************/void MainTask(void) { GUI_Init(); WM_SetDesktopColor(GUI_WHITE); /* Automacally update desktop window */ WM_SetCreateFlags(WM_CF_MEMDEV); /* Use memory devices on all windows to avoid flicker */ //PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX); //FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX); //PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX); //BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX); //CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX); //DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX); //SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX); //SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX); //HEADER_SetDefaultSkin(HEADER_SKIN_FLEX); //RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);while(1){ GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);}}这份代码放到模拟器里是能够显示了,但是没有功能而已,所以接下来我们给他增加功能。同样去除不必要的代码,增加功能代码,代码如下:
/********************************************************************* uCGUIBuilder **** Version: 4.0.0.0 **** 2012 / 04 **** CpoyRight to: wyl **** Email:ucguibuilder@163.com **** This text was Created by uCGUIBuilder ********************************************************************/#include <stddef.h>#include <stdio.h>#include "GUI.h"#include "DIALOG.h"#include "WM.h"#include "BUTTON.h"#include "EDIT.h"#include "FRAMEWIN.h"/*用户自定义ID,保证需要使用的控件有不同的ID*/#define GUI_ID_BUTTON_POINT (GUI_ID_USER+1)#define GUI_ID_BUTTON_ENTER (GUI_ID_USER+2)#define GUI_ID_BUTTON_CLR (GUI_ID_USER+3)#define GUI_ID_BUTTON_ADD (GUI_ID_USER+4)#define GUI_ID_BUTTON_SUB (GUI_ID_USER+5)#define GUI_ID_BUTTON_MULT (GUI_ID_USER+6)#define GUI_ID_BUTTON_DIV (GUI_ID_USER+7)/*加减乘除的四个宏*/#define O_ADD (0)#define O_SUB (1)#define O_MULT (2)#define O_DIV (3)static float a,b,c;//计算器的三个操作数static int Operation;//计算器的操作符/*计算器的资源链表*/static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] ={ { FRAMEWIN_CreateIndirect, "Caption", 0, 0, 0, 320,240,0,0}, { EDIT_CreateIndirect, NULL, GUI_ID_EDIT0, 3, 3, 222,32, 0,0}, { BUTTON_CreateIndirect, "0", GUI_ID_BUTTON0, 3, 183,70, 39, 0,0}, { BUTTON_CreateIndirect, "1", GUI_ID_BUTTON1, 3, 135,70, 39, 0,0}, { BUTTON_CreateIndirect, "2", GUI_ID_BUTTON2, 79, 135,70, 39, 0,0}, { BUTTON_CreateIndirect, "3", GUI_ID_BUTTON3, 155,135,70, 39, 0,0}, { BUTTON_CreateIndirect, "4", GUI_ID_BUTTON4, 3, 86, 70, 39, 0,0}, { BUTTON_CreateIndirect, "5", GUI_ID_BUTTON5, 79, 86, 70, 39, 0,0}, { BUTTON_CreateIndirect, "6", GUI_ID_BUTTON6, 155,86, 70, 39, 0,0}, { BUTTON_CreateIndirect, "7", GUI_ID_BUTTON7, 3, 41, 70, 39, 0,0}, { BUTTON_CreateIndirect, "8", GUI_ID_BUTTON8, 79, 41, 70, 39, 0,0}, { BUTTON_CreateIndirect, "9", GUI_ID_BUTTON9, 155,41, 70, 39, 0,0}, { BUTTON_CreateIndirect, ".", GUI_ID_BUTTON_POINT, 79, 183,70, 39, 0,0}, { BUTTON_CreateIndirect, "+", GUI_ID_BUTTON_ADD, 244,41, 70, 39, 0,0}, { BUTTON_CreateIndirect, "-", GUI_ID_BUTTON_SUB, 244,86, 70, 39, 0,0}, { BUTTON_CreateIndirect, "*", GUI_ID_BUTTON_MULT, 244,135,70, 39, 0,0}, { BUTTON_CreateIndirect, "/", GUI_ID_BUTTON_DIV, 244,183,70, 39, 0,0}, { BUTTON_CreateIndirect, "=", GUI_ID_BUTTON_ENTER, 155,183,70, 39, 0,0}, { BUTTON_CreateIndirect, "CLR", GUI_ID_BUTTON_CLR, 244,3, 70, 32, 0,0}};/*计算器的绘制函数*/void PaintDialog(WM_MESSAGE * pMsg){ WM_HWIN hWin = pMsg->hWin;}/*计算器的初始化函数*/void InitDialog(WM_MESSAGE * pMsg){ WM_HWIN hWin = pMsg->hWin; //FRAMEWIN FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0); FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1); FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2); //EDIT EDIT_SetMaxLen(WM_GetDialogItem(hWin, GUI_ID_EDIT0), 30);//设定EDIT的长度 EDIT_SetFont(WM_GetDialogItem(hWin, GUI_ID_EDIT0), &GUI_Font24_ASCII);//把字体改到和编辑框大小一致}/*计算器的回调函数*/static void _cbCallback(WM_MESSAGE * pMsg){ int NCode, Id; WM_HWIN hWin = pMsg->hWin; WM_HWIN hEdit = WM_GetDialogItem(hWin, GUI_ID_EDIT0); char str[30] = ""; switch (pMsg->MsgId) { case WM_PAINT: PaintDialog(pMsg);//绘制计算器 break; case WM_INIT_DIALOG: InitDialog(pMsg);//初始化计算器 break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; if (NCode == WM_NOTIFICATION_RELEASED)//如果按钮已被释放;如果缺省这句会执行3次(即BUTTON的3个通知代码) { switch (Id) { case GUI_ID_BUTTON0: case GUI_ID_BUTTON1: case GUI_ID_BUTTON2: case GUI_ID_BUTTON3: case GUI_ID_BUTTON4: case GUI_ID_BUTTON5: case GUI_ID_BUTTON6: case GUI_ID_BUTTON7: case GUI_ID_BUTTON8: case GUI_ID_BUTTON9: EDIT_AddKey(hEdit, Id-GUI_ID_BUTTON0+'0'); break; case GUI_ID_BUTTON_POINT: EDIT_AddKey(hEdit, '.'); break; case GUI_ID_BUTTON_CLR: EDIT_SetText(hEdit, ""); break; case GUI_ID_BUTTON_ADD: case GUI_ID_BUTTON_SUB: case GUI_ID_BUTTON_MULT: case GUI_ID_BUTTON_DIV: Operation = Id-GUI_ID_BUTTON_ADD; EDIT_GetText(hEdit, str, 30); sscanf(str,"%f",&a); EDIT_SetText(hEdit,""); break; case GUI_ID_BUTTON_ENTER: { EDIT_GetText(hEdit, str, 30); sscanf(str,"%f",&b); EDIT_SetText(hEdit,""); switch (Operation) { case O_ADD: c = a + b;sprintf(str,"%f",c); break; case O_SUB: c = a - b;sprintf(str,"%f",c); break; case O_MULT: c = a * b;sprintf(str,"%f",c); break; case O_DIV://保证被除数不等于0if(b != 0){c = a / b;sprintf(str,"%f",c);}else{sprintf(str,"%s","ERROR");} break; } EDIT_SetText(hEdit, str); } break; } } break; default: WM_DefaultProc(pMsg); }}/*GUI初始化*/void MainTask(void){ GUI_Init(); WM_SetDesktopColor(GUI_WHITE); /* Automacally update desktop window */ WM_SetCreateFlags(WM_CF_MEMDEV); /* Use memory devices on all windows to avoid flicker */ while (1) { GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0); }}这份代码,就只支持2元操作,可能还有其他问题。就先这样吧,以后再做,添加其他功能等。
0 0
- emwin,动起来,小小计算器
- 小小计算器
- 小小计算器
- 动起来
- 动起来
- 动起来
- 一个小小计算器
- 10.1(1)小小计算器
- 一个小小的计算器
- 想动就“动”起来
- 想动就“动”起来
- 想动就“动”起来
- 想动就“动”起来
- 想动就“动”起来
- 想动就“动”起来
- 想动就“动”起来
- 想动就“动”起来
- 想动就“动”起来
- oracle 查看用户所在的表空间
- MySql事务无法回滚的原因
- 腾讯2014春季笔试题:double数的解析
- list删除元素
- 揭秘生姜价格贵过猪肉的背后
- emwin,动起来,小小计算器
- ubuntu下配置rsync服务
- cydia添加源程序 v1.1.6 中文版
- 打印机驱动安装一则
- PowerDeisnger16下导出到sqlserver2005以上出现sysproperties错误的解决办法
- Android init进程启动
- 公钥和私钥
- 转换ipa中得图片
- 面试题之两个字符串