打造自定義的 AfxMessageBox

 一、需求
  與標準的 MessageBox 相比,MFC提供了 AfxMessageBox 的方法是我們對消息框的變得更加容易。然而簡單的 AfxMessageBox 有時已經不能夠滿足我們的需求了:有時候我僅僅想提示用戶一下,並不需要用戶確認,也就是說過一段時間消息框就能自動關閉。
  您可能馬上會想到,使用自己定義的對話框來替代程序中的 AfxMessageBox,沒錯,這樣的結果非常能夠讓你滿意,但怎麼實現呢?
  您也許會說,我自己寫一個 OwnMessageBox 函數,先前調用 AfxMessageBox 的地方都換成它就好了,非常好的主意!但你終歸要去一個個的替換,是不是感覺很沒有挑戰性呢?現在本文將介紹一個比較好的辦法解決此問題。

二、解決辦法
  MFC中的CWinApp提供了一個名爲 DoMessageBox 的虛函數供它的子類進行重載操作,我們先來看一下AfxMessageBox的源代碼:

重載 DoMessageBox 後我們得到了什麼呢?

其中 CWinApp::DoMessageBox 就是對 Windows API 中的 ::MessageBox 的封裝,再此不多敘。
  從代碼中看出,調用 AfxMessageBox 先要到 DoMessageBox 這裏審覈,審覈通過再執行標準的MessageBox,這下你該知道怎麼做了吧?到這時,可能你會這樣寫到:

  這樣的寫法沒有問題,但也許有的時候仍然需要彈出標準的 MessageBox 需要用戶確認,怎麼設計才更加合理呢?AfxMessageBox 的第二個參數 nType 是指定 MessageBox 的類型,在 Winuser.h 中定義了一些標準的類型,請注意 nType 是 UINT 類型的,而標準類型的定義纔不到10個,你完全可以添加自己的 MessageBox 類型!在 OwnAfxMessageBoxApp.h 中定義:

你的 DoMessageBox 處理函數:

你的調用代碼:

到這裏原理部分已經講完了,具體的實現方法請查看代碼。感謝 CSDN 的 bongny (金輝)提供了思路。 

三、結束語
  其實這個根本都稱不上技術,只要善於發現就會有新的收穫。祝大家身體健康,萬事如意!
最後打一句廣告:請關注恆金軟件 - http://www.kingesoft.com !
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章