MiniGui返回主窗口按键失效问题



最近项目用到了MiniGui,界面比较简单就是一个主窗口,窗口两边是独立的功能键。点击功能键会调用对话框,有几层就调用几次对话框。
        结束或取消操作时,返回到主窗口。问题是当我从多层对话框直接跳转到主窗口后,屏幕的按键失效了。


我在主窗口中多次调用对话框,对话框在调用对话框。然后直接退回到主窗口后,主窗口循环正常,但是不响应键盘按键了。
 
对话框中调用 (创建对话框 DialogBoxIndirectParam )
SendNotifyMessage(hwnd_second_dlg, MSG_CLOSE, wParam, lParam);

用来关闭主窗口的下级对话框
 

case MSG_CLOSE:
    DestroyAllControls(hDlg);
    DestroyMainWindow(hDlg);
MainWindowCleanup(hDlg);
可以成功关闭主窗口中打开的所有对话框
执行后主窗口的边键(对应键盘 F1 - F8) 失效。


在MiniGui的源代码中增加了打印信息,跟踪运行情况。
BOOL IdleHandler4Server (PMSGQUEUE msg_queue) 【server.c】

-负责读取client端消息和键盘按键动作的消息,循环执行。
static void ParseEvent (PMSGQUEUE msg_que, int event)【server.c】

-按键操作处理函数,当然还可以处理鼠标的消息。
mginit调用int __mg_send2client (MSG* msg, MG_Client* client) 【client.c】发送按键消息到Client端。


发现返回主界面后就不调用__mg_send2client 。那么继续跟踪在什么地方调用__mg_send2client 发送的消息。
static int srvKeyMessageHandler (int message, int scancode, DWORD status)【desktop-procs.c】

if (__mg_zorder_info->active_win) {
                    __mg_post_msg_by_znode (__mg_zorder_info,
                                    __mg_zorder_info->active_win,
                                    MSG_CLOSE, 0, 0);
                    return 0;
                }
如果__mg_zorder_info->active_win为0,mginit将不发送按键消息给Client端。

找到原因就好办了,去MiniGui中查找函数SetActiveWindow(hwnd);
把函数加到主窗口的MSG_PAINT消息中执行,边键果然好使了!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值