硬汉嵌入式论坛

 找回密码
 立即注册
查看: 656|回复: 31
收起左侧

[emWin] AppWizard创建页面如何通过外面按键切换页面

[复制链接]

44

主题

562

回帖

699

积分

金牌会员

积分
699
发表于 2024-2-20 11:17:54 | 显示全部楼层 |阅读模式
本帖最后由 ou513 于 2024-2-20 16:42 编辑

如题AppWizard创建页面如何通过外面按键切换页面,AppWizard创建若干页面,AppWizard自带的Interactions 互动消息都是鼠标(触摸)进页面切换。不知道如何通过外部实体按键进行页面

22.gif
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106645
QQ
发表于 2024-2-20 11:23:18 | 显示全部楼层
实体按键还是用自定义窗口消息控制比较方便。手动添加下代码。
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-20 14:14:31 | 显示全部楼层
eric2013 发表于 2024-2-20 11:23
实体按键还是用自定义窗口消息控制比较方便。手动添加下代码。

是用自定义窗口消息控制,设计就是一些全局的功能按键,不管在哪个页面下按功能按键就进行页面切换的,那是不是就是按键按下后按键消息就直接处理页面的隐藏和显示操作了,问题指的是现在就操不了这个页面ID,
如ID_SCREEN_00、ID_SCREEN_01;
WM_ShowWindow(ID_SCREEN_00);
WM_HideWindow(ID_SCREEN_01);


QQ截图20240220133324.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106645
QQ
发表于 2024-2-20 14:33:49 | 显示全部楼层
ou513 发表于 2024-2-20 14:14
是用自定义窗口消息控制,设计就是一些全局的功能按键,不管在哪个页面下按功能按键就进行页面切换的,那 ...

得操作SCREEN的句柄才行,得看下那个对应他的句柄。
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-20 15:04:37 | 显示全部楼层
eric2013 发表于 2024-2-20 14:33
得操作SCREEN的句柄才行,得看下那个对应他的句柄。

就是不知道这个句柄来着,还在摸索着
回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-20 15:33:37 | 显示全部楼层
ou513 发表于 2024-2-20 15:04
就是不知道这个句柄来着,还在摸索着




我目前使用的页面切换,貌似使用的是 appWizard + GUIBuilder

说一下大致使用方法,界面切换功能是可以实现,只是目前个人感觉 使用的 app 太多了,不太好方面管理

01.  使用 appWizard 创建 主页面 及一些相关的页面
02.  使用 GUIBuilder 创建 动态显示,关闭的页面, 在工程中人工增加 GUIBuilder 产生的相关的代码,页面创建  ( 触摸相关的控件或满足某些条件再或者是实体按键发送消息至主页面需要切换的页面)
03.  在 appWizard  创建的某个页面里面,当触摸到某个控件需要进行页面切换时 就发送消息到主页面
      在 这个主页面里面进行页面的 创建,关闭 就可以了

你如果是实体按钮的话,就把触摸相关的控件改成按键 有效按下就发送相关的学校即可
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-20 16:11:37 | 显示全部楼层
hpdell 发表于 2024-2-20 15:33
我目前使用的页面切换,貌似使用的是 appWizard + GUIBuilder

说一下大致使用方法,界面切换功 ...

这个办法也可以,但是appWizard + GUIBuilder搞起来比较麻烦,特别是GUIBuilder就只能简单布局。我再研学一下看看能不能把APP创建页面的句柄抠出来,如果搞定用起来就比较顺了
回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-20 16:23:57 | 显示全部楼层
ou513 发表于 2024-2-20 16:11
这个办法也可以,但是appWizard + GUIBuilder搞起来比较麻烦,特别是GUIBuilder就只能简单布局。我再研学 ...


如果能够吧 appWizard 的句柄使用起来那肯定是最好最方便也最好管理的了,

后续搞起来就分享一下你的方法哈



回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-20 16:33:43 | 显示全部楼层
hpdell 发表于 2024-2-20 16:23
如果能够吧 appWizard 的句柄使用起来那肯定是最好最方便也最好管理的了,

后续搞起来就分享一下你 ...

貌似搞定了,目前已经可以切换页面了。目前通过页面的槽函数把句柄保存起来,这样就可以了用了。暂时还没测试是否有其他问题,但已经可以进行页面切换了。
QQ截图20240220163039.png



有了句柄后,就可以直接在主页面里进行页面切操作了。

case WM_KEY:
          key_flag = ((WM_KEY_INFO*)(pMsg->Data.p));

          switch (key_flag->Key)
          {
          case GUI_KEY_LEFT:
                  WM_ShowWindow(SCREEN_00);
                  break;
          case  GUI_KEY_RIGHT:
                  WM_HideWindow(SCREEN_00);
                  break;
          }
          break;


回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-21 12:15:12 | 显示全部楼层
ou513 发表于 2024-2-20 16:33
貌似搞定了,目前已经可以切换页面了。目前通过页面的槽函数把句柄保存起来,这样就可以了用了。暂时还没 ...

你这个貌似是已知 的界面 进行跳转,

如果当满足某些条件后才开始界面跳转的话,你这个方法是否可行啊 ?
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-21 13:44:25 | 显示全部楼层
hpdell 发表于 2024-2-21 12:15
你这个貌似是已知 的界面 进行跳转,

如果当满足某些条件后才开始界面跳转的话,你这个方法是否可行啊 ...

个人认为这个就是逻辑设计了,只要有了页面句柄就可以实现了页面切换了啊
回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-21 14:27:33 | 显示全部楼层
ou513 发表于 2024-2-21 13:44
个人认为这个就是逻辑设计了,只要有了页面句柄就可以实现了页面切换了啊


问题是 在 没有满足相关条件时, 系统还没有运行到需要跳转的页面,那么需要的句柄 也无法获得啊 ??

回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-21 14:53:25 | 显示全部楼层
hpdell 发表于 2024-2-21 14:27
问题是 在 没有满足相关条件时, 系统还没有运行到需要跳转的页面,那么需要的句柄 也无法获得啊 ??
...

在槽函数里面就把这个页面句柄保存为全局变量了,
回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-21 16:17:19 | 显示全部楼层
ou513 发表于 2024-2-21 14:53
在槽函数里面就把这个页面句柄保存为全局变量了,

不知道该怎么搞啊,有配置好的 槽发来我研究研究一下 ?
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-21 17:08:56 | 显示全部楼层
hpdell 发表于 2024-2-21 16:17
不知道该怎么搞啊,有配置好的 槽发来我研究研究一下 ?

/*** Begin of user code area ***/

WM_HWIN SCREEN_00;       //页面句柄定义为全局变量

/*** End of user code area ***/

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       cbID_SCREEN_00
*/
void cbID_SCREEN_00(WM_MESSAGE * pMsg) {
  GUI_USE_PARA(pMsg);

  //
  WM_MESSAGE  Message;
  switch (pMsg->MsgId)
  {
  case WM_CREATE:
          SCREEN_00 = pMsg->hWin;    //保存页面句柄
          break;
  case WM_INIT_DIALOG:
          //WM_HideWindow(pMsg->hWin);
          break;
  }
}

回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-22 09:04:09 | 显示全部楼层
ou513 发表于 2024-2-21 17:08
/*** Begin of user code area ***/

WM_HWIN SCREEN_00;       //页面句柄定义为全局变量

SCREEN_00;   这个只需要在 软件里面定义就可以了吗 ?

在 appWizard 工具里面不需要定义,对吧 ?
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-22 09:37:31 | 显示全部楼层
hpdell 发表于 2024-2-22 09:04
SCREEN_00;   这个只需要在 软件里面定义就可以了吗 ?

在 appWizard 工具里面不需要定义,对吧 ?

APPWizard里面不需要,就是在屏幕的槽函数文件 ID_SCREEN_00_Slots.c 里面定义就可以。
回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-22 11:22:22 | 显示全部楼层
ou513 发表于 2024-2-22 09:37
APPWizard里面不需要,就是在屏幕的槽函数文件 ID_SCREEN_00_Slots.c 里面定义就可以。

好的,感谢感谢啊
回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-23 09:08:28 | 显示全部楼层
本帖最后由 hpdell 于 2024-2-23 09:10 编辑
ou513 发表于 2024-2-22 09:37
APPWizard里面不需要,就是在屏幕的槽函数文件 ID_SCREEN_00_Slots.c 里面定义就可以。




你好,我测试了一下,我搞的貌似不行 ,

程序没有运行到  

case WM_CREATE:
          SCREEN_00 = pMsg->hWin;    //保存页面句柄
          break;   

这个地方来 , 估计是系统还没有运行到这个界面里面,这个界面是不是需要进行初始化 一次 ?

APPW_CreateRoot(&ID_SCREEN_00_RootInfo, WM_UNATTACHED);
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-23 09:25:55 | 显示全部楼层
hpdell 发表于 2024-2-23 09:08
你好,我测试了一下,我搞的貌似不行 ,

程序没有运行到  


忽略了一个地方,APPWizard屏幕属性需要启用持久模式。当然了这样会带来一个弊端,内存小的平台中无法用这个办法。
QQ截图20240223092215.png





回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-23 11:07:45 | 显示全部楼层
ou513 发表于 2024-2-23 09:25
忽略了一个地方,APPWizard屏幕属性需要启用持久模式。当然了这样会带来一个弊端,内存小的平台中无法 ...




原来如此呀,

如果想省内存的话,那就还是得 appWizard + GUIBuilder  组合才行
(因为使用 GUIBuilder 搞的界面,在需要是创建,用完后删除), 只是这样又不太方面管理,貌似有点小纠结啦  

回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-23 11:25:57 | 显示全部楼层
ou513 发表于 2024-2-23 09:25
忽略了一个地方,APPWizard屏幕属性需要启用持久模式。当然了这样会带来一个弊端,内存小的平台中无法 ...




请教下,在 appwizard 里面能否随意定义屏幕的大小,只要不超过

11.png    这个属性里面的定义大小就好,

比如,这个屏幕属性里面定义的屏幕大小是 1024*600 , 默认情况下后续所有定义的屏幕大小都是 1024*600 ,

但是有时需要 屏幕显示的比这个小的情况,如 480*320 时,此时该修改哪些配置参数呀 ??

回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-23 11:38:52 | 显示全部楼层
本帖最后由 ou513 于 2024-2-23 11:46 编辑
hpdell 发表于 2024-2-23 11:25
请教下,在 appwizard 里面能否随意定义屏幕的大小,只要不超过

   这个属性里面的定义大小就 ...

在APPWizard中实际创建的屏幕大小是随意的,其实我发现,APPWizard中的屏幕其实就是一个窗口。可以创建很多个小尺寸屏幕(窗口)把它们的位置不重叠排开,只要屏幕启用持久模式,所有屏幕都可以显示出来。
01.png 02.png 03.png 04.png
05.png
回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-23 15:46:35 | 显示全部楼层
本帖最后由 hpdell 于 2024-2-23 15:49 编辑
ou513 发表于 2024-2-23 11:38
在APPWizard中实际创建的屏幕大小是随意的,其实我发现,APPWizard中的屏幕其实就是一个窗口。可以创建很 ...

你好,你上面的那些屏幕显示都不是我想要的啊,

我只需要
ID_SCREEN_00
ID_SCREEN_01
ID_SCREEN_02
ID_SCREEN_03
屏幕的其中任意一个显示出来就可以了,多余的部分都不显示啊

------------------------------------------------------------------------------------------------------
我刚刚搭建了一个测试:

01.  appwizard 里面设置的屏幕大小为 644*400 , 在这个屏幕里面,方格显示部分 我不需要
12.png

02.  在正常显示的屏幕里面,点击第一个编辑框
13.png

03.  点击上面 02 里面的第一个编辑框后显示的如下,屏幕的右下部分不该显示的部分也显示出来了呀 (01 图片里面的方格部分也显示出来了,这是我不需要的) ??
14.png



回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-23 17:42:42 | 显示全部楼层
hpdell 发表于 2024-2-23 15:46
你好,你上面的那些屏幕显示都不是我想要的啊,

我只需要

不太明白不想要的效果,看你01明显就是appwizard创建工程的时候分LCD尺寸辨率大了,这样就导致创建屏幕尺寸小了就会显示方格。工程里创建屏幕是你需要显示内容的尺寸大小。

再看03显示,就是你的显示窗口小了,自热会有个背景图,如果没有没背景图就会显示方格,解决这个问题就是改变背景图的颜色(大部分时候显示黑色)。因为屏幕启用持久模式后,只要没有被裁剪覆盖就会一直显示,如果不想显示就需要隐藏操作。


QQ截图20240223172752.png

回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-24 09:51:31 | 显示全部楼层
ou513 发表于 2024-2-23 17:42
不太明白不想要的效果,看你01明显就是appwizard创建工程的时候分LCD尺寸辨率大了,这样就导致创建屏幕尺 ...

估计是我没有把问题描述清楚啊
-----------------------------------------------------------------------------------------------------------
1.  显示屏实际硬件分辨率是: 1024*600
2.  需要显示分辨率为 640*480 的窗口界面
3.  把 640*480 的窗口界面显示在 1024*600 上,且 1024*600 其他剩余的部分不被覆盖
4.  如果修改了 实际硬件 lcd 屏幕分辨率大小为 640*480的话,那其他窗口的实际分辨率窗口也会随之发生变
    化啊
5.  我的意思是在保持实际硬件lcd 分辨率为 1024*600 的情况下,再在1024*600上显示一个 640*480 的窗口
    进行叠加 , 这个时候在 appWizard 里面该如何配置呀 ?(如果使用  GUIBuilder  是可以实现的)

回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-24 12:00:14 | 显示全部楼层
hpdell 发表于 2024-2-24 09:51
估计是我没有把问题描述清楚啊
-------------------------------------------------------------------- ...

在硬件1024*600上显示一个 640*480 的窗口,在Appwizard就创建一个SCREEN大小为640*480的屏幕啊。那你必然会出现现在不能完全覆盖LCD屏幕啊,这个时候设置一个背景就完了,或设置WM_HBKWIN背景。GUIBuilder好像就默认设置WM_HBKWIN。你把dome工程上传看看呗
回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-24 15:13:15 | 显示全部楼层
ou513 发表于 2024-2-24 12:00
在硬件1024*600上显示一个 640*480 的窗口,在Appwizard就创建一个SCREEN大小为640*480的屏幕啊。那你必 ...




NewProjectAppWizard_V142_034.7z (8.45 MB, 下载次数: 2)

你看看,使用 AppWizard V142_636  版本

大概描述一下:


ID_SCREEN_SysInfo      == 1024*600
ID_SCREEN_Keyboard   == 640*400


01. 点击 ID_SCREEN_SysInfo 这个屏幕里面的第一个编辑框会弹出 ID_SCREEN_Keyboard 这个屏幕,但是这个屏幕会完全覆盖 ID_SCREEN_SysInfo 这个屏幕,这是我不希望看到的

你看看帮我修改一下实现我要的效果,先感谢感谢了啊
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-24 20:37:56 | 显示全部楼层
hpdell 发表于 2024-2-24 15:13
你看看,使用 AppWizard V142_636  版本

大概描述一下:

在你的工程中再创建一个屏幕大小1024*600,屏幕添加一个box控件背景设置黑色,启用持久模式。看看效果是不是你想要的。
回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-25 11:09:49 | 显示全部楼层
ou513 发表于 2024-2-24 20:37
在你的工程中再创建一个屏幕大小1024*600,屏幕添加一个box控件背景设置黑色,启用持久模式。看看效果是 ...

按照你的方法刚刚测试了一下, 貌似不行啊
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2024-2-25 11:57:04 | 显示全部楼层
hpdell 发表于 2024-2-25 11:09
按照你的方法刚刚测试了一下, 貌似不行啊

我试了一下是可以的,其实就是用一个屏幕来当背景颜色,因为当显示不满LCD尺寸的时候必然存在一部分空白局域就需要一个背景颜色来覆盖嘛。你再自行研修研修。
回复

使用道具 举报

609

主题

3044

回帖

4891

积分

至尊会员

积分
4891
发表于 2024-2-25 13:15:19 | 显示全部楼层
ou513 发表于 2024-2-25 11:57
我试了一下是可以的,其实就是用一个屏幕来当背景颜色,因为当显示不满LCD尺寸的时候必然存在一部分空白 ...

好的,我再研究研究下看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-27 17:13 , Processed in 0.435691 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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