OpenEdv-开源电子网

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

EMWIN如何显示底层窗口的同时又不要触发回调函数??

[复制链接]

28

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2017-10-14
在线时间
76 小时
发表于 2018-3-27 22:15:40 | 显示全部楼层 |阅读模式
1金钱
在一个窗口上点击按钮生成提示窗口,提示窗口为阻塞式,但是在不点击OK按钮时,点击了底层窗口,提示窗口消失,再次点击生成提示窗口按钮时就会卡死,请问大佬们如何解决???

                WM_HideWindow(pMsg->hWin);
                GUI_ExecCreatedDialog(_CreateMessageBox("Sensor is not response!","Caption", 0, GUI_FONT_24B_ASCII));
                WM_ShowWindow(pMsg->hWin);

尝试过隐藏窗口后再显示,但是隐藏后,底层窗口就不见了,不想让底层窗口消失,,,,,


创建阻塞与非阻塞是一样的效果,都会卡死.....................


请问如何解决????

最佳答案

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

感觉自己真的很蠢,Messagebox_Create();函数果然是可以的,但是无法改变窗体大小,按钮大小等,于是我使用了_CreateMessageBox("Not response!","Caption", 0, GUI_FONT_24B_ASCII)此函数,只要不要建立阻塞式窗口就可以虽然不点击OK按钮关闭,下次窗口还是可以建立起来的,,,在回调函数中可以改变窗口属性........... 在下面函数中改变窗口属性 /********************************************************************* ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2017-10-14
在线时间
76 小时
 楼主| 发表于 2018-3-27 22:15:41 | 显示全部楼层
感觉自己真的很蠢,Messagebox_Create();函数果然是可以的,但是无法改变窗体大小,按钮大小等,于是我使用了_CreateMessageBox("Not response!","Caption", 0, GUI_FONT_24B_ASCII)此函数,只要不要建立阻塞式窗口就可以虽然不点击OK按钮关闭,下次窗口还是可以建立起来的,,,在回调函数中可以改变窗口属性...........

在下面函数中改变窗口属性
/*********************************************************************
*
*       _CreateMessageBox
*/
static WM_HWIN _CreateMessageBox(const char *sMessage, const char * sCaption, int Flags, const GUI_FONT * pFont) {

    WM_HWIN  hWin;
    WM_HWIN  hItem;
    GUI_RECT Rect;
    hWin =MESSAGEBOX_Create(sMessage, sCaption, Flags);
    //
    // Change font of message box window
    //
    FRAMEWIN_SetFont(hWin, pFont);            
    //
    // Adjust size
    //
    WM_GetWindowRectEx(hWin, &Rect);         
    WM_SetWindowPos(hWin, Rect.x0 - 70,
                        Rect.y0 - 70,
                        Rect.x1 - Rect.x0 + 1 +140,
                        Rect.y1 - Rect.y0 + 1 +140);

    //
    // Change font of button widget
    //
    hItem =WM_GetDialogItem(hWin, GUI_ID_OK);
    BUTTON_SetFont(hItem, pFont);
    //
    // Adjust size of button widget
    //
    WM_GetWindowRectEx(hItem, &Rect);   
    WM_SetWindowPos(hItem, Rect.x0 +40,
                         Rect.y0 + 70,
                         Rect.x1 - Rect.x0 + 1+ 70,
                         Rect.y1 - Rect.y0 + 1+ 20);
    //
    // Change font of text widget
    //
    hItem =WM_GetDialogItem(hWin, GUI_ID_TEXT0);
    TEXT_SetFont(hItem, pFont);
    //
    // Adjust size text widget
    //
    WM_GetWindowRectEx(hItem, &Rect);           
    WM_SetWindowPos(hItem, Rect.x0+5,
                         Rect.y0+30,
                         Rect.x1 - Rect.x0 + 1+ 120,
                         Rect.y1 - Rect.y0 + 1+ 40);
   
    WM_SetFocus(hWin);
    return hWin;

}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2018-3-28 00:53:59 | 显示全部楼层
帮顶
回复

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-3-28 01:48:02 | 显示全部楼层
DIY 的在 消息回调中加入
;
case  WM_PAINT :
  WM_BringToTop(hWin_Message);
  break;
;
;
非DIY, 在主窗口中, 加入; (让其自动置顶);
;
case  WM_PAINT :
  WM_BringToBottom(hWin_Message);
  break;
;
回复

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-3-28 12:19:04 | 显示全部楼层
本帖最后由 wlq390934605 于 2018-3-28 12:20 编辑

使用窗口自动置顶;
;
在主窗口回调 或 消息消窗口回调中加入;
;
case WM_PAINT :
{
  WM_BringToTop(hWin_Message);
}
break;
;
EMWIN内部消息窗口无法加入回调, 只有加在主窗口中;
;
捕获.PNG
回复

使用道具 举报

28

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2017-10-14
在线时间
76 小时
 楼主| 发表于 2018-3-28 17:20:53 | 显示全部楼层
回复

使用道具 举报

28

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2017-10-14
在线时间
76 小时
 楼主| 发表于 2018-3-28 18:32:19 | 显示全部楼层
wlq390934605 发表于 2018-3-28 12:19
使用窗口自动置顶;
;
在主窗口回调 或 消息消窗口回调中加入;

已经尝试过在主窗口回调函数中不断置顶,虽然解决了底层窗口问题,但是一点击消息框中的OK按钮就会卡死。刚开始怀疑由于关闭窗口导致主窗口回调函数置顶函数找不到句柄,后来加了标志位,但是还存在这个问题,之后又在加标志位与创建消息窗口前后设置临界区,还是存在这样的问题,这该如何是好?????
回复

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-3-28 20:30:41 | 显示全部楼层
本帖最后由 wlq390934605 于 2018-3-28 20:38 编辑

你连窗口的创建与删除都不会, 就不要来弄这个;
;置顶只会发生在点击, 冻是总是;
;
消息用这个就行了, 用不着你DIY;
;

捕获.PNG
回复

使用道具 举报

28

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2017-10-14
在线时间
76 小时
 楼主| 发表于 2018-3-28 22:47:30 | 显示全部楼层
wlq390934605 发表于 2018-3-28 20:30
你连窗口的创建与删除都不会, 就不要来弄这个;
;置顶只会发生在点击, 冻是总是;
;

在已有窗口上点击按钮创建消息框,但是点击消息框以外那个底层窗口,消息窗口会被覆盖,当再次点击按钮就会卡死???现在是让消息框显示在顶层,但是点击OK就会卡死。。
回复

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-3-29 02:36:30 | 显示全部楼层
先学会窗口创建与删除, 再来解决这个问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 03:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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