DuiLib 对键盘消息的处理——ESC、空格键

今天,改BUG
窗体显示,按空格键,追到:
bool CPaintManagerUI::PreMessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& /*lRes*/)
{
    for( int i = 0; i < m_aPreMessageFilters.GetSize(); i++ )                              // 消息过滤
    {
        bool bHandled = false;                                                             //  递归调用
        LRESULT lResult = static_cast<IMessageFilterUI*>(m_aPreMessageFilters[i])->MessageHandler(uMsg, wParam, lParam, bHandled);
        if( bHandled ) {                                                                   // 注意: 这里的条件不是上面的返回值
            return true;
        }
    }
    switch( uMsg ) 
{
case WM_KEYDOWN:
 ..........................
}
}


bool CPaintManagerUI::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lRes)
{
    // Cycle through listeners
    for( int i = 0; i < m_aMessageFilters.GetSize(); i++ ) 
    {
        bool bHandled = false;                                                             // 消息过滤
        LRESULT lResult = static_cast<IMessageFilterUI*>(m_aMessageFilters[i])->MessageHandler(uMsg, wParam, lParam, bHandled);
        if( bHandled ) {
            lRes = lResult;
            return true;
        }
    }
    // Custom handling of events
    switch( uMsg ) {
    case WM_APP + 1:
        {
      
        }
case WM_KEYDOWN:
        {
            if( m_pFocus == NULL ) break;
            TEventUI event = { 0 };
            event.Type = UIEVENT_KEYDOWN;
            event.chKey = (TCHAR)wParam;
            event.ptMouse = m_ptLastMousePos;
            event.wKeyState = MapKeyState();
            event.dwTimestamp = ::GetTickCount();
            m_pFocus->Event(event);                                                         // 处理焦点消息
            m_pEventKey = m_pFocus;                                
        }
        break;
......................................
}
DuiLib屏蔽键盘消息:
头文件:
LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM /*lParam*/, bool& /*bHandled*/);
源文件:
LRESULT C***::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
{
if (uMsg == WM_KEYDOWN)
{
switch (wParam)
{
case VK_RETURN:                        // 回车建 
Login();
break;
case VK_ESCAPE:                        // ESC 
bHandled = true;

// return 1;                       // 返回值,在这里不起作用,  真正起作用的是这个参数:bHandled                  
case VK_SPACE:                         // 空格键
bHandled = true;
// return 1;
default:
break;
}
}


return FALSE;
}


ESC键,单纯的:case VK_ESCAPE:                        // ESC   可能会屏蔽掉
          但:case VK_SPACE:                         // 空格键  不行,跟踪发现它后面会进入点击消息   ::notify()中( // 处理焦点消息)。
真正的屏蔽掉消息:   
    对其进行赋值:bHandled = true;              

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值