dialog捕获不到shift快捷键问题解决

2 篇文章 0 订阅

1.在dialog上放一个图片按件,用dialog的onkeyup直接进行快捷键捕获,会出现捕获不到的问题,原因是dialog上有控件,而onkeyup针对的dialog,所以无法捕获。解决方法如下:

(1)在pretranslateMessage中进行捕获,因为此函数是用来处理PostMessage和键盘/鼠标发出的消息;

(2)在新控件中加入消息处理,并在响应函数中进行消息处理。

2.PreTranslateMessage,PostMessage,SendMessage区别

    PreTranslateMessage只能处理消息队列中的消息,也就是PostMessage发出的消息/鼠标键盘消息等。

        SendMessage发的消息不进行消息队列,而是直接调用函数处理,所以这种消息用PreTranslateMessage捕获不到,如WM_KILLFOCUS,WM_SETFOCUS。

        SendMessage的消息是直接执行处理函数,等消息处理完才返回(执行完SendMessage函数);而PostMessage则把消息发送后立即返回,把消息挂到消息队列等待处理。所以以下程序是错的:

#include<windows.h>

Int main()
{

PostMessage(HWND_BROADCAST,WM_QUIT,0,0);

Return 0;

}

PostMessage发出WM_QUIT消息到消息队列,由于它立即返回就执行下一条语句结束整个程序,消息还在消息队列中未处理出错!

 

3.程序示例:

BOOL CLineScanView::PreTranslateMessage(MSG*pMsg)

{

       if (pMsg->message == WM_KEYUP)

       {

              switch(pMsg->wParam)

              {

              case VK_LEFT:

                      ...

                     break;

              case VK_RIGHT:

      ...

                      break;

                 case VK_SHIFT:

                     ...

                     break;

              case 'B':

                     ...

                     break;

              case 'J':

                     ...

                     break;

               default:

                     break;

              }

       }

       return CFormView::PreTranslateMessage(pMsg);

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhang11wu4

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值