硬汉嵌入式论坛

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

[emWin] window窗口可以绘制成圆角矩形吗?

[复制链接]

14

主题

58

回帖

100

积分

初级会员

积分
100
发表于 2020-11-26 11:32:33 | 显示全部楼层 |阅读模式
我想在当前界面弹出设置界面,设置界面用的是window   我在回调里面重绘了个圆角矩形   但是  还能显示出原来的四个直角。。。
是不是可以设置window透明   然后再绘制圆角矩形?   
请求指点一下  谢谢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
发表于 2020-11-26 12:13:14 | 显示全部楼层
设置窗口透明属性,然后WM_PAINT消息里面绘制即可。
回复

使用道具 举报

14

主题

58

回帖

100

积分

初级会员

积分
100
 楼主| 发表于 2020-11-26 13:12:03 | 显示全部楼层
eric2013 发表于 2020-11-26 12:13
设置窗口透明属性,然后WM_PAINT消息里面绘制即可。

Dingtalk_20201126131100.jpg
这个好像必须要设置新的回调才能生效 是吗?
回复

使用道具 举报

14

主题

58

回帖

100

积分

初级会员

积分
100
 楼主| 发表于 2020-11-26 13:20:11 | 显示全部楼层
years 发表于 2020-11-26 13:12
这个好像必须要设置新的回调才能生效 是吗?

测试了  确实要新的回调函数   我再测试一下  原来的回调还进不进
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
发表于 2020-11-27 01:43:23 | 显示全部楼层
years 发表于 2020-11-26 13:20
测试了  确实要新的回调函数   我再测试一下  原来的回调还进不进

不用重新设置回调。

  1. /*
  2. *********************************************************************************************************
  3. *                                          
  4. *        模块名称 : 主界面系统信息对话框
  5. *        文件名称 : App_SysInfo.c
  6. *        版    本 : V1.0
  7. *        说    明 : 本对话框悬浮在主界面上。
  8. *              1. 显示当前IP地址,未插入网线时显示192.168.X.X
  9. *              2. 显示emWin动态内存的剩余,总共是分配了12MB。
  10. *              3. 显示CPU利用率,上电后有段时间是显示的0.0%,因为网络初始化占用了一段时间CPU,不插网线的话
  11. *                 时间稍长,过会就正常了。
  12. *              4. 电压和电流的测试功能未加上。
  13. *                                             
  14. *        修改记录 :
  15. *                版本号    日期          作者         说明
  16. *                V1.0    2016-01-23    Eric2013       首发
  17. *       
  18. *        Copyright (C), 2016-2020, 安富莱电子 www.armfly.com
  19. *
  20. *********************************************************************************************************
  21. */
  22. #include "includes.h"
  23. #include "MainTask.h"




  24. /*
  25. *********************************************************************************************************
  26. *                                        宏定义和外部变量应用
  27. *********************************************************************************************************
  28. */
  29. #define MAG          3
  30. extern uint8_t g_ucNETDetect;


  31. /*
  32. *********************************************************************************************************
  33. *        函 数 名: _cbDialogSysInfo
  34. *        功能说明: 回调函数
  35. *        形    参: pMsg  WM_MESSAGE类型指针变量           
  36. *        返 回 值: 无
  37. *********************************************************************************************************
  38. */
  39. static void _cbDialogSysInfo(WM_MESSAGE * pMsg)
  40. {
  41.         GUI_RECT pRect;
  42.         char buf[40];

  43.         switch (pMsg->MsgId)
  44.         {
  45.                 case WM_TIMER:
  46.                         WM_InvalidateWindow(pMsg->hWin);
  47.                         WM_RestartTimer(pMsg->Data.v, 1000);
  48.                         break;

  49.                 case WM_PAINT:
  50.                         GUI_SetColor(0x007C18CC);
  51.                         WM_GetClientRect(&pRect);
  52.                         GUI_AA_FillRoundedRect(pRect.x0, pRect.y0, pRect.x1, pRect.y1, 6);
  53.                         GUI_SetTextMode(GUI_TEXTMODE_TRANS);
  54.                         GUI_SetColor(GUI_WHITE);
  55.                         GUI_SetFont(GUI_FONT_13_1);
  56.                         if(g_ucNETDetect == 1)
  57.                         {
  58.                                 sprintf(buf, "IP: %s", DHCP_Status[0]);
  59.                                 GUI_DispStringAt(buf, 3, 3);                               
  60.                         }
  61.                         else
  62.                         {
  63.                                 sprintf(buf, "IP: 192.168.X.X");
  64.                                 GUI_DispStringAt(buf, 3, 3);                                       
  65.                         }
  66.                        
  67.                         #if 0
  68.                                 sprintf(buf, "emWin: %uKB/8MB", GUI_ALLOC_GetNumFreeBytes()>>10);
  69.                         #else
  70.                                 sprintf(buf, "emWin: %dB", (int)GUI_ALLOC_GetNumFreeBytes());
  71.                         #endif
  72.                        
  73.                         GUI_DispStringAt(buf, 3, 17);
  74.                        
  75.                         sprintf(buf, "CPU: %5.2f%%", OSCPUUsage);
  76.                         GUI_DispStringAt(buf, 3, 31);
  77.                         GUI_DispStringAt("V: 12.2V", 3, 45);
  78.                         GUI_DispStringAt("A: 312mA", 57, 45);
  79.                         break;

  80.                 case WM_CREATE:
  81.                         /* 设置抗锯齿因数 */
  82.                         GUI_AA_SetFactor(MAG);
  83.                         WM_CreateTimer(pMsg->hWin, 0, 1000, 0);                
  84.                         break;

  85.                 default:
  86.                         WM_DefaultProc(pMsg);
  87.                         break;
  88.         }
  89. }

  90. /*
  91. *********************************************************************************************************
  92. *        函 数 名: CreateSysInfoDlg
  93. *        功能说明: 系统信息对话框
  94. *        形    参: 无          
  95. *        返 回 值: 窗口句柄
  96. *********************************************************************************************************
  97. */
  98. void CreateStatusDlg(void)
  99. {
  100.         WM_CreateWindow(690,
  101.                         345,
  102.                         109,
  103.                         62,
  104.                         WM_CF_SHOW | WM_CF_HASTRANS,
  105.                      _cbDialogSysInfo,
  106.                         0);
  107. }

  108. /***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/
复制代码
回复

使用道具 举报

14

主题

58

回帖

100

积分

初级会员

积分
100
 楼主| 发表于 2020-11-27 09:17:24 | 显示全部楼层
eric2013 发表于 2020-11-27 01:43
不用重新设置回调。

可是 我是通过资源链表的方式创建的 因为这里面还有好多控件。 这样新建完成 只能在下面设置透明标志    我测试不设置下面那个回调就不生效
Dingtalk_20201127091312.jpg
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
发表于 2020-11-27 10:38:13 | 显示全部楼层
years 发表于 2020-11-27 09:17
可是 我是通过资源链表的方式创建的 因为这里面还有好多控件。 这样新建完成 只能在下面设置透明标志     ...

发个完整点的代码,我在模拟器上试试。
回复

使用道具 举报

14

主题

58

回帖

100

积分

初级会员

积分
100
 楼主| 发表于 2020-11-27 10:41:33 | 显示全部楼层
eric2013 发表于 2020-11-27 10:38
发个完整点的代码,我在模拟器上试试。

已上传  
另外  swipelist  能设置整个背景的颜色吗  没有元素的地方是黑色的

SettingWindow.c

5.5 KB, 下载次数: 4

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
发表于 2020-11-28 03:28:23 | 显示全部楼层
years 发表于 2020-11-27 10:41
已上传  
另外  swipelist  能设置整个背景的颜色吗  没有元素的地方是黑色的

好的,周一我专门测试下这个。
回复

使用道具 举报

14

主题

58

回帖

100

积分

初级会员

积分
100
 楼主| 发表于 2020-11-30 09:05:54 | 显示全部楼层
eric2013 发表于 2020-11-28 03:28
好的,周一我专门测试下这个。

好的  多谢多谢了
回复

使用道具 举报

14

主题

58

回帖

100

积分

初级会员

积分
100
 楼主| 发表于 2020-12-2 09:05:44 | 显示全部楼层
eric2013 发表于 2020-11-28 03:28
好的,周一我专门测试下这个。

这个测试了吗   我发现把新的回调函数设置到原来的回调  也可以   就是都用一个回调函数
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
发表于 2020-12-2 11:30:10 | 显示全部楼层
years 发表于 2020-12-2 09:05
这个测试了吗   我发现把新的回调函数设置到原来的回调  也可以   就是都用一个回调函数

给整忘了,晚上就测试下。
回复

使用道具 举报

9

主题

50

回帖

77

积分

初级会员

积分
77
发表于 2021-8-27 12:07:02 | 显示全部楼层

#include "DIALOG.h"

#define ID_WINDOW_0    (GUI_ID_USER + 0x07)

#define TEXT_X_SIZE    200
#define TEXT_Y_SIZE    45

#define X_LCD_SIZE     800
#define Y_LCD_SIZE     480

#define TEXT_X_POS     ((X_LCD_SIZE-TEXT_X_SIZE)/2)
#define TEXT_Y_POS     ((Y_LCD_SIZE-TEXT_Y_SIZE)/2+150)


static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { WINDOW_CreateIndirect, "App_Startup", ID_WINDOW_0, 8, 80, X_LCD_SIZE-16, Y_LCD_SIZE-88, 0, 0x0, 0 },

};



extern GUI_CONST_STORAGE GUI_BITMAP bmAllOptomedic;
extern GUI_CONST_STORAGE GUI_BITMAP bmbackLogoWord;
extern GUI_CONST_STORAGE GUI_BITMAP bmbackLogoColorCircle24;
extern GUI_CONST_STORAGE GUI_BITMAP bmcolortOptomedicLogo;
extern GUI_CONST_STORAGE GUI_BITMAP bmoptomedicbig;


static void _cbDialog(WM_MESSAGE * pMsg) {
  WM_HWIN hItem;
  WM_HWIN hWin;
  WM_HTIMER hTimer;

  GUI_RECT Rect;

  hWin = pMsg->hWin;
  switch (pMsg->MsgId)
  {
  case WM_INIT_DIALOG:
        WM_GetClientRect(&Rect);

         WINDOW_SetBkColor(hWin, GUI_MAKE_COLOR(0x00272727));

        hTimer = WM_CreateTimer(hWin, 0, 500, 0);
    break;
        case WM_PAINT:
                WM_GetClientRect(&Rect);

                GUI_AA_FillRoundedRect(Rect.x0, Rect.y0, Rect.x1, Rect.y1, 30);

//                GUI_DrawBitmap(&bmbackLogoColorCircle24, (Rect.x1-Rect.x0-399)/2-90, (Rect.y1-Rect.y0-170)/2-30);   
//                GUI_DrawBitmap(&bmbackLogoWord, (Rect.x1-Rect.x0-399)/2+20, (Rect.y1-Rect.y0-170)/2);   
//                GUI_SetBkColor(GUI_WHITE);       
        break;
         case WM_TIMER:
       
                 break;

  default:
    WM_DefaultProc(pMsg);
    break;
  }
}


WM_HWIN CreateApp_Startup(void)
{
  WM_HWIN hWin;

  hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  WM_SetHasTrans(hWin);
//  WM_SetCallback(hWin, _cbDialogNew);

  return hWin;
}


这重绘窗口圆角,咋这样呢


回复

使用道具 举报

9

主题

50

回帖

77

积分

初级会员

积分
77
发表于 2021-8-27 15:19:10 | 显示全部楼层
EmbeddedXGJ 发表于 2021-8-27 12:07
#include "DIALOG.h"

#define ID_WINDOW_0    (GUI_ID_USER + 0x07)

忘记乘抗锯齿,尴尬
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-21 04:18 , Processed in 0.426819 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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