硬汉嵌入式论坛

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

[μCGUI] 子窗体给父窗体发消息,父窗体收到后删除窗体程序直接死掉请求指点

[复制链接]

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
发表于 2015-4-17 09:56:07 | 显示全部楼层 |阅读模式
父窗体中有一个按钮,子窗体中有一个按钮, 我想按下子窗体的按钮发送消息父窗体收到消息后删除父窗体(或者子窗体) ,现在子窗体按钮按下后不管删除子窗体还是父窗体程序都没有反应只是子窗体的按钮部分变成了父窗体的背景色,感觉程序死掉了。 如果通过父窗体中的按钮按下后删除子窗体或者父窗体就可以删除了,想知道这是什么问题? 怎样通过子窗体发送消息给父窗体删除子窗体或者父窗体呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107518
QQ
发表于 2015-4-17 10:38:35 | 显示全部楼层
特别注意,删除父窗口,父窗口上所有的控件包括子窗口全部被删除。
回复

使用道具 举报

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
 楼主| 发表于 2015-4-17 11:54:07 | 显示全部楼层

回 eric2013 的帖子

eric2013:特别注意,删除父窗口,父窗口上所有的控件包括子窗口全部被删除。
 (2015-04-17 10:38) 
但是一个都没删除掉。。。,卡那了,按按钮也就不管用了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107518
QQ
发表于 2015-4-17 11:55:31 | 显示全部楼层

回 业未央 的帖子

业未央:但是一个都没删除掉。。。,卡那了,按按钮也就不管用了 (2015-04-17 11:54) 
代码能在模拟器上面跑不,不行的话,你把代码贴上来,晚上有时间了我给你试试。
回复

使用道具 举报

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
 楼主| 发表于 2015-4-17 11:58:33 | 显示全部楼层

回 eric2013 的帖子

eric2013:代码能在模拟器上面跑不,不行的话,你把代码贴上来,晚上有时间了我给你试试。 (2015-04-17 11:55) 
好的,一会我把代码贴出来,麻烦你晚上帮我看一下吧
回复

使用道具 举报

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
 楼主| 发表于 2015-4-17 12:53:09 | 显示全部楼层
lx.txt (3 KB, 下载次数: 215)   代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107518
QQ
发表于 2015-4-17 13:16:26 | 显示全部楼层

回 业未央 的帖子

业未央:  代码 (2015-04-17 12:53) 
已经下载代码,晚上我测试下,到时给你答复。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107518
QQ
发表于 2015-4-18 23:03:06 | 显示全部楼层
不好意思啊,楼主,下周一了我给你测试下。今天瞎忙活给耽误了。
回复

使用道具 举报

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
 楼主| 发表于 2015-4-20 11:15:52 | 显示全部楼层

回 eric2013 的帖子

eric2013:不好意思啊,楼主,下周一了我给你测试下。今天瞎忙活给耽误了。 (2015-04-18 23:03) 
硬汉今天帮我测一下吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107518
QQ
发表于 2015-4-20 22:35:04 | 显示全部楼层
简单给你改了下,子窗口删除自己是可以的,删除父窗口不可以,代码可以在模拟器上面跑。
aa.gif


  1. /*********************************************************************
  2. *                SEGGER Microcontroller GmbH & Co. KG                *
  3. *        Solutions for real time microcontroller applications        *
  4. **********************************************************************
  5. *                                                                    *
  6. *        (c) 1996 - 2015  SEGGER Microcontroller GmbH & Co. KG       *
  7. *                                                                    *
  8. *        Internet: www.segger.com    Support:  support@segger.com    *
  9. *                                                                    *
  10. **********************************************************************
  11. ** emWin V5.28 - Graphical user interface for embedded applications **
  12. emWin is protected by international copyright laws.   Knowledge of the
  13. source code may not be used to write a similar product.  This file may
  14. only  be used  in accordance  with  a license  and should  not be  re-
  15. distributed in any way. We appreciate your understanding and fairness.
  16. ----------------------------------------------------------------------
  17. File        : GUIDEMO_Start.c
  18. Purpose     : GUIDEMO initialization
  19. ----------------------------------------------------------------------
  20. */
  21. #include "GUI.h"
  22. #include "gui.h"
  23. #include "BUTTON.h"
  24. #include "TEXT.h"
  25. #include "EDIT.h"
  26. #include <stdio.h>
  27. #define  Button1   0x821
  28. #define  Button2   0x822
  29. #define  Edit1     0x823
  30. #define  Edit2     0x824
  31. #define  DltMess   0x880
  32. #define ChangeColor 0x830
  33. WM_HWIN hParent,hChild;
  34. BUTTON_Handle hPButton,hCButton;
  35. EDIT_Handle hEdit,hEditC;
  36. unsigned char  pCnt = 0, cCnt = 0;
  37. unsigned int BkColor = GUI_WHITE;
  38. void _cbCall( WM_MESSAGE *pMsg )   // 父窗体回调函数
  39. {
  40.    int id,Ncod;
  41.    switch(pMsg->MsgId)
  42.    {
  43.      case WM_DELETE:
  44.           break;
  45.      case ChangeColor:
  46.          BkColor = GUI_GREEN;         
  47.          WM_DeleteWindow(hChild);
  48.           WM_InvalidateWindow(hParent);           
  49.           break;
  50.         case WM_PAINT :
  51.         GUI_SetBkColor(BkColor);
  52.         GUI_SetColor(GUI_RED);
  53.         GUI_Clear();
  54.         break;
  55.      case WM_NOTIFY_PARENT:
  56.        id = WM_GetId(pMsg->hWinSrc);
  57.       
  58.        Ncod = pMsg->Data.v;
  59.        switch( id )
  60.        {
  61.             case Button1:
  62.            if( Ncod==WM_NOTIFICATION_RELEASED)
  63.            { pCnt++;
  64.             printf("%d",pCnt);
  65.             EDIT_SetValue(hEdit,pCnt);
  66.             GUI_DispDecAt(pCnt,70,20,3);
  67.             WM_InvalidateWindow(hParent);
  68.            };
  69.          break;
  70.        } ;
  71.      break;
  72.      default:
  73.        WM_DefaultProc(pMsg); break;
  74.    }
  75. }
  76. void SendMessage( int hWin , int hSrc ,int msg )    // 发送消息函数
  77. {
  78.     WM_MESSAGE pMsg;   //WM_MESSAGE
  79.     pMsg.MsgId = msg;
  80.    
  81.     pMsg.hWin = hWin;
  82.     pMsg.hWinSrc = hSrc;
  83.     WM_SendToParent(hSrc,&pMsg);
  84. }
  85. void _cbChild( WM_MESSAGE *pMsg )   // 子窗体回调函数
  86. {
  87.     WM_HWIN  hWin ;   
  88.     int id,Ncod;
  89.     switch(pMsg->MsgId)
  90.     {
  91.      case WM_DELETE:
  92.           break;
  93.       case WM_PAINT:
  94.          GUI_SetBkColor(GUI_BLACK);
  95.          GUI_SetColor(GUI_WHITE);
  96.          GUI_Clear();     
  97.          break;
  98.       
  99.       case WM_NOTIFY_PARENT:
  100.          id = WM_GetId(pMsg->hWinSrc); // 源窗口
  101.          Ncod = pMsg->Data.v;
  102.          switch( id )
  103.          {
  104.             case Button2:
  105.             if( Ncod==WM_NOTIFICATION_RELEASED)
  106.                {
  107.               SendMessage(hParent,hChild,ChangeColor);
  108. //              WM_DeleteWindow(pMsg->hWin);
  109.             }
  110.            
  111. //                cCnt++;
  112. //            EDIT_SetValue(hEditC,cCnt);
  113. //            GUI_DispDecAt(cCnt,90,90,3);
  114. //            
  115. //             WM_InvalidateWindow(hChild);
  116.              break;           
  117.          };
  118.         break;
  119.       default:
  120.        WM_DefaultProc(pMsg); break;        
  121.     }
  122. }
  123. void Show(void)          // 窗体的初始化
  124. {
  125.     hParent = WM_CreateWindow(0,0,240,320,WM_CF_SHOW, _cbCall,0);  
  126.      hChild  = WM_CreateWindowAsChild(120,120,180,180,hParent,WM_CF_SHOW,_cbChild,0);
  127.     hPButton = BUTTON_CreateEx(10,10,40,40,hParent,WM_CF_SHOW,0,Button1);
  128.     hCButton = BUTTON_CreateEx(10,10,40,40,hChild,WM_CF_SHOW,0,Button2);                                    
  129.      BUTTON_SetFocussable(hPButton,0);    // 设置按钮不捕获焦点
  130.     BUTTON_SetFocussable(hCButton,0);    // 设置按钮不捕获焦点
  131.     hEdit = EDIT_CreateEx(60,60,80,30,hParent,WM_CF_SHOW,0,Edit1,2);
  132.     EDIT_SetDecMode(hEdit,0,0,10000,0,0);
  133.    
  134.     hEditC = EDIT_CreateEx(60,60,50,30,hChild,WM_CF_SHOW,0,Edit2,2);
  135.     EDIT_SetDecMode(hEditC,0,0,10000,0,0);  
  136.    
  137. }
  138. // USER START (Optionally insert additional public code)
  139. // USER END
  140. void MainTask(void)
  141. {
  142.   GUI_Init();
  143. Show();
  144.     while(1)
  145. {
  146.   GUI_Delay(20);
  147. }
  148. }
  149. /*************************** End of file ****************************/
复制代码
回复

使用道具 举报

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
 楼主| 发表于 2015-4-21 09:31:23 | 显示全部楼层

回 eric2013 的帖子

eric2013:简单给你改了下,子窗口删除自己是可以的,删除父窗口不可以,代码可以在模拟器上面跑。



/*********************************************************************
....... (2015-04-20 22:35) 
为什么在子窗体的回调函数中加上   EDIT_SetValue(hEditC,cCnt);这句就死 了呢,126行
回复

使用道具 举报

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
 楼主| 发表于 2015-4-21 09:53:36 | 显示全部楼层

回 eric2013 的帖子

eric2013:简单给你改了下,子窗口删除自己是可以的,删除父窗口不可以,代码可以在模拟器上面跑。



/*********************************************************************
....... (2015-04-20 22:35) 
而且删除了第126行 EDIT_SetValue(hEditC,cCnt);这句,子窗体就可以发消息删除父窗体和子窗体 了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107518
QQ
发表于 2015-4-22 13:44:45 | 显示全部楼层

回 业未央 的帖子

业未央:而且删除了第126行 EDIT_SetValue(hEditC,cCnt);这句,子窗体就可以发消息删除父窗体和子窗体 了 (2015-04-21 09:53) 
特别注意,只要是按键的消息都会跳转到这个回调函数里面执行的,包括按下,弹起等。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-4 14:16 , Processed in 0.347096 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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