搜索
bottom↓
回复: 28

开源我的原创GUI代码了,一个控件,想研究的拿去...

[复制链接]

出0入0汤圆

发表于 2013-5-2 13:56:30 | 显示全部楼层 |阅读模式
由于效率太低,和扩展性不高,我决定重写,同时,老版本的给各位友友研究,并且希望认识喜欢GUI的人。
我只上传了NormalButton的代码,不过相信肯定不会让大部分人失望,至于GUI高手,希望不要喷了,毕竟我
初来乍到,谢谢。
我做一些讲解,LHL_GUICore文件是底层抽象函数,由于我没有拿计算机图形学的书来看,所以有些函数效率比较低下,我一有空就解决,希望不要吐槽,谢谢。
LHL_NormalButton是按键控件的源码部分。
如果要按键显示文字的话,需要调用一个函数:
void LHL_FontPutStringAt(unsigned short xPos,unsigned short yPos,char *ch,unsigned short Fontcolor,unsigned short Bkcolor,unsigned char Type);
我写一个例程如下:
#include "LHL_GUICore.h"
#include "LHL_NormalButton.h"
#include "MyString.h"
#include "MyAPP.h"
enum
{
        MyAPP_BackGroundColor=RGB(255,255,255),
};
static char MyAPPRunState=0;//应用正在运行
static LHL_NormalButtonTypeDef        ReturnButton,MyButton;//按键对象实体化
static void APP_ReturnCallBack(MsgType Picchange,MsgType Messagesend);//按键消息响应函数声明
static void APP_MyBtnCallBack(MsgType Picchange,MsgType Messagesend);//按键消息响应函数声明
void MyAPPCreate(void)//当应用创建的时候调用此函数
{
/*****************创建控件************************/
        NMBTN_NormalButtonCreate(&ReturnButton,LCD_WIDTH-85,LCD_HEIGHT-30,80,25,1,0);//创建返回按钮
        NMBTN_SetText(&ReturnButton,"退出应用");//设置按键显示的文字信息
        NMBTN_SetCallBack(&ReturnButton,&APP_ReturnCallBack);//设置消息映射回调函数
       
        NMBTN_NormalButtonCreate(&MyButton,20,20,80,25,1,0);
        NMBTN_SetText(&MyButton,"我的按钮");
        NMBTN_SetCallBack(&MyButton,&APP_MyBtnCallBack);
       
        MyAPPReDraw();
        MyAPPRunState=1;
}
void MyAPPReDraw(void)//应用重绘整个窗口函数
{
        short i=0,j=(LCD_HEIGHT-20)/2;
        for(;i<=j;i++)
        {
                GUICore_DrawHLine(0,j-i+20,400,MyAPP_BackGroundColor);
                GUICore_DrawHLine(0,j+i+20,400,MyAPP_BackGroundColor);
                GUICore_Delay(0x3fff);               
        }
        NMBTN_ButtonUpdate(&ReturnButton,ReturnButton.State);
        NMBTN_ButtonUpdate(&MyButton,ReturnButton.State);
}
unsigned char m_R=0,m_G=0,m_B=0,ColorIsChange=0;
short mCount=0;

short xpos=0,ypos=20,xposAdd=1,yposAdd=1;
void MyAPPOnDraw(void)//应用重绘函数
{
        if(!MyAPPRunState)
        {
                return;
        }
        mCount++;
        if(mCount%120==0)
        {
                m_R++;
                ColorIsChange=1;
        }
        if(mCount%130==0)
        {
                m_G++;
                ColorIsChange=1;
        }
        if(mCount%150==0)
        {
                m_B++;
                ColorIsChange=1;
        }
        if(mCount%150==0)
        {
                if(xposAdd)
                {
                        xpos++;
                        if(xpos==320)xposAdd=0;
                }
                else
                {
                        xpos--;
                        if(xpos==0)xposAdd=1;
                }
                if(yposAdd)
                {
                        ypos++;
                        if(ypos==180)yposAdd=0;
                }
                else
                {
                        ypos--;
                        if(ypos==20)yposAdd=1;
                }
                GUICore_FillRect(MyButton.x0,MyButton.y0,MyButton.x0+MyButton.xlen,MyButton.y0+MyButton.ylen,MyAPP_BackGroundColor);
                NMBTN_SetPos(&MyButton,xpos,ypos);
        }
        if(ColorIsChange)
        {
                NMBTN_SetTextColor(&MyButton,((m_R&0x001f)<<11)|((m_G&0x003f)<<5)|(m_R&0x001f));
                NMBTN_SetColor(&MyButton,~(((m_R&0x001f)<<11)|((m_G&0x003f)<<5)|(m_R&0x001f)));
                NMBTN_ButtonUpdate(&MyButton,MyButton.State);
                ColorIsChange=0;
        }
}
void MyAPPDelete(void)//当退出应用时候,调用此函数
{
        NMBTN_DelButton(&ReturnButton);
        NMBTN_DelButton(&MyButton);
        WM_DesktopHide(1);
        MyAPPRunState=0;
}
void APP_ReturnCallBack(MsgType Picchange,MsgType Messagesend)
{
        if(Picchange==BTNNOTPRESSED&&Messagesend==1)
        {
                MyAPPDelete();
        }
}
void APP_MyBtnCallBack(MsgType Picchange,MsgType Messagesend)
{
}
然后,你需要周期调用这个函数:
short NMBTN_ButtonMessageCheck(short xPos,short yPos,unsigned char Pressed);
参数为你的触摸点位置和是否被按下,返回值为按键产生的消息,如果没有,则返回0.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-5-2 14:00:40 | 显示全部楼层
支持!!!

出0入0汤圆

 楼主| 发表于 2013-5-2 14:07:12 | 显示全部楼层
i_kkyu 发表于 2013-5-2 14:00
支持!!!

谢谢,鄙人一学生,还望不吝赐教。

出0入0汤圆

发表于 2013-5-2 17:19:32 | 显示全部楼层
还是消息模型比较对路吧....

出0入0汤圆

发表于 2013-5-2 17:23:46 | 显示全部楼层
支持原创!

出0入0汤圆

发表于 2013-5-2 17:39:24 来自手机 | 显示全部楼层
好东西啊

出0入264汤圆

发表于 2013-5-2 17:52:07 | 显示全部楼层
呵呵,对GUI有兴趣同学还蛮多啊。

出0入0汤圆

发表于 2013-5-2 18:19:56 | 显示全部楼层
现在学生真幸福,遥想当年我上学时个人电脑都没有(自卑呀),现在工作了多年电脑用来无数了,但始终对于MCU耿耿于怀现在才开始学习(应该不晚)。最近发现现在的学生普遍动手能力比较强,还有开源的心态值得夸奖(对于开源其实是为了更好的完善功能和性能和他人的鼓励换来的坚持-个人理解)。

出0入0汤圆

发表于 2013-5-2 18:37:00 来自手机 | 显示全部楼层
同学生,正在做一个基于stm32f4的手机(玩),在设计gui时遇到了些问题,希望能和LZ交个朋友,共同探讨!

出0入0汤圆

发表于 2013-5-2 18:41:40 | 显示全部楼层
路过,看看~~~

出0入0汤圆

发表于 2013-5-2 19:44:09 | 显示全部楼层
看到了UCGUI的影子

出0入0汤圆

 楼主| 发表于 2013-5-2 20:14:06 | 显示全部楼层
adce 发表于 2013-5-2 17:19
还是消息模型比较对路吧....

嗯嗯,是的,都可以,不过毕竟想得不完善,这些代码废了。

出0入0汤圆

 楼主| 发表于 2013-5-2 20:18:17 | 显示全部楼层
fanwenqiang666 发表于 2013-5-2 18:19
现在学生真幸福,遥想当年我上学时个人电脑都没有(自卑呀),现在工作了多年电脑用来无数了,但始终对于MC ...

喝喝,确实。

出0入0汤圆

发表于 2013-5-2 20:22:05 | 显示全部楼层
mark一下,改天有空再看看了~~~~~~~~~~~~

出0入0汤圆

 楼主| 发表于 2013-5-2 20:23:45 | 显示全部楼层
myqiang1990 发表于 2013-5-2 19:44
看到了UCGUI的影子

是的,有那么一点点,本想用C语言写出C++风格的,没成功。要说的话,我的设计会比UCGUI更灵活,下一版我会改进绘图机制,还有就是增加按键的重绘,就跟MFC上面的重绘一样,风格由自己定义,然后,这个按键不但是一个单独的控件,更可以给其他控件用作消息响应,减少代码量。
唉,知识经历有限,所以首先从小小的按键下手啦!

出0入0汤圆

 楼主| 发表于 2013-5-2 22:07:48 | 显示全部楼层
nbzwt 发表于 2013-5-2 18:37
同学生,正在做一个基于stm32f4的手机(玩),在设计gui时遇到了些问题,希望能和LZ交个朋友,共同探讨! ...

好啊~~~加我扣eight four three nine three one two four nine。

出0入0汤圆

发表于 2013-5-3 23:43:15 | 显示全部楼层
有多窗口和Z序方案吗?

出0入0汤圆

发表于 2013-5-8 15:23:00 | 显示全部楼层
鼻儿眼睛花 发表于 2013-5-2 14:07
谢谢,鄙人一学生,还望不吝赐教。

看的出来,下了很大功夫了.顶起来。

出0入0汤圆

发表于 2013-5-8 18:21:53 | 显示全部楼层
帮顶,你终于打算开源了。等了这么多年了~~~~

出0入0汤圆

 楼主| 发表于 2013-5-8 20:01:55 | 显示全部楼层
湛无双 发表于 2013-5-8 18:21
帮顶,你终于打算开源了。等了这么多年了~~~~

你这~~~好吧~~~我写的很垃圾的。。。

出0入0汤圆

发表于 2013-5-8 21:51:56 | 显示全部楼层
鼻儿眼睛花 发表于 2013-5-8 20:01
你这~~~好吧~~~我写的很垃圾的。。。

没有啊,海龙兄,我意思是早就要开源了  你那技术真的很厉害  我一直佩服的紧啊

出0入0汤圆

 楼主| 发表于 2013-5-9 12:31:24 | 显示全部楼层
湛无双 发表于 2013-5-8 21:51
没有啊,海龙兄,我意思是早就要开源了  你那技术真的很厉害  我一直佩服的紧啊 ...

你把我暴露啦!!!八嘎~~~

出0入0汤圆

发表于 2013-5-9 12:38:28 | 显示全部楼层
鼻儿眼睛花 发表于 2013-5-9 12:31
你把我暴露啦!!!八嘎~~~

大哥,我错了,原谅小弟的无知,我真的错了。

出0入0汤圆

发表于 2013-6-6 19:39:44 | 显示全部楼层
正需要,研究下   顶

出0入0汤圆

发表于 2013-6-7 11:17:27 | 显示全部楼层
帮楼主顶一个,本人刚学GUI请问有什么可以指点下的

出0入0汤圆

发表于 2014-2-22 09:23:59 | 显示全部楼层
标记,链表-GUI!

出0入0汤圆

发表于 2014-2-22 11:54:43 | 显示全部楼层
有没有运行效果的视频

出0入17汤圆

发表于 2014-2-22 13:28:12 | 显示全部楼层
支持原创!

出0入0汤圆

发表于 2014-12-8 10:33:43 | 显示全部楼层
GUI  还没看过 先留下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 17:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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