请教下使用appWizard 框架 定时区域无效化显示图片出现诡异的情况 ??
本帖最后由 hpdell 于 2024-1-6 14:22 编辑请教下使用appWizard 框架 定时区域无效化显示图片出现诡异的情况 ??
如上图中,
01. A 区域 已经使用 appWizard 框架 增加了相关的控件
02. B 区域 没有增加任何控件
03. 无效化区域的 先后顺序不能够搞反,否则 B 区域不会有任何显示 啊
#define ID_TIMER_00 0
// 刷新 页面剩余 没有使用控件的所有位置空间Free space refresh
#define GX_ICON_Y_POS (62)
#define GX_FreeSpaceRefresh_W (1024-385-10) // 剩余空间宽度 = 1024 - (385(绘制日历表的宽度) + (10 间隔))
#define GX_FreeSpaceRefresh_H (600-GX_ICON_Y_POS-2) // 剩余空间高度62 = 显示年月日高度 + 间隔高度
#define GX_FreeSpaceRefresh_LEFT (2)
#define GX_FreeSpaceRefresh_RIGHT (GX_FreeSpaceRefresh_LEFT+GX_FreeSpaceRefresh_W)
#define GX_FreeSpaceRefresh_TOP (GX_ICON_Y_POS)
#define GX_FreeSpaceRefresh_BOTTON (GX_FreeSpaceRefresh_TOP+GX_FreeSpaceRefresh_H )
#define GX_Refresh_W (385)
#define GX_Refresh_H (426)
#define GX_Refresh_LEFT (637)
#define GX_Refresh_RIGHT (GX_Refresh_LEFT+GX_Refresh_W)
#define GX_Refresh_TOP (172)
#define GX_Refresh_BOTTON (GX_Refresh_TOP+GX_Refresh_H )
static const GUI_RECT __FreeSpaceRefreshRect ={GX_FreeSpaceRefresh_LEFT,
GX_FreeSpaceRefresh_TOP,
GX_FreeSpaceRefresh_RIGHT,
GX_FreeSpaceRefresh_BOTTON}; //刷新无效化
static const GUI_RECT __RefreshRect ={GX_Refresh_LEFT,
GX_Refresh_TOP,
GX_Refresh_RIGHT,
GX_Refresh_BOTTON};
void cbID_SCREEN_Main(WM_MESSAGE * pMsg)
{
WM_HWIN hItem;//, hWinOld;
WM_HWIN hWin = pMsg->hWin;
int NCode;
int Id;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG : {// 初始化
/* 创建定时器 */
WM_CreateTimer(pMsg->hWin,
ID_TIMER_00, /* 用户定义的Id。如果不对同一窗口使用多个定时器,此值可以设置为零。 */
1000,
0); /* 留待将来使用,应为0 */
__log("cbID_SCREEN_Main --> WM_INIT_DIALOG ...\r\n");
break;
}
case WM_CREATE:{
} break;
case WM_TIMER:{
WM_RestartTimer(pMsg->Data.v, 200);// 触发 WM_PAINT 更新
/* 执行窗口无效化,会触发执行WM_PAINT消息 */
WM_InvalidateRect(pMsg->hWin, & __RefreshRect ); // 必须先无效化 有控件的区域... ??
main_clock_update_show(); // 刷新控件 A区域 一次 20ms
break;
}
case WM_PAINT: {
uint32_tend;
uint32_tbegin ;
begin = HAL_GetTick();
ShowDrawDisp( pMsg) ; // 绘制需要 无效化 第2 次 , 这个函数里面还有一次 ?????
end = HAL_GetElapsedTime(begin);
__log("Clock_DialDrawDisp timer: %d\r\n", end);
break;
}
case WM_NOTIFY_PARENT:{
break;
}
default : break;
}
}
// 在这个函数里面还需要在进行无效化一次
void ShowDrawDisp(WM_MESSAGE * pMsg)
{
WM_InvalidateRect(pMsg->hWin, &__FreeSpaceRefreshRect); // 指定区域无效化, 主要是无效化 B 区域, 如果不无效化 此区域,那么此处就无法显示出任何内容, 请问这个是怎么个情况呀???
... ....
}
在WM_PAINT里面做无效化,这个姿势不好 本帖最后由 hpdell 于 2024-1-6 17:31 编辑
eric2013 发表于 2024-1-6 14:33
在WM_PAINT里面做无效化,这个姿势不好
刚刚测试了一下, 把 WM_TIMER 这个定时器回调里面的
case WM_TIMER:{
WM_RestartTimer(pMsg->Data.v, 200);
/* 执行窗口无效化,会触发执行WM_PAINT消息 */
WM_InvalidateRect(pMsg->hWin, & __RefreshRect ); // 这个屏蔽后, b 区没有任何显示出现??
// 貌似这个有控件的 a 区域必须得进行刷新一次才可以呀... ??
main_clock_update_show(); // 刷新控件 A区域 一次 20ms
break;
}
01. 改成这样, 如果把 WM_TIMER 这个里面的 __RefreshRect这个区域屏蔽, 那么再刷新 __FreeSpaceRefreshRect 这个区域 也是没有任何显示的, 感觉有些想不通啊 ??
02. 如果直接把 __FreeSpaceRefreshRect 放在 WM_TIMER这个里面刷新,那么 b 区也是没有任何显示的,
03. 我目前使用的是 AppWizard V138_632d 这个版本的
case WM_PAINT: {
uint32_tend;
uint32_tbegin ;
WM_InvalidateRect(pMsg->hWin, &__FreeSpaceRefreshRect); // 指定区域无效化
begin = HAL_GetTick();
ShowDrawDisp( pMsg) ;
end = HAL_GetElapsedTime(begin);
__log("Clock_DialDrawDisp timer: %d\r\n", end);
break;
}
在 界面屏幕里面, A 区使用了 window 创建了一片区域
B 区使用了 window 创建了一片区域
刷新 应该跟 使用了 window 创建的 区域没有什么关闭把??
hpdell 发表于 2024-1-6 17:20
刚刚测试了一下, 把 WM_TIMER 这个定时器回调里面的
case WM_TIMER:{
你这样实现,你不用AppWizard,如何处理。 本帖最后由 hpdell 于 2024-1-7 16:47 编辑
eric2013 发表于 2024-1-7 10:45
你这样实现,你不用AppWizard,如何处理。
如果不使用 appWizard 的话, 按照传统的方法, 我上面的运行是没有问题的,
刚刚又捣鼓了一下, 确定是 因为 界面里面创建屏幕时 多了一个 box 造成的,
我把 创建屏幕步骤改成如下就可以了:
screen -> window 这个就可以了, 现在改成这样使用上面的方法也是可以的哟, 貌似就是隔了一座 box :lol
之前创建屏幕的步骤是:
screen - > box
貌似现在还发现一个情况,就是在 appWizard 框架下,不能够调用 GUI_DispStringAt 这个函数来显示 自制的中文了(只要不使用 appWizard , 调用 GUI_DispStringAt就可以显示中文),
hpdell 发表于 2024-1-7 16:38
如果不使用 appWizard 的话, 按照传统的方法, 我上面的运行是没有问题的,
刚刚又捣鼓了一下, 确定 ...
自制的汉字是FontCvt.exe生成的吗 本帖最后由 hpdell 于 2024-1-8 17:26 编辑
eric2013 发表于 2024-1-8 09:47
自制的汉字是FontCvt.exe生成的吗
不是的,
使用的 是
01. TS4.exe
02. 字模III
上面 2 个其中一个生成的字库
看来 appWizard 内部还是做了蛮多的限制 或者是 appWizard 框架 修改的蛮大的喔
hpdell 发表于 2024-1-8 17:24
不是的,
使用的 是
那还真有这个可能,不兼容。 eric2013 发表于 2024-1-9 09:09
那还真有这个可能,不兼容。
感觉 appWizard 没有 guix 好用啊,而且还有很多功能 都没有完善 , 估计还需要再等个 3-5 年吧 ?!!
页:
[1]