搜索
bottom↓
12
返回列表 发新帖
楼主: chun2495

液晶多级菜单实现加强版

  [复制链接]

出0入0汤圆

发表于 2015-2-27 22:32:51 | 显示全部楼层
mark一下,回头好好学学

出0入4汤圆

发表于 2015-2-28 09:29:38 | 显示全部楼层
不错的思路,一直用第一种,触摸还未用过

出0入0汤圆

发表于 2015-2-28 10:17:49 | 显示全部楼层
学习一下,谢谢!

出0入0汤圆

发表于 2015-2-28 11:06:16 | 显示全部楼层
哈哈~收藏了,谢楼主分享

出0入10汤圆

发表于 2015-3-3 15:40:22 | 显示全部楼层
creep 发表于 2014-10-14 08:43
谢谢分享。
一直都是用的第一种的方法写的菜单,很方便,能写N多层也能很方便的在各个菜单界面跳转。
正好 ...

请问你用第一种方法时,有没有实现通过按键输入设置参数的功能?

出0入0汤圆

发表于 2015-3-3 15:48:36 | 显示全部楼层
lklhzu 发表于 2015-3-3 15:40
请问你用第一种方法时,有没有实现通过按键输入设置参数的功能?

设置参数提供几个选项供用户选择而不是用键盘输入的方法实现的,因为设置的参数很简单,可以预先列出来让用户选择。

出0入10汤圆

发表于 2015-3-3 15:51:54 | 显示全部楼层
creep 发表于 2015-3-3 15:48
设置参数提供几个选项供用户选择而不是用键盘输入的方法实现的,因为设置的参数很简单,可以预先列出来让 ...

好的,我的要设置时间、日期等参数,从矩阵键盘输入,正头疼呢,不知从何下手!

出0入0汤圆

发表于 2015-3-3 15:57:28 | 显示全部楼层
lklhzu 发表于 2015-3-3 15:51
好的,我的要设置时间、日期等参数,从矩阵键盘输入,正头疼呢,不知从何下手! ...

我设置时间是通过3个按键实现的,UP,DOWN,OK,上下按键实现加1减1,OK按键确认.通过UP,DOWN,在时分秒之间转换选择。
如果是矩阵键盘也可以实现直接输入吧,这样应该更简单。

出0入10汤圆

发表于 2015-3-3 16:07:43 | 显示全部楼层
creep 发表于 2015-3-3 15:57
我设置时间是通过3个按键实现的,UP,DOWN,OK,上下按键实现加1减1,OK按键确认.通过UP,DOWN,在时分秒之 ...

请教下,通过按键输入参数的话需要修改哪些函数?在不影响菜单结构的前提下怎样实现数据的动态输入和显示?兄台能否只把按键参数设置部分的代码或框架供参考下。

出0入0汤圆

发表于 2015-3-3 16:21:45 | 显示全部楼层
lklhzu 发表于 2015-3-3 16:07
请教下,通过按键输入参数的话需要修改哪些函数?在不影响菜单结构的前提下怎样实现数据的动态输入和显示 ...

我只是简单的实现了时间日期的调整并不是直接输入,所以可能和你的情况不同。
这个菜单结构的每个按键都对应了相应的函数,你根据自己的需要去修改相应的按键按下的函数,比如某个按键按下是输入1,该函数就实现输入显示1到LCD上。

出0入10汤圆

发表于 2015-3-3 16:33:12 | 显示全部楼层
creep 发表于 2015-3-3 16:21
我只是简单的实现了时间日期的调整并不是直接输入,所以可能和你的情况不同。
这个菜单结构的每个按键都 ...

好的,3Q,我摸索着试试!

出0入0汤圆

发表于 2015-3-13 11:44:15 | 显示全部楼层
思路学习了,感觉很不错

出0入0汤圆

发表于 2015-6-5 10:24:46 | 显示全部楼层
mark,同行,顶一个。

出0入0汤圆

发表于 2015-6-29 08:31:13 | 显示全部楼层
学习学习            

出25入84汤圆

 楼主| 发表于 2015-6-30 13:10:20 | 显示全部楼层
laujc 发表于 2015-2-11 10:16
很想知道界面是用什么软件设计的

niosII fpga软核

出0入0汤圆

发表于 2015-7-14 21:44:29 | 显示全部楼层
顶起~~~~~~~

出0入0汤圆

发表于 2016-8-24 18:29:21 | 显示全部楼层

头像碉堡了。

出0入0汤圆

发表于 2016-8-29 12:16:45 | 显示全部楼层
标记,谢谢分享~

出0入0汤圆

发表于 2016-8-29 13:37:42 | 显示全部楼层
不太懂。。

出0入0汤圆

发表于 2016-10-22 21:07:14 | 显示全部楼层
mark一下:液晶多级菜单实现加强版

出0入0汤圆

发表于 2016-11-16 15:00:53 | 显示全部楼层
收藏着。。

出5入10汤圆

发表于 2017-2-16 09:23:38 | 显示全部楼层
rootxie 发表于 2014-10-17 12:39
第一个也好实现啊,通过传参数,参数有类型 按键类型 触摸类型 另外还有事件类型  同时附上值即可 ...

楼主通过传参数,可以用代码示例一下吗?

出5入10汤圆

发表于 2017-2-16 10:10:42 | 显示全部楼层
本帖最后由 chen849928055 于 2017-2-16 10:14 编辑

其它的界面都是这样写的,然后主函数只要这样就行了:
TBasicWindow *CurrentWin = &MainWin;
//如果有两个页面,这里要这样写吗?TBasicWindow *CurrentWin = &SecondWin;
void main(void)\
{         
  TKEY_EVENT event;      
  while(1)
   {               
      GetKey(&event);                     
      CurrentWin->key_process(&event);     
    }
}

出25入84汤圆

 楼主| 发表于 2017-2-16 16:30:31 | 显示全部楼层
chen849928055 发表于 2017-2-16 10:10
其它的界面都是这样写的,然后主函数只要这样就行了:
TBasicWindow *CurrentWin = &MainWin;
//如果有 ...

是的 每一个界面都有一个.c文件

  1. void MainDraw();
  2. TKEY MainKeyMap(unsigned int x, unsigned int y);
  3. void MainKeyDisplay(TKEY event, unsigned short int TouchStatus);
  4. void MainKeyProcess(TKEY_EVENT *event);
  5. TBasicWindow MainWin = {
  6.         draw: MainDraw,
  7.         key_map: MainKeyMap,
  8.     key_display:MainKeyDisplay,
  9.     key_process: MainKeyProcess,
  10. };
复制代码


每个界面都有共同的属性,界面显示在draw里,界面按键坐标在key_map里,界面按键效果(弹起按下)在key_display里,按键处理在key_process里,当然界面切换也在key_process里,如下。
  1. void MainKeyProcess(TKEY_EVENT *event)
  2. {
  3.     static TKEY PressKey = KEY_NULL;
  4.    
  5.     switch(event->key){
  6.         case MAIN_PATIENT:
  7.              if(event->TouchStatus){
  8.                 PressKey = MAIN_PATIENT;
  9.                 MainKeyDisplay(PressKey, DOWN);
  10.              }
  11.              else{
  12.                 MainKeyDisplay(PressKey, UP);
  13.                 if(PressKey != MAIN_PATIENT) break;
  14.                
  15.                 PressKey = KEY_NULL;
  16.                 CurrentWin = &PatientWin;
  17.                 CurrentWin->draw();
  18.              }
  19.              break;
  20.     }
  21. }
复制代码

出5入10汤圆

发表于 2017-2-16 17:47:45 | 显示全部楼层
chun2495 发表于 2017-2-16 16:30
是的 每一个界面都有一个.c文件


每一个界面又有一个.C文件,两个界面时该怎么写,没看到他们怎么联系的
typedef struct{
        u8 KeyStateIndex; //µ±Ç°×´Ì¬Ë÷ÒýºÅ
        u8 KeyUpState;    //°´ÏÂ"ÏòÉÏ"¼üʱתÏòµÄ״̬Ë÷ÒýºÅ
        u8 KeyDnState;    //°´ÏÂ"ÏòÏÂ"¼üʱתÏòµÄ״̬Ë÷ÒýºÅ
        u8 KeyPoState;    //°´ÏÂ"µçÔ´"¼üʱתÏòµÄ״̬Ë÷ÒýºÅ
        u8 KeyBkState;    //°´ÏÂ"·µ»Ø"¼üʱתÏòµÄ״̬Ë÷ÒýºÅ
              u8 KeyOkState;    //°´ÏÂ"È·ÈÏ"¼üʱתÏòµÄ״̬Ë÷ÒýºÅ
              u8 KeySetState;   //°´ÏÂ"×éºÏ"¼üʱתÏòµÄ״̬Ë÷ÒýºÅ
              u8 KeyLState;     //°´ÏÂ"³¤°´"¼üʱתÏòµÄ״̬Ë÷ÒýºÅ
       
        void (*CurrentOperate)(); //µ±Ç°×´Ì¬Ó¦¸ÃÖ´ÐеŦÄܲÙ×÷
} KbdTabStruct;

KbdTabStruct KeyTab[SIZE_OF_KEY_MENU]={
//       |-----------> Index
//       |   Down
//       |   |  Up
//       |   |   |  Power
//       |   |   |   |  Back   
//       |   |   |   |   |  Enter      
//       |   |   |   |   |   |  SETUP            
//             |   |   |   |   |   |   |  K_Long
//       |   |   |   |   |   |   |   |     |--->¹¦Äܺ¯Êý       
       {  0, 34, 34,34, 34,  34, 34, 34,InitDisplay_0},       // 待机界面
       {  1,  3,  3,  2, 34, 12, 145, 6,MainInterface_3},     //主界面
       {  2, 33, 33,  2, 33, 33, 33, 33,DspMenuOFF_4},    //关机界面
}
这种方式时我还知道界面之间怎么联系的,你那个没看出从一个界面怎么跳转到另一个界面的.

出25入84汤圆

 楼主| 发表于 2017-2-17 10:20:08 | 显示全部楼层
chen849928055 发表于 2017-2-16 17:47
每一个界面又有一个.C文件,两个界面时该怎么写,没看到他们怎么联系的
typedef struct{
        u8 KeySta ...

    switch(event->key){
        case MAIN_PATIENT:
             if(event->TouchStatus){
                PressKey = MAIN_PATIENT;
                MainKeyDisplay(PressKey, DOWN);
             }
             else{
                MainKeyDisplay(PressKey, UP);
                if(PressKey != MAIN_PATIENT) break;
               
                PressKey = KEY_NULL;
                CurrentWin = &PatientWin;
                CurrentWin->draw();

             }
             break;
    }
红字表示将Patient界面赋值给了当前界面,然后显示Patient界面的Draw,这就是界面的跳转呀,因为在跳转时第一个动作都是重绘(draw)这个界面。

出5入10汤圆

发表于 2017-2-17 10:37:24 | 显示全部楼层
chun2495 发表于 2017-2-17 10:20
switch(event->key){
        case MAIN_PATIENT:
             if(event->TouchStatus){

void MainKeyProcess(TKEY_EVENT *event)你这个按键处理函数,是放在while里周期性调用的吧.这个函数还要显示,放中断里估计不行,显示花的时间有点久

出25入84汤圆

 楼主| 发表于 2017-2-17 10:56:01 | 显示全部楼层
chen849928055 发表于 2017-2-17 10:37
void MainKeyProcess(TKEY_EVENT *event)你这个按键处理函数,是放在while里周期性调用的吧.这个函数还要 ...

对 我用的是触摸屏的扫描方式

出5入10汤圆

发表于 2017-2-17 11:08:52 | 显示全部楼层
chun2495 发表于 2017-2-17 10:56
对 我用的是触摸屏的扫描方式

你的触摸那一块用的什么芯片,做了长按  组合按  连击之类的处理吧.

出25入84汤圆

 楼主| 发表于 2017-2-17 11:15:05 | 显示全部楼层
chen849928055 发表于 2017-2-17 11:08
你的触摸那一块用的什么芯片,做了长按  组合按  连击之类的处理吧.

电容屏,IIC接口的,只是单击处理。

出5入10汤圆

发表于 2017-2-17 16:26:20 | 显示全部楼层
chun2495 发表于 2017-2-16 16:30
是的 每一个界面都有一个.c文件

TBasicWindow *CurrentWin = &MainWin;
TBasicWindow *CurrentWin = &SecondWin;
TBasicWindow *CurrentWin = &ThirdWin;
TBasicWindow *CurrentWin = &FourthWin;
假如有四个界面以上这四句是都写在主函数这里,还是分别写在各个界面的.c文件里



void main(void)\
{         
  TKEY_EVENT event;      
  while(1)
   {               
      GetKey(&event);                     
      CurrentWin->key_process(&event);     
    }
}

出25入84汤圆

 楼主| 发表于 2017-2-17 17:20:31 | 显示全部楼层
chen849928055 发表于 2017-2-17 16:26
TBasicWindow *CurrentWin = &MainWin;
TBasicWindow *CurrentWin = &SecondWin;
TBasicWindow *Curren ...

1,主函数里只定义一个 CurrentWin,然后开机后的第一个界面赋值给他 TBasicWindow *CurrentWin = &MainWin;
其他界面(.c)是没有current的。

2,界面切换时,只是将其他的界面(.c)赋值给current界面就行了
CurrentWin = &SecondWin;
CurrentWin->draw();


3,每个界面(.c)定义自己的内容
TBasicWindow MainWin = {
        draw: MainDraw,
        key_map: MainKeyMap,
    key_display:MainKeyDisplay,
    key_process: MainKeyProcess,
};


4,定义一个source.h文件,专门包含这些界面的名称,然后每个界面(.c)都能互相调用了。
extern TBasicWindow MainWin;
extern TBasicWindow SecondWin;
extern TBasicWindow ThirdWin;
...

出5入10汤圆

发表于 2017-2-20 09:07:13 | 显示全部楼层
chun2495 发表于 2017-2-17 17:20
1,主函数里只定义一个 CurrentWin,然后开机后的第一个界面赋值给他 TBasicWindow *CurrentWin = &MainW ...

哦哦!明白了,谢谢

出5入10汤圆

发表于 2017-2-20 10:46:57 | 显示全部楼层
chun2495 发表于 2017-2-17 17:20
1,主函数里只定义一个 CurrentWin,然后开机后的第一个界面赋值给他 TBasicWindow *CurrentWin = &MainW ...

你触摸驱动IC使用的FT5X06系列的吗?需要向厂家要一些IC的注册信息之类的吗?又没什么注意事项,这类片子厂家一般提供驱动demo不.

出25入84汤圆

 楼主| 发表于 2017-2-20 11:45:15 | 显示全部楼层
chen849928055 发表于 2017-2-20 10:46
你触摸驱动IC使用的FT5X06系列的吗?需要向厂家要一些IC的注册信息之类的吗?又没什么注意事项,这类片子厂 ...

我用的是无驱动的电容屏 接口为IIC,直接按照格式读取坐标就行。

出0入0汤圆

发表于 2017-2-28 08:58:20 | 显示全部楼层
楼主,你的菜单程序是不是每个界面都有个KeyProcess函数,而每个界面刷新函数draw都是在KeyProcess里被调用的,那你定义的结构体的draw函数就没多大意义

出25入84汤圆

 楼主| 发表于 2017-2-28 09:47:49 | 显示全部楼层
NIC 发表于 2017-2-28 08:58
楼主,你的菜单程序是不是每个界面都有个KeyProcess函数,而每个界面刷新函数draw都是在KeyProcess里被调用 ...

draw只是在跳转界面时显示一次的,类似于初始化,然后就等待触发事件。keyprocess里面的draw是:跳转到其他界面时先draw一下,
CurrentWin = &ManagementWin;
                CurrentWin->draw();
这是静态调用界面的,如果是动态调用,只需要CurrentWin = &ManagementWin;就行了。

出0入0汤圆

发表于 2017-2-28 10:24:41 | 显示全部楼层
我也不太明白

出25入84汤圆

 楼主| 发表于 2017-2-28 11:29:48 | 显示全部楼层

面向对象的思想,界面看成一个对象,他们的共同属性有draw keyprocess keymap等

出0入0汤圆

发表于 2017-2-28 16:59:39 | 显示全部楼层
mark收藏

出5入10汤圆

发表于 2017-4-13 15:44:45 | 显示全部楼层
get_coord(c);
if(c[0] && !send)  //楼主这里有触摸按下   你这里的 !send什么意思
   {
        X = c[1];
        Y = c[2];
        TouchStatus = DOWN;
   }
   
   if(!c[0])   //这里没按键按下了,还把上一次的坐标保存下来做什么用的
   {
        X = c[1];
        Y =  c[2];
        TouchStatus = UP;
   }

出25入84汤圆

 楼主| 发表于 2017-4-13 16:23:29 | 显示全部楼层
chen849928055 发表于 2017-4-13 15:44
get_coord(c);
if(c[0] && !send)  //楼主这里有触摸按下   你这里的 !send什么意思
   {

send 是一个标志 对整体没意义 不用关心
点击一个按键有按下 移动 弹起,如果进行了移动操作,那就需要记录第一次的按下坐标,按下和弹起坐标相同才能触发事件。

出5入10汤圆

发表于 2017-4-13 16:34:56 | 显示全部楼层
chun2495 发表于 2017-4-13 16:23
send 是一个标志 对整体没意义 不用关心
点击一个按键有按下 移动 弹起,如果进行了移动操作,那就需要记 ...

你这里没看到按下和弹起的坐标作比较

出25入84汤圆

 楼主| 发表于 2017-4-13 16:41:55 | 显示全部楼层
chen849928055 发表于 2017-4-13 16:34
你这里没看到按下和弹起的坐标作比较

在 这里
void MainKeyProcess(TKEY_EVENT *event)
{
    static TKEY PressKey = KEY_NULL;//记录第一次按下的按键
   
    switch(event->key){
        case MAIN_REVIEW:
             if(event->TouchStatus){//按键按下
                PressKey = MAIN_REVIEW;//记录第一次按下触摸屏的按键
                MainKeyDisplay(PressKey, DOWN);//按键按下
             }
             else{//按键弹起
                MainKeyDisplay(PressKey, UP);//弹起先前一次按下的按键,不一定是MAIN_PATIENT
                if(PressKey != MAIN_REVIEW) break;//两次按键不一致则不执行
                //begin (按下和弹起都是PATIENT,则执行PATIENT的按键处理)
                CurrentWin = &ManagementWin;
                CurrentWin->draw();
                //end
             }
             break;
        ...
}

出5入10汤圆

发表于 2017-4-13 16:51:26 | 显示全部楼层
chun2495 发表于 2017-4-13 16:41
在 这里
void MainKeyProcess(TKEY_EVENT *event)
{

是的,之前看了,没想到按下  弹起坐标作比较.如果长按 ,连击的操作在这上面还好扩展不

出25入84汤圆

 楼主| 发表于 2017-4-13 16:55:02 | 显示全部楼层
chen849928055 发表于 2017-4-13 16:51
是的,之前看了,没想到按下  弹起坐标作比较.如果长按 ,连击的操作在这上面还好扩展不 ...

可以呀 底层都是自己写的 想怎么操作都可以

出5入10汤圆

发表于 2017-4-13 17:04:58 | 显示全部楼层
本帖最后由 chen849928055 于 2017-4-13 17:39 编辑
chun2495 发表于 2017-4-13 16:55
可以呀 底层都是自己写的 想怎么操作都可以


好的,还有那种滑动操作,上滑"+",下滑"-";滑动判断是不是下一个坐标大于上一个坐标几个像素点就认为是滑动,每滑动几个像素点就更新一次上一个坐标值.没见过别人滑动怎么处理的,不知道我这思路对不?

突然发现FT5306这个寄存器可以读值来确定是否是滑动的值,来确定朝哪里滑动的

This register describes the gesture of a valid touch.
Address  Bit Address  Register Name  Description
Op,01h  7:0  Gesture ID[7:0]   Gesture ID
                                          0x10 Move UP
                                          0x14 Move Left
                                          0x18 Move Down
                                          0x1C Move Right
                                          0x48 Zoom In
                                          0x49 Zoom Out
                                          0x00 No Gesture

       

出25入84汤圆

 楼主| 发表于 2017-4-13 18:04:07 | 显示全部楼层
chen849928055 发表于 2017-4-13 17:04
好的,还有那种滑动操作,上滑"+",下滑"-";滑动判断是不是下一个坐标大于上一个坐标几个像素点就认为是滑动 ...

要是能读芯片寄存器来确定那就更简单了,getkey里直接调用就行,在
  1. typedef struct _key_{
  2.     TKEY key;
  3.     unsigned int TouchStatus;
  4. }TKEY_EVENT;
复制代码

添加unsigned int Move;通过按下 弹起 临时值来判断Move
keyprocess里做相应处理就行。

出5入10汤圆

发表于 2017-4-13 18:24:18 | 显示全部楼层
chun2495 发表于 2017-4-13 18:04
要是能读芯片寄存器来确定那就更简单了,getkey里直接调用就行,在

添加unsigned int Move;通过按下 弹 ...

不用添加unsigned int Move吧,直接TouchStatus 对应UP  DOWN  MOVE好了

出25入84汤圆

 楼主| 发表于 2017-4-14 09:31:19 | 显示全部楼层
chen849928055 发表于 2017-4-13 18:24
不用添加unsigned int Move吧,直接TouchStatus 对应UP  DOWN  MOVE好了

按下弹起TouchStatus 还是有的 你是在弹起时才能判断滑动

出5入10汤圆

发表于 2017-4-14 14:12:39 | 显示全部楼层
chun2495 发表于 2017-4-14 09:31
按下弹起TouchStatus 还是有的 你是在弹起时才能判断滑动

滑动不是在没弹起时就可以判断了吗?弹起时滑动都结束了,如果要是做滑动效果,在滑的过程中,相应的程序就要有响应的,比如你上滑数字逐渐变大,下滑数字逐渐变小

出25入84汤圆

 楼主| 发表于 2017-4-14 14:43:08 | 显示全部楼层
chen849928055 发表于 2017-4-14 14:12
滑动不是在没弹起时就可以判断了吗?弹起时滑动都结束了,如果要是做滑动效果,在滑的过程中,相应的程序就要 ...

嗯 两种方式都存在,具体看你的情况来写

出5入10汤圆

发表于 2017-4-24 13:32:25 | 显示全部楼层
本帖最后由 chen849928055 于 2017-4-24 13:42 编辑
chun2495 发表于 2017-2-16 16:30
是的 每一个界面都有一个.c文件


楼主你好!有两个问题问你一下:
1..\MenuWin\menu.c(61): warning:  #940-D: missing return statement at end of non-void function "MainKeyMap"
自己一直了下,发现有这个警告,自己搞不定了.MainKeyMap这个函数没看到在哪里调用的?警告是不是和这个有关系?
TKEY MainKeyMap(unsigned int x, unsigned int y)
{
    if((x > 95*0&& x <= 95*0) && (y > 685 && y < 790))   return MAIN_REVIEW;
    else if((x > 95*1&& x <= 95*1) && (y > 685 && y < 790))   return MAIN_PRINT;
    else if((x > 95*2&& x <= 95*2) && (y > 685 && y < 790))   return MAIN_SAVE;
          else return KEY_NULL;
}这里是不是要改为这样

2.main.c(56): error:  #20: identifier "CurrentWin" is undefined,  CurrentWin在menu.c文件里定义了,在main.c文件里还需要
怎么定义.

出25入84汤圆

 楼主| 发表于 2017-4-24 13:41:26 | 显示全部楼层
chen849928055 发表于 2017-4-24 13:32
楼主你好!有两个问题问你一下:
1..\MenuWin\menu.c(61): warning:  #940-D: missing return statement at ...

1, 在最后需要return KEY_NULL;
2,不要在menu.c中定义currentwin,只在main里定义,然后在extern_window_declare.h中extern出去其他界面直接引用就行了。

出5入10汤圆

发表于 2017-4-24 13:52:13 | 显示全部楼层
本帖最后由 chen849928055 于 2017-4-24 14:04 编辑
chun2495 发表于 2017-4-24 13:41
1, 在最后需要return KEY_NULL;
2,不要在menu.c中定义currentwin,只在main里定义,然后在extern_windo ...


TKEY MainKeyMap(unsigned int x, unsigned int y)
{
    if((x > 95*0&& x <= 95*0) && (y > 685 && y < 790))   return MAIN_REVIEW;
    if((x > 95*1&& x <= 95*1) && (y > 685 && y < 790))   return MAIN_PRINT;
    if((x > 95*2&& x <= 95*2) && (y > 685 && y < 790))   return MAIN_SAVE;
    return KEY_NULL;
}这里是不是要改为这样

改好了,感谢!

出25入84汤圆

 楼主| 发表于 2017-4-24 14:04:41 | 显示全部楼层
chen849928055 发表于 2017-4-24 13:52
TKEY MainKeyMap(unsigned int x, unsigned int y)
{
    if((x > 95*0&& x  685 && y < 790))   return  ...

1,对
2,TBasicWindow *CurrentWin = &MainWin;你用source.h引用就行了
extern TBasicWindow MainWin;
extern TBasicWindow *CurrentWin;

出5入10汤圆

发表于 2017-4-24 14:13:49 | 显示全部楼层
chun2495 发表于 2017-4-24 14:04
1,对
2,TBasicWindow *CurrentWin = &MainWin;你用source.h引用就行了
extern TBasicWindow MainWin;

void MainKeyDisplay(TKEY event, unsigned short int TouchStatus);你的这个函数做的什么功能?跟随按键操作变化的显示内容吗?

出25入84汤圆

 楼主| 发表于 2017-4-24 14:21:48 | 显示全部楼层
chen849928055 发表于 2017-4-24 14:13
void MainKeyDisplay(TKEY event, unsigned short int TouchStatus);你的这个函数做的什么功能?跟随按键 ...

是         

出5入10汤圆

发表于 2017-4-24 14:28:35 | 显示全部楼层

显示界面后,再刷新就刷新一页上有变化的地方把,你这里是在哪个函数处理的,不是每次刷新把一整页全刷新了吧

出25入84汤圆

 楼主| 发表于 2017-4-24 14:31:01 | 显示全部楼层
chen849928055 发表于 2017-4-24 14:28
显示界面后,再刷新就刷新一页上有变化的地方把,你这里是在哪个函数处理的,不是每次刷新把一整页全刷新了 ...

在keyprocess里处理 刷新局部,页刷新实在切换页时的draw里做的

出5入10汤圆

发表于 2017-4-24 14:46:55 | 显示全部楼层
chun2495 发表于 2017-4-24 14:31
在keyprocess里处理 刷新局部,页刷新实在切换页时的draw里做的

keyprocess这里的局部是不是指跟着按键操作刷新的?如果主页显示实时的温度值,温度变化,实时显示的数字就变化,这种变化可在keyprocess里有处理

出25入84汤圆

 楼主| 发表于 2017-4-24 14:58:41 | 显示全部楼层
chen849928055 发表于 2017-4-24 14:46
keyprocess这里的局部是不是指跟着按键操作刷新的?如果主页显示实时的温度值,温度变化,实时显示的数字就 ...


是的              别忘了做出效果给我看看

出5入10汤圆

发表于 2017-4-24 15:04:51 | 显示全部楼层
chun2495 发表于 2017-4-24 14:58
是的              别忘了做出效果给我看看

好的,做出效果发你看,谢谢你的耐心指导...

出5入10汤圆

发表于 2017-4-24 17:00:33 | 显示全部楼层
感觉你的ASCII码的字符好圆滑,怎么做到的

出25入84汤圆

 楼主| 发表于 2017-4-24 17:26:05 | 显示全部楼层
chen849928055 发表于 2017-4-24 17:00
感觉你的ASCII码的字符好圆滑,怎么做到的


PS水平多高 界面就有多漂亮

本帖子中包含更多资源

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

x

出5入10汤圆

发表于 2017-4-24 17:46:30 | 显示全部楼层
chun2495 发表于 2017-4-24 17:26
PS水平多高 界面就有多漂亮

你时间的数字不是可变化的吗?应该是刷新的字符吧,我现在其他的都是刷图片,希望数字刷字符,不然要截图的数字太多了

出25入84汤圆

 楼主| 发表于 2017-4-25 09:08:36 | 显示全部楼层
chen849928055 发表于 2017-4-24 17:46
你时间的数字不是可变化的吗?应该是刷新的字符吧,我现在其他的都是刷图片,希望数字刷字符,不然要截图的数 ...

对呀 ,点阵做出来显示的时候带上背景颜色就行了。

出5入10汤圆

发表于 2017-4-25 09:12:02 | 显示全部楼层
chun2495 发表于 2017-4-25 09:08
对呀 ,点阵做出来显示的时候带上背景颜色就行了。

字摸4软件生成的字符感觉锯齿好严重,看着你这字符挺圆滑的,你这字符没做类似win的抗锯齿化处理吗?

出25入84汤圆

 楼主| 发表于 2017-4-25 09:35:23 | 显示全部楼层
chen849928055 发表于 2017-4-25 09:12
字摸4软件生成的字符感觉锯齿好严重,看着你这字符挺圆滑的,你这字符没做类似win的抗锯齿化处理吗? ...

ps做的 不只是点阵取模

出5入10汤圆

发表于 2017-4-25 11:36:51 | 显示全部楼层
chun2495 发表于 2017-4-25 09:35
ps做的 不只是点阵取模

1.ps做的不就是是刷新的图片数字1到9吗?我就知道这个方法刷新的字符很圆滑,还有就只是显示点阵取模的字符,有点粗糙.
2.MainKeyDisplay(PressKey, DOWN);这个函数给看一下,看看这里面怎么处理的

出25入84汤圆

 楼主| 发表于 2017-4-25 13:56:12 | 显示全部楼层
chen849928055 发表于 2017-4-25 11:36
1.ps做的不就是是刷新的图片数字1到9吗?我就知道这个方法刷新的字符很圆滑,还有就只是显示点阵取模的字符 ...
  1. void MainKeyDisplay(TKEY event, unsigned short int TouchStatus)
  2. {
  3.     switch(event){
  4.         case MAIN_PATIENT :  ButtonMenu(520, 160*0, LanguageTranslate("患者"), COLOR_WHITE, TouchStatus); break;
  5.         case MAIN_REVIEW  :  ButtonMenu(520, 160*1, LanguageTranslate("查看"),  COLOR_WHITE, TouchStatus); break;
  6.         default: break;
  7.     }
  8. }
复制代码

出0入0汤圆

发表于 2017-5-25 16:57:28 | 显示全部楼层
触摸屏多级菜单!

出0入0汤圆

发表于 2017-12-6 20:13:29 | 显示全部楼层
先收藏,有空好好学习,谢谢楼主的分享!!

出0入0汤圆

发表于 2018-3-3 21:34:09 | 显示全部楼层
先收藏,有时间研究一下,谢谢

出0入0汤圆

发表于 2018-3-5 20:33:47 | 显示全部楼层
收藏下,make~~~

出0入0汤圆

发表于 2019-10-3 17:26:11 | 显示全部楼层
mark,以后备用

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-24 18:22

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

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