硬汉嵌入式论坛

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

[emWin] emwin 窗口里点击BUTTON进行2D绘图要怎么做

[复制链接]

2

主题

5

回帖

11

积分

新手上路

积分
11
发表于 2021-9-9 19:42:34 | 显示全部楼层 |阅读模式
emwin 窗口里点击BUTTON进行2D绘图要怎么做,比如绘制一个开关,点击BUTTON让开关重新绘制成闭合或者打开的样子?
回复

使用道具 举报

0

主题

102

回帖

102

积分

初级会员

积分
102
发表于 2021-9-10 08:34:10 | 显示全部楼层
贴图,开关状态弄成图,换图显示就完事
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2021-9-10 08:54:29 | 显示全部楼层
tigerdill 发表于 2021-9-10 08:34
贴图,开关状态弄成图,换图显示就完事

如果不用图片,光用绘图画线不行吗?
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2021-9-10 09:01:02 | 显示全部楼层
光用绘图就没有办法吗?我用WM_SelectWindow(WM_GetClientWindow(pMsg->hWin));在按钮内操作后,原先界面上的控件就都没有了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
发表于 2021-9-10 09:10:27 | 显示全部楼层
按钮自定义回调即可,此教程的第47章
http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
发表于 2021-9-10 09:10:54 | 显示全部楼层
如果使用emWin6.x的话,也可以AppWizard,设置各种按钮效果很方便

回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2021-9-10 09:35:42 | 显示全部楼层
eric2013 发表于 2021-9-10 09:10
按钮自定义回调即可,此教程的第47章
http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834

static void _cbButton0(WM_MESSAGE * pMsg) //--------------(6)
{
        WM_HWIN hWin;
        GUI_RECT Rect;
        hWin = pMsg->hWin;
        switch (pMsg->MsgId)
        {
        case WM_PAINT:
                WM_GetClientRect(&Rect);
                if (BUTTON_IsPressed(hWin))
                {
                        GUI_SetColor(GUI_WHITE);
                        GUI_Clear();
                        GUI_DrawLine(550, 340 , 550 , 410 );
                }
                else
                {
                        GUI_DrawLine(550, 340, 550, 410);
                }
                GUI_SetFont(&GUI_FontSIZE64);
                GUI_DispStringInRect("\xe5\x90\x88\xe9\x97\xb8", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER);
                break;
        default:
                BUTTON_Callback(pMsg);
        }
}
还是画不出来线么
回复

使用道具 举报

0

主题

274

回帖

274

积分

高级会员

积分
274
发表于 2021-9-10 11:16:58 | 显示全部楼层
在界面的初始化部分设置按钮的回调函数
        hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
        WM_SetCallback(hItem, _cbButton);

//按钮的回调函数
void _cbButton(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin;
    GUI_RECT Rect;
    hWin = pMsg->hWin;
        const GUI_FONT *gui;
        const GUI_FONT *btn;
       
    char buff[16];
    switch (pMsg->MsgId)
    {
    case WM_PAINT:
        WM_GetClientRect(&Rect);
                if(WM_GetFocusedWindow() == hWin)
                {
                        GUI_DrawGradientV(Rect.x0, Rect.y0, Rect.x1, Rect.y1, 0xFFBE9270,0xFF7D5639);
                        GUI_SetColor(GUI_WHITE);
                }else{
                        GUI_DrawGradientV(Rect.x0, Rect.y0, Rect.x1, Rect.y1, GUI_GRAY_AA, GUI_GRAY_7C);
                        GUI_SetColor(GUI_BLACK);
                }
        BUTTON_GetText(hWin,buff,16);
                GUI_SetTextMode(GUI_TEXTMODE_TRANS);
                btn = BUTTON_GetFont(hWin);
                gui = GUI_GetFont();
                GUI_SetFont(btn);
        GUI_DispStringInRect(buff, &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER);
                GUI_SetFont(gui);
        break;
    default:
        BUTTON_Callback(pMsg);
    }
}


这个是emwin多个版本都可以用的,肯定可以自己绘制按钮。
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2021-9-10 11:28:21 | 显示全部楼层
regbbs 发表于 2021-9-10 11:16
在界面的初始化部分设置按钮的回调函数
        hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
   ...

我的意思是我点一下button,怎么才能用GUI_DrawLine画根线,用了WM_SelectWindow后,线是画上了原来界面上的工具都没了
回复

使用道具 举报

0

主题

274

回帖

274

积分

高级会员

积分
274
发表于 2021-9-10 12:00:26 | 显示全部楼层
327804286 发表于 2021-9-10 11:28
我的意思是我点一下button,怎么才能用GUI_DrawLine画根线,用了WM_SelectWindow后,线是画上了原来界面 ...

不理解你到底是要做成什么样的效果了。。。
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2021-9-10 14:14:43 | 显示全部楼层
regbbs 发表于 2021-9-10 12:00
不理解你到底是要做成什么样的效果了。。。

就比如屏幕左边是几个按钮,右边是空白,我想点一下按钮就在右边画一根线,我现在只是找到用WM_SelectWindow可以画线,但是线画出来了,左边的按钮就都没了
回复

使用道具 举报

0

主题

274

回帖

274

积分

高级会员

积分
274
发表于 2021-9-11 10:31:26 | 显示全部楼层
327804286 发表于 2021-9-10 14:14
就比如屏幕左边是几个按钮,右边是空白,我想点一下按钮就在右边画一根线,我现在只是找到用WM_SelectWin ...

想快速解决先定义个标记,然后在窗口的WM_PAINT消息里面画线。有时间我测试下其他办法
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-21 05:05 , Processed in 0.528544 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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