學習和使用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