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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM