硬汉嵌入式论坛

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

[emWin] MOVE与Hide/Show哪个更耗资源

[复制链接]

15

主题

56

回帖

101

积分

初级会员

积分
101
发表于 2018-6-6 17:36:17 | 显示全部楼层 |阅读模式
是这样的,项目中有大量的 将一个IMAGE从A位置移动到B位置 这样的操作
目前采用的是WM_MoveChildTo实现移动
看了下它的代码发现这个函数其中有两次分别对新区域和旧区域的无效刷新
  1. /*********************************************************************
  2. *
  3. *       WM_MoveChildTo
  4. */
  5. void WM_MoveChildTo(WM_HWIN hWin, int x, int y) {
  6.   WM_HWIN  hParent;
  7.   WM_Obj * pParent;
  8.   WM_Obj * pWin;

  9.   if (hWin) {
  10.     WM_LOCK();
  11.     hParent = WM_GetParent(hWin);
  12.     if (hParent) {
  13.       pParent = WM_LOCK_H(hParent);
  14.       pWin    = WM_LOCK_H(hWin);
  15.       x -= pWin->Rect.x0 - pParent->Rect.x0;
  16.       y -= pWin->Rect.y0 - pParent->Rect.y0;
  17.       GUI_UNLOCK_H(pParent);
  18.       GUI_UNLOCK_H(pWin);
  19. /*********************************/
  20.       WM__MoveWindow(hWin, x, y);
复制代码



  1. /*********************************************************************
  2. *
  3. *       WM__MoveWindow
  4. */
  5. void WM__MoveWindow(WM_HWIN hWin, int dx, int dy) {
  6.   WM_Obj * pWin;
  7.   WM_HWIN  hFirstChild;
  8.   GUI_RECT r;
  9.   WM_MOVE_INFO Info;
  10.   WM_MESSAGE Msg = {0};

  11.   if ((hWin) && (dx || dy)) {
  12.     pWin = WM_LOCK_H(hWin);
  13.     r = pWin->Rect;
  14.     GUI_MoveRect(&pWin->Rect, dx, dy);
  15.     GUI_MoveRect(&pWin->InvalidRect, dx, dy);
  16.     hFirstChild = pWin->hFirstChild;
  17.     GUI_UNLOCK_H(pWin);
  18.     _MoveDescendents(hFirstChild, dx, dy);  // Children need to be moved along
  19.     //
  20.     // Invalidate old and new area
  21.     //
  22.     pWin = WM_LOCK_H(hWin);
  23.     if ((pWin->Status & WM_SF_ISVIS) && (pWin->hParent)) {
复制代码


所以我想
移动窗口既然刷新两次和图片大小相同的区域
和单纯的创建两个不同位置的控件,需要移动时进行Hide、Show的操作相比会不会更耗资源呢
(当然,Show和Hide也会对相应的区域进行一次无效化)
回复

使用道具 举报

15

主题

56

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2018-6-6 17:37:56 | 显示全部楼层
嗯?会吞代码吗?怎么少了半截
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2018-6-7 02:57:06 | 显示全部楼层
移动操作要考虑的比较多,特别是裁剪问题。
回复

使用道具 举报

15

主题

56

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2018-6-7 09:21:50 | 显示全部楼层
eric2013 发表于 2018-6-7 02:57
移动操作要考虑的比较多,特别是裁剪问题。

这样啊,知道了,还有一个问题,HideWindow我看源码是给窗口设了个标志,然后刷新区域,在这之后每次对话框WM_PAINT处理时,是不是会检测窗口标志,然后决定是否刷新?
也就是问,Hide的窗口是不是不耗资源
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2018-6-7 19:44:45 | 显示全部楼层
drifting1024 发表于 2018-6-7 09:21
这样啊,知道了,还有一个问题,HideWindow我看源码是给窗口设了个标志,然后刷新区域,在这之后每次对话 ...

耗哪方面的资源,CPU是不耗了。
回复

使用道具 举报

15

主题

56

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2018-6-7 19:47:26 | 显示全部楼层
eric2013 发表于 2018-6-7 19:44
耗哪方面的资源,CPU是不耗了。

问的就是CPU的,谢谢龙猫哥
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-19 15:38 , Processed in 0.039974 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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