OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4081|回复: 1

@zuozhongkai emwin跨窗口发消息,无法接收

[复制链接]

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2013-6-21
在线时间
55 小时
发表于 2017-6-26 11:01:06 | 显示全部楼层 |阅读模式
1金钱
@zuozhongkai 你好,技术支持转过来。
开发硬件:429阿波罗 + 7寸屏
开发软件:MDK5。21
开发库件:HAL

背景描述:从官方的WIDGET_NumPad.c改编而来 , 想做一个对话框1内再创建一个对话框2,并从对话框2发消息给对话框1的案例。
测试结果:先在我们的硬件上好象无法实现,后转模拟器一样无法实现。
请求支援!

过程简述如下:
1. 从桌面创建对话框hWinUser,再从对话框hWinUser内部创建对话框hWinNumpad
2. 从对话框hWinNumpad内发消息到hWinUser去显示
3. 对话框hWinUser无法收到数据并显示,接收不到消息值。

代码简述如下:

[mw_shl_code=applescript,true]第一步. 第1个窗口(接收消显, 在本窗口内开启数字键盘)
//回调
static void _cbDialogUser ( WM_MESSAGE * pMsg )
{
    //其它略
    switch ( pMsg->MsgId )
    {
        //接收消息并显示
        case MSG_ID_NUMVALUE:
                hItem = WM_GetDialogItem ( hDlg, GUI_ID_EDIT0);
                if(pMsg->Data.v == 1)
                    EDIT_SetText ( hItem, "1" );
                else
                    EDIT_SetText ( hItem, "0" );
                break;
               
        case WM_NOTIFY_PARENT:
            Id    = WM_GetId ( pMsg->hWinSrc );
            NCode = pMsg->Data.v;              
            switch ( NCode )
            {
                case WM_NOTIFICATION_RELEASED:
                    if(Id == GUI_ID_NUMPAD)
                    {
                        //开启键盘
                        Win_Numpad(WM_HBKWIN);
                    }
                    break;
            }
            break;           
    }
}

//创建
hWinUser = GUI_CreateDialogBox ( _aDialogUser,GUI_COUNTOF ( _aDialogUser ),_cbDialogUser, hWin, 0, 0 );


第二步. 第2个窗口(发送消息)
//回调
void _cbDialogNumPad ( WM_MESSAGE * pMsg )
{
    //其它略
    switch ( pMsg->MsgId )
    {

        case WM_NOTIFY_PARENT:
            Id    = WM_GetId ( pMsg->hWinSrc );
            NCode = pMsg->Data.v;              
            switch ( NCode )
            {
                case WM_NOTIFICATION_RELEASED:
                    //方法2,发送带参数消息
                    Message.MsgId = MSG_ID_NUMVALUE;
                    switch(step)
                    {
                        case 0:
                            step = 1;
                            Message.Data.v = 1;
                            break;
                        case 1:
                            step = 0;
                            Message.Data.v = 0;
                            break;
                    }
                    WM_SendMessage(hWinUser,&Message);
                    break;
            }
            break;
      
        //其它略
        case WM_PAINT: break;
        case WM_INIT_DIALOG:break;
        default: WM_DefaultProc ( pMsg );           
      
    }
}

//创建
hWinNumpad = GUI_CreateDialogBox ( _aDialogNumPad,GUI_COUNTOF ( _aDialogNumPad ),_cbDialogNumPad, hWin, 0, 0 );

[/mw_shl_code]

WIDGET_NumPad.rar

3.44 KB, 下载次数: 133

模拟器源代码

最佳答案

查看完整内容[请看2#楼]

结贴。 已经搞定。 加一句:hWinUser = WM_GetClientWindow(hWinUser);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2013-6-21
在线时间
55 小时
 楼主| 发表于 2017-6-26 11:01:07 | 显示全部楼层
结贴。
已经搞定。
加一句:hWinUser = WM_GetClientWindow(hWinUser);


回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 07:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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