硬汉嵌入式论坛

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

[μCGUI] 按键创建/删除窗口的疑问求助!

[复制链接]

3

主题

9

回帖

3

积分

新手上路

积分
3
发表于 2015-9-5 17:01:15 | 显示全部楼层 |阅读模式
问题是这样:预想是在桌面窗口的回调函数中处理按键消息,ZERO键实现一个窗口的创建,ALARM实现窗口的删除。实际效果是能够创建窗口,但无法删除(具体现象是桌面窗口没有重绘,创建的窗口依旧存在)。


1为证明程序没有卡死,加入了LED指示按键后的响应状态,ZERO创建窗口,同时电亮LED,ALARM删除窗口并熄灭LED,实际效果是,LED出现点亮并熄灭,但创建的窗口依旧是删除后依旧存在。



1代码如下


各位大神指点迷境!万谢!

static void WinHandler(WM_MESSAGE * pMsg) {
   
    switch (pMsg->MsgId) {
        case WM_PAINT:         //
            LED1_On();                          //WM_PAINTûóDμ½Õaàï
            GUI_SetBkColor(GUI_BLACK);      /* Automacally update desktop window */
      GUI_Clear();
      GUI_SetColor(GUI_WHITE);
          GUI_SetFont(&GUI_Font24B_ASCII);
      GUI_DispStringAt("WM Test",400,200);
          break;
   
        case WM_NOTIFY_PARENT:   //é¾3y×ó′°¿úê±»áí¨Öa¸¸′°¿ú£¬£¨μãááLEDÖ¤Ã÷ £©
            LED1_Off();
        break;
        
        case WM_KEY:
            switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {
                case KEY_MESSAGE_ZERO    :
                    
                LED0_On();
                hProgbar = PROGBAR_Create(100,40,100,20,WM_CF_SHOW);
            
                break;
               
                case KEY_MESSAGE_ALARM   :
               
                PROGBAR_Delete(hProgbar);   
                WM_InvalidateWindow();
        LED0_Off();
                break;
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107482
QQ
发表于 2015-9-5 18:37:56 | 显示全部楼层
这个函数有参数的,你没有写应该无法编译通过的。
WM_InvalidateWindow(无效的窗口句柄)
回复

使用道具 举报

3

主题

9

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-9-5 21:16:27 | 显示全部楼层
先感谢你的回复。这个没有写参数的错误是我在发帖时拷贝的先前的内容,后面我是加上了参数:桌面窗口的句柄,效果是看到背景窗口有刷新的现象,但是原有的控件还是没有被刷掉。其实这个问题困扰了我好几天,我在11期的提高教程看“监护仪”的源代码,其中是有利用按键分别发送消息给回调函数创建/删除窗口的,我参考它在自己的程序中想要实现相似的效果,实际却没能做到。看过手册上,删除窗口时会先向父窗口发送通知消息  ,然后给本身发删除消息,最后再给父窗口发重绘消息,我利用LED灯追踪流程,发现最后父窗口并没有接受到重绘的消息。很困扰,希望能再给指点,谢谢!
回复

使用道具 举报

3

主题

9

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-9-5 21:16:51 | 显示全部楼层

回 eric2013 的帖子

eric2013:这个函数有参数的,你没有写应该无法编译通过的。
WM_InvalidateWindow(无效的窗口句柄) (2015-09-05 18:37) 
先感谢你的回复。这个没有写参数的错误是我在发帖时拷贝的先前的内容,后面我是加上了参数:桌面窗口的句柄,效果是看到背景窗口有刷新的现象,但是原有的控件还是没有被刷掉。其实这个问题困扰了我好几天,我在11期的提高教程看“监护仪”的源代码,其中是有利用按键分别发送消息给回调函数创建/删除窗口的,我参考它在自己的程序中想要实现相似的效果,实际却没能做到。看过手册上,删除窗口时会先向父窗口发送通知消息  ,然后给本身发删除消息,最后再给父窗口发重绘消息,我利用LED灯追踪流程,发现最后父窗口并没有接受到重绘的消息。很困扰,希望能再给指点,谢谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107482
QQ
发表于 2015-9-5 21:27:46 | 显示全部楼层
在这个函数
WM_InvalidateWindow();
后面直接调用WM_Exec()试试看。

另外就是句柄hProgbar是全局变量吧。
回复

使用道具 举报

3

主题

9

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-9-6 09:11:37 | 显示全部楼层

回 eric2013 的帖子

eric2013:在这个函数
WM_InvalidateWindow();
后面直接调用WM_Exec()试试看。

另外就是句柄hProgbar是全局变量吧。
....... (2015-09-05 21:27) 
已尝试,无效。
hProgbar是全局变量
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 12:25 , Processed in 0.175393 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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