Duilib 源码分析之 Shortcut 篇

Duilib 中的快捷键实现方式也很简单,为控件添加属性 shortcut 即可,值设置为某个字母,当按下 Alt+字母时,窗口会接收到 WM_SYSCHAR 消息,然后找到对应的控件进行响应。
代码如下:

case WM_SYSCHAR:
 {
if( m_pRoot == NULL ) return false;
    // Handle ALT-shortcut key-combinations
    FINDSHORTCUT fs = { 0 };
    fs.ch = toupper((int)wParam);
    CControlUI* pControl = m_pRoot->FindControl(__FindControlFromShortcut, &fs, UIFIND_ENABLED | UIFIND_ME_FIRST | UIFIND_TOP_FIRST);
    if( pControl != NULL ) {
        pControl->SetFocus();
        pControl->Activate();
        return true;
    }
 }
 break;

wParam 中存放的是按下的字母,然后调用 m_pRoot->FindControl(__FindControlFromShortcut, &fs, UIFIND_ENABLED | UIFIND_ME_FIRST | UIFIND_TOP_FIRST) 查找对应的控件

  • FindControl 的调用者是 m_pRoot 代表从根结点开始查找
  • UIFIND_ENABLED 只查找非禁用状态的控件
  • UIFIND_ME_FIRST 从当前控件开始查找
  • UIFIND_TOP_FIRST 从最上层的控件开始查找。 有可能多个控件的位置有覆盖的情况,最上层的控件即是最后绘制的控件。

找到对应的控件后,调用 SetFocus() 设置焦点并响应此控件的事件 : Activate()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值