TranslateMessage ().與 WindowProc的差別 之二. (調試了一天!!!)

來源:互聯網
上載者:User

 問題描述:

今天使用CustomToolTipDemo的時候, 遇到了一個很奇怪的問題, 在作者提供的MFC例子上, 我建立了一個按鈕, 並且把該按鈕綁定搞一個CButton類, 然後, 為該按鈕添加tooltip, 運行一切正常. 當滑鼠划過按鈕上方的時候, 可以顯示tooltip.

然後, 我自己建立一個MFC工程, 添加按鈕控制項, 綁定CButton, 然後運行, 當滑鼠滑過按鈕上方的時候, 就顯示不出tooltip. 跟蹤進去, CButton類裡面確實有值, m_hWnd非空, 還對應這CButton的視窗矩形都可以看到.

思路發現:

通過自己研究代碼, 發現, 作者的demo, 當滑鼠滑過按鈕的時候, 主視窗仍可以處理WM_MOUSEMOVE訊息, 而我的主視窗竟收不到WM_MOUSEMOVE訊息! 
原來, 作者是在父視窗的PreTranslateMessage()裡面處理的MouseMove訊息, 而我是在父視窗的WindowProc()裡面處理的!
原因是, 當父表單執行過TranslateMessage()之後, 把MouseMove訊息發送到CButton類對應的視窗上去了, 而自己沒有留下這個訊息! 難怪作者要在TranslateMessage()裡面處理MouseMove訊息.

!!!注意
1:
當滑鼠滑過子控制項時, 父表單將不會再會收到滑鼠之類的訊息. 除非子控制項把訊息回傳給父表單.
據說, 一般MFC工程師, 都會派生自己的CMyButton類, 處理訊息, 有必要時把訊息回傳給父表單.
2:
要麼,在父表單派發訊息之前就處理該訊息!!! 呵呵 就是TranslateMessage().

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.