硬汉嵌入式论坛

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

[emWin] LISTVIEW控件回调函数问题

[复制链接]

10

主题

35

回帖

65

积分

初级会员

积分
65
发表于 2022-8-18 15:05:26 | 显示全部楼层 |阅读模式
本帖最后由 Ghanfu 于 2022-8-18 18:18 编辑

就我理解看来,emwin控件属于窗口的一种,应该也能支持回调函数吧?

但是用代码:

hItem = LISTVIEW_CreateEx(0,41,480,192,WM_HBKWIN,WM_CF_SHOW,0,GUI_ID_LISTVIEW0);
WM_SetCallback(hItem,_cbListWindow);

static void _cbListWindow(WM_MESSAGE * pMsg)
{
    WM_HWIN hItem;
    WM_HWIN hWinOld;
    hItem = pMsg->hWin;
    switch(pMsg->MsgId)
    {
        case WM_PRE_PAINT:
            GUI_MULTIBUF_Begin();
            break;
        
        case WM_CREATE:
            break;
        case WM_PAINT:
            hWinOld = WM_SelectWindow(pMsg->hWin);

            GUI_SetLineStyle(GUI_LS_SOLID);
            GUI_SetPenSize(1);
            GUI_SetColor(GUI_WHITE);
            GUI_DrawLine(80, 42, 80, 200);
            /* 配置回之前选择的目标窗口 */
            WM_SelectWindow(hWinOld);
            break;

        case WM_POST_PAINT:
            GUI_MULTIBUF_End();
            break;
        default:
            LISTVIEW_Callback(pMsg);
            break;

    }

}


直接创建不出来LISTVIEW控件了,emwin控件不能设定回调函数吗



回复

使用道具 举报

10

主题

35

回帖

65

积分

初级会员

积分
65
 楼主| 发表于 2022-8-18 15:08:38 | 显示全部楼层

我现在想实现在表格上画线(2D绘图),参照V6开发文档,只能采用在父窗口 case WM_NOTIFY_PARENT:中绘图的方案,但是这种方案存在以下问题:
当表格控件更改选择项时,才能显示绘图,而不是表格控件生成后立即显示;(尝试在表格控件创建完毕后,直接发送WM_NOTIFICATION_SEL_CHANGED消息,但是通过调试发现,主窗口收到消息时,表格控件还没显示出来,所以此时绘图操作也没用)
回复

使用道具 举报

10

主题

35

回帖

65

积分

初级会员

积分
65
 楼主| 发表于 2022-8-18 15:31:47 | 显示全部楼层
实现上面需求最理想的方法应该就是安富莱V6参考文档里提到的第一种方案,用窗口(控件)回调函数来绘图,但是我这不知道为什么 WM_SetCallback(hItem,_cbListWindow); 设置回调函数后控件直接不显示,屏蔽此条语句之后一切正常,麻烦各位大佬帮忙看下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2022-8-19 10:35:57 | 显示全部楼层
在WM_PAINT消息里面里面先调用 LISTVIEW_Callback(pMsg);
回复

使用道具 举报

10

主题

35

回帖

65

积分

初级会员

积分
65
 楼主| 发表于 2022-8-25 11:23:52 | 显示全部楼层
eric2013 发表于 2022-8-19 10:35
在WM_PAINT消息里面里面先调用 LISTVIEW_Callback(pMsg);

嗯嗯  解决了  谢谢谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2022-8-26 10:38:12 | 显示全部楼层
Ghanfu 发表于 2022-8-25 11:23
嗯嗯  解决了  谢谢谢谢

好久不弄了,有这么点印象。
回复

使用道具 举报

10

主题

35

回帖

65

积分

初级会员

积分
65
 楼主| 发表于 2022-8-26 10:52:35 | 显示全部楼层
本帖最后由 Ghanfu 于 2022-8-26 11:16 编辑
eric2013 发表于 2022-8-26 10:38
好久不弄了,有这么点印象。

看您给的V6教程里,自定义控件回调函数中,把<WIDGET>_Callback(pMsg);放到 default下,用于处理该控件的其它默认消息,但是为什么还要放在WM_PAINT:下面呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2022-8-27 01:25:06 | 显示全部楼层
Ghanfu 发表于 2022-8-26 10:52
看您给的V6教程里,自定义控件回调函数中,把_Callback(pMsg);放到 default下,用于处理该控件的其它默认 ...

你这个输入自定义重绘玩法了。要优先default,再绘制你自己的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 02:48 , Processed in 0.176608 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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