Win32-API: 终于能正常的捕获焦点事件: WM_COMMAND、BN_SETFOCUS、EN_SETFOCUS

学习和使用win32-api来写窗口程序算算也有二三年了。

以前有个需求,想捕获控件的焦点事件(SETFOCUS、 KILLFOCUS),我一直认为应该捕获 WM_SETFOCUS 和 WM_KILLFOCUS。

当然一直都没有捕获到 WM_SETFOCUS 和 WM_KILLFOCUS。

 

今天无意发现一个关键词: BN_SETFOCUS,然后顺藤摸瓜...,终于搞明白了一切:

 

如果想捕获控件的焦点使用,应该在 WM_COMMAND 中处理:

比如处理Edit控件的焦点事件:

case WM_COMMAND:

{

    if(HIWORD(wParam) == EN_SETFOCUS || HIWORD(wParam) == EN_KILLFOCUS)

    {

        printf("---------------edit\n");

     }

    break;

}

 

如果处理Button控件的焦点事件:  

(这里需要注意一点,button控件在创建时必须指定一个样式: BS_NOTIFY,才能在WM_COMMAND中捕获到焦点事件,相关资料: http://blog.csdn.net/hellosijian/article/details/6615295)

(combo控件不用设置 BS_NOTIFY)

 

case WM_COMMAND:

{

    if(HIWORD(wParam) == BN_SETFOCUS || HIWORD(wParam) == BN_KILLFOCUS)

    {

        printf("---------------edit\n");

     }

    break;

}

 

捕获Edit控件的Change事件:

case WM_COMMAND:

{

    if(HIWORD(wParam) == EN_CHANGE)

    {

        printf("---------------edit\n");

     }

    break;

}

 

2014-09-26

 

名品推荐:千骄马 桃太郎 安遇安琦

 

转载于:https://www.cnblogs.com/personnel/p/4585082.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值