硬汉嵌入式论坛

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

[emWin] FRAMEWIN 的标题栏区可以放置图标 ?

[复制链接]

4

主题

15

回帖

27

积分

新手上路

积分
27
发表于 2019-6-25 16:03:55 | 显示全部楼层 |阅读模式
看手册都没说到这部分, 找了所有范例也没有.
有没有办法像Windows上那样, 将图标加到 Title bar ?



k.jpg
1.jpg
回复

使用道具 举报

3

主题

105

回帖

114

积分

初级会员

积分
114
发表于 2019-6-25 20:12:01 | 显示全部楼层
framewin的标题栏是完全可定制的,FRAMEWIN_SetOwnerDraw函数设置自绘函数;FRAMEWIN_OwnerDraw是默认绘制函数。具体用法看文档和示例,多尝试尝试就熟练了。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-6-26 09:15:22 | 显示全部楼层
简单些,独立创建一个IMAG控件,放在左上角就行了。
回复

使用道具 举报

36

主题

2050

回帖

2158

积分

至尊会员

积分
2158
发表于 2019-6-26 09:27:25 | 显示全部楼层
FramWin是是由两个窗口组成的,客户区窗口和主窗口,你对主窗口设置自定义回调即可,这样Tittle bar就可以任意绘制你想实现的东西。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

4

主题

15

回帖

27

积分

新手上路

积分
27
 楼主| 发表于 2019-6-26 13:59:24 | 显示全部楼层
公仆 发表于 2019-6-25 20:12
framewin的标题栏是完全可定制的,FRAMEWIN_SetOwnerDraw函数设置自绘函数;FRAMEWIN_OwnerDraw是默认绘制 ...

谢谢! 我试试
回复

使用道具 举报

4

主题

15

回帖

27

积分

新手上路

积分
27
 楼主| 发表于 2019-6-26 14:02:00 | 显示全部楼层
eric2013 发表于 2019-6-26 09:15
简单些,独立创建一个IMAG控件,放在左上角就行了。

可是 IMAG控件没办法放在Title区
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-6-26 14:08:35 | 显示全部楼层
james142 发表于 2019-6-26 14:02
可是 IMAG控件没办法放在Title区

使用独立创建即可,用桌面窗口做父窗口,设置Stayontop,或者直接将对话框返回的句柄作为IMAG的父创建均可。
QQ截图20190626140652.jpg
回复

使用道具 举报

3

主题

105

回帖

114

积分

初级会员

积分
114
发表于 2019-6-26 21:48:10 | 显示全部楼层
qq.gif
下面是关键的几句代码,注意必须要FRAMEWIN_SetSkinClassic之后才能支持定制标题栏。
  1. extern GUI_CONST_STORAGE GUI_BITMAP bmico;
  2. static int _OwnerDraw(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo)
  3. {
  4.   int r;
  5.   switch (pDrawItemInfo->Cmd) {
  6.   case WIDGET_ITEM_DRAW:
  7.     r = FRAMEWIN_OwnerDraw(pDrawItemInfo);
  8.     GUI_DrawBitmap(&bmico, pDrawItemInfo->x0 + 1, pDrawItemInfo->y0 + 1);
  9.     return r;
  10.   }
  11.   return FRAMEWIN_OwnerDraw(pDrawItemInfo);
  12. }
  13.         
  14. hFrame = FRAMEWIN_Create("Frame window", 0, WM_CF_SHOW, 50, 75, 220, 100);
  15. FRAMEWIN_SetSkinClassic(hFrame);
  16. FRAMEWIN_SetOwnerDraw(hFrame, _OwnerDraw);
复制代码


回复

使用道具 举报

3

主题

105

回帖

114

积分

初级会员

积分
114
发表于 2019-6-26 22:56:43 | 显示全部楼层
补充:如果不用自绘方式,也可以采用FRAMEWIN_SetSkin方法指定皮肤绘制函数来定制标题栏。皮肤方式是比较新的定制方式,根据具体需求选择一种方式即可。
用法请查看emwin文档,说得很详细很简单:
2019-06-26_225413.png
回复

使用道具 举报

3

主题

105

回帖

114

积分

初级会员

积分
114
发表于 2019-6-26 22:58:18 | 显示全部楼层
本帖最后由 公仆 于 2019-6-26 23:00 编辑

以上两种方法都是定制标题栏比较正规的方法,高效且更节省内存,应该使用这两种方式。下面是皮肤方式定制标题栏的示例代码,pdf文档中的截图。
2019-06-26_225755.png



回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2019-6-26 23:18:49 | 显示全部楼层
james142 发表于 2019-6-26 14:02
可是 IMAG控件没办法放在Title区

可以在Title区创建子控件的,你的父窗口是framewin主窗口句柄就行,而不能是客户区句柄。
代码不规范,亲人两行泪!
回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2019-6-26 23:19:18 | 显示全部楼层
公仆 发表于 2019-6-26 21:48
下面是关键的几句代码,注意必须要FRAMEWIN_SetSkinClassic之后才能支持定制标题栏。

这种方式没法用皮肤色。
代码不规范,亲人两行泪!
回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2019-6-26 23:20:52 | 显示全部楼层
公仆 发表于 2019-6-26 22:58
以上两种方法都是定制标题栏比较正规的方法,高效且更节省内存,应该使用这两种方式。下面是皮肤方式定制标 ...

这种是皮肤色回调方案了。
代码不规范,亲人两行泪!
回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2019-6-26 23:21:57 | 显示全部楼层
eric2013 发表于 2019-6-26 14:08
使用独立创建即可,用桌面窗口做父窗口,设置Stayontop,或者直接将对话框返回的句柄作为IMAG的父创建均 ...

这种方式移动的话,只能后者。
代码不规范,亲人两行泪!
回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2019-6-26 23:27:12 | 显示全部楼层
感觉这些方法都不够直接,SEGGER应该增加一个FrameWin_SetTitleIMAG或者FrameWin_SetTitleBitmap专业些,老铁们怎么看。否则用户为标题栏搞个图标都这么麻烦,无论是用户体验还是以后AppWizard添加图标,都极不爽
代码不规范,亲人两行泪!
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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